【2024年最新】Privacy manifest対応ガイド！アプリ開発者必見

:::note info
**App Storeにリリースする際に、5月1日から対応が必須になります。**

:::
# そもそも、Privacy manifestって?
Privacy manifestは、**アプリがどのようなユーザーデータに
アクセスしているかをAppleが把握するための仕組み**です。
アプリがユーザーの情報をどのように使用しているかを開示することで、
ユーザーのプライバシーを保護することができます。

https://developer.apple.com/documentation/bundleresources/privacy_manifest_files

# 対応方法

対応方法は以下の2つになります。

- 使用しているパッケージをPrivacy manifest対応バージョンに上げる
- `iOS/Runner` 直下に `PrivacyInfo.xcprivacy` ファイルを追加する

# PrivacyInfo.xcprivacyファイルの作成

ここでは、 `iOS/Runner` 直下に `PrivacyInfo.xcprivacy` ファイルを
追加する方法を説明します。

:::note info
使用しているパッケージをPrivacy manifest対応バージョンに上げる対応方針に関しては対応しなくても審査には通ります。
:::



1. Xcodeから `iOS/Runner` を右クリックし、`New File`を選択します。
2. `Resource` の `App Privacy` を選択します。

   ![スクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637125/588c6f15-1045-0ae5-294f-ca8a4262dfeb.png)

3. `Targets` に `Runner` を選択することを忘れずに、`PrivacyInfo.xcprivacy` ファイルを作成します。

   ![スクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637125/6a696c62-f3cb-59f5-5f89-bffdbdda2050.png)
:::note warn
注意  `Targets` に `Runner` を選択するのを忘れないでください。
:::

### PrivacyInfo.xcprivacyの設定

1. `PrivacyInfo.xcprivacy` を作成すると、 `App Privacy Configuration` という項目が
表示されます。
　
2. `App Privacy Configuration` の `+` ボタンを選択し、以下4つの項目を
必要に応じて追加します。
    - Privacy Tracking Enabled
    - Privacy Tracking Domains
    - Privacy Nutrition Label Types
    - Privacy Accessed API Types

   ![スクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637125/b67a65e4-70d6-c923-1ffd-25efc4cc0a15.png)

### Privacy Tracking Enabled

アプリまたはサードパーティーSDKで
ATT (App Tracking Transparency) を使用している場合に`YES`に変更します。

ATTとは、ユーザーに対してアプリ追跡の許可を求める仕組みです。
詳細は以下をご確認してください。

https://developer.apple.com/jp/app-store/user-privacy-and-data-use/

### Privacy Tracking Domains

`Privacy Tracking Enabled`を`YES`にしている場合に記入します。
アプリまたはサードパーティSDKに接続している
ネットワークのドメインを記述します。

ATTフレームワークを通してトラッキングを許可されない場合は
アプリ側でエラー発生する可能性があります。

### Privacy Nutrition Label Types

Appleで定義されているプライバシーデータを記述します。

アプリをApp Storeにリリースしていない場合は、プライバシーデータを確認し、
該当するデータがあれば追加してください。

https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests

1. `Privacy Nutrition Label Types` の `+` ボタンを押下し、 `Item` を追加します

   ![スクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637125/c18ef3e8-e250-ce3e-564c-c22013e7cf8f.png)

2. `Collected Data Type` には収集するデータのタイプを、 `Linked to User` には
2. 収集したデータをユーザーに紐づけるかどうかを設定します
3. `Used for Tracking` には、トラッキングに使用するかどうかを設定します
4. `Collection Purposes` には、使用目的を以下の項目から選択します
    - 分析
    - アプリの機能
    - 開発者の広告またはマーケティング
    - その他の目的
    - 製品のパーソナライズ
    - サードパーティの広告

### Privacy Accessed API Types

以下四つのAPIを使用している場合に、使用理由を記載しなければなりません。

- **File timestamp APIs:** ファイルの作成日時や最終変更日時など、
ファイルに関連する日付と時刻の情報を取得や操作するためのものです。
　
- **System boot time API:** システムが最後に起動された時刻を知ることができます。
システムの稼働時間を計算するためのものです
　
- **Disk space API:** デバイスのストレージの利用可能な空き容量や使用済み容量を確認するために使われます。ファイルを保存する前に十分な空間があるかを
確認するためのものです
　
- **Active keyboard API:** 使用中のキーボードに関する情報、例えば現在の言語設定やレイアウトなどを提供し、アプリが入力体験をカスタマイズするのを助けます。
　
- **User Defaults API:** ユーザーの設定や好みを保存するためのもので、ユーザーが指定した基準に基づいてアプリの動作をカスタマイズすることができます。

https://developer.apple.com/documentation/foundation/userdefaults

#### 使用理由
理由は以下のようにApple側で定義されているものを使用します。
```
DDA9.1
デバイスを使用している人にファイルのタイムスタンプを表示するには、この理由を宣言します。

この理由でアクセスされた情報、または派生した情報は、デバイス外に送信することはできません。

C617.1
アプリ コンテナ、アプリ グループ コンテナ、またはアプリの CloudKit コンテナ内のファイルのタイムスタンプ、サイズ、またはその他のメタデータにアクセスするには、この理由を宣言します。

3B52.1
ドキュメント ピッカー ビュー コントローラーを使用するなど、ユーザーが特別にアクセスを許可したファイルまたはディレクトリのタイムスタンプ、サイズ、またはその他のメタデータにアクセスするには、この理由を宣言します。

0A2A.1
サードパーティ SDK がアプリが使用するファイル タイムスタンプ API のラッパー関数を提供しており、アプリがラッパー関数を呼び出すときにのみファイル タイムスタンプ API にアクセスする場合は、この理由を宣言します。この理由は、サードパーティ SDK によってのみ宣言される場合があります。サードパーティ SDK が主に必要な理由 API をラップするために作成された場合、この理由は宣言されない可能性があります。

この理由でアクセスされた情報、または派生した情報は、サードパーティ SDK 自体の目的に使用したり、サードパーティ SDK によってデバイス外に送信したりすることはできません。
```
Required Response APIの詳細に関しては、公式ドキュメントをご確認ください。

https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api

#### 登録例

今回の例では `User Defaults`を追加してみます。

![スクリーンショット 0006-04-10 15.10.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637125/231ed84e-9343-95c8-54a1-38f8a8466821.png)

次にApple側で定義されている理由を選択します。

![スクリーンショット 0006-04-10 15.11.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637125/026f6911-e048-b5a3-bfea-05c73c158cad.png)

今回の例では一つのみ追加しましたが、使用しているAPIに応じて追加する必要があります。

#### 設定方法が正しいのか確認する方法

1. XcodeのProductからArchiveを選択

2. Archive実行後該当バージョンを右クリックで `Generate Privacy Report` を選択します。

![スクリーンショット 0006-04-10 15.18.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637125/f398a301-2d3a-c603-391a-91ca7ad18b15.png)

PDFが書き出されたらPrivacy manifestの対応は完了になります。

# まとめ
Privacy manifestの対応は今のところAppleに定義されている、プライバシーデータに
当てはまる項目を追加する等で審査に提出することができます。

現在は(**2024年4月10日**)Privacy manifestに対応されたパッケージバージョンに引き上げなくても審査は通るみたいですが、今後のことを考え対応バージョンまで上げることも
考えた方が良いかもしれません。

最後までお読みいただき、ありがとうございました！

# 告知
最後にお知らせとなりますが、イーディーエーでは一緒に働くエンジニアを
募集しております。詳しくは採用情報ページをご確認ください。

https://eda-inc.jp/recruit/

みなさまからのご応募をお待ちしております。