はじめに
こんにちは!システム開発部のYです。
WWDC2023で Get started with privacy manifests 動画が上がっており、その中でプライバシーに関して新しく対応が必要な項目が発表されました。
それはXcode15からPrivacy Manifestsが導入され、2024年春には対応必須になります。
対応しないとリジェクト対象とのこと。詳細と対応内容についてまとめていきます。
そもそもこの対応をする為に必要なXcodeのバージョンは何か?
Xcode15から追加されるので、 Xcode15 以上が必要。
なので、秋にはXcode15をダウンロードする為に、MacOS13.4+ 以上が必要。
いつまでに対応すべきか
2024年春までに対応 が必須。アプリレビューの基準の1つになる予定とのことで、対応してないとリジェクト対象になるという事。
2023年秋から開始され、対応されてない場合はAppleがアプリ開発者にメールを送信するとの事。
対応内容についての詳細
全員対応必要なのは以下
Privacy Manifestファイルに以下記載
- 所定のAPIの使用とその目的
- 公式ドキュメント
- 決まっている所定のAPIを使用する際は、その種類と理由の設定が必要。以下が現状の対象
- トラッキングドメインの定義
- Privacy Manifestにドメインを記載することで、ユーザーが許可しない限り、そのドメインからのアクセスを拒否するようになる。
アプリ開発者として、必要なのは以下
- Privacy Manifestファイルに以下記載
- 取得するデータの種類とその目的(Apple が定める プライバシーのデータを扱う場合に必須)
- 公式ドキュメント
- 従来AppStore Connectのフォームで回答提出していたもの
- 取得するデータについて、データの種類とその用途を設定(例: 連絡先情報(名前、電話番号等))アプリのプライバシー詳細について
- 取得するデータの種類とその目的(Apple が定める プライバシーのデータを扱う場合に必須)
- アプリがサードパーティSDKを使っている場合、SDK側でもPrivacy Manifestを保持する必要があるので対応していないSDKがある場合、サードパーティ SDK 開発者に Privacy Manifest を要求する必要がありそうです。
SDK開発者として、必要なのは以下
- コード証明
- Privacy-Impacting SDKs に該当する場合はPrivacy Manifest内で定義
※ Privacy-Impacting SDKs のリストについては、今年後半に公開されるそうです。https://developer.apple.com/forums/thread/731322?answerId=755270022#755270022
アプリ開発者としての実際の対応の仕方
- Xcode15以上ダウンロード(MacOS13.4+ 以上が必要)
- Xcodeの NavigatorAreaから新規ファイル→「App Privacy」を選択し、 ファイル名は変えないように 追加 ⚠️またこの時、 TARGETS にチェックを入れる。入れないと、Xcode Organizer時にエラーが発生。
- Privacy Manifestファイルに、取得するデータの種類とその目的(Apple が定める プライバシーのデータを扱う場合に必須)を記載
- 公式ドキュメントを参照して記載: 公式ドキュメント
- 入力内容
- 公式ドキュメントを参照して記載: 公式ドキュメント
キー | 役割 |
NSPrivacyCollectedDataType | アプリまたはサードパーティ SDK が収集するデータの種類を識別する文字列。以下のデータ型のリストから、アプリまたはサードパーティ SDK が収集するデータに一致する値を選択します。 |
NSPrivacyCollectedDataTypeLinked | アプリまたはサードパーティ SDK がこのデータ型をユーザーの ID にリンクするかどうかを示すブール値。詳細については、「App Store のアプリのプライバシーの詳細」にある「ユーザーにリンクされたデータ」を参照してください。 |
NSPrivacyCollectedDataTypePurposes | アプリまたはサードパーティ SDK がデータを収集する理由をリストする文字列の配列。以下の目的のリストから、アプリまたはサードパーティ SDK がこのデータ型を収集する理由に一致する値を選択してください。 |
NSPrivacyCollectedDataTypeTracking | アプリまたはサードパーティ SDK が追跡にこのデータ型を使用するかどうかを示すブール値。 |
- NSPrivacyCollectedDataType 選択肢
以下より選択します。独自のものを設定すると、正しくPrivacy Reportが生成されないそうです。



連絡先情報 | |
Data type | Description |
Name | 姓名など。 |
Email address | ハッシュ化された電子メール アドレスを含みますが、これに限定されません |
Phone number | ハッシュ化された電話番号が含まれますが、これに限定されません。 |
Physical address | 自宅の住所、物理的な住所、郵送先住所など。 |
Other user contact info. | アプリの外部でユーザーに連絡するために使用できるその他の情報。 |
ヘルス&フィットネス | |
Health | 健康および医療データ(Clinical Health Record API、HealthKit API、MovementDisorderAPI、または健康関連の被験者研究からのデータ、またはその他のユーザー提供の健康データまたは医療データを含みますが、これらに限定されません) |
Fitness | フィットネスおよび運動データ (Motion および Fitness API を含むがこれらに限定されない) |
財務情報 | |
Payment info | 支払い方法、支払いカード番号、銀行口座番号など。アプリが支払いサービスを使用する場合、支払い情報はアプリの外部で入力され、開発者であるあなたが支払い情報にアクセスすることはなく、収集されず、開示する必要はありません。 |
Credit info | クレジットスコアなど |
Other financial info | 給与、収入、資産、借金、その他の財務情報など |
位置 | |
Precise location | ユーザーまたはデバイスの位置を緯度経度と同等以上の解像度で小数点以下 3 桁以上で表す情報 |
Coarse location | おおよその位置情報サービスなど、ユーザーまたはデバイスの位置を小数点以下 3 桁以上の緯度経度よりも低い解像度で記述する情報 |
機密情報 | |
Sensitive info | 人種または民族データ、性的指向、妊娠または出産に関する情報、障害、宗教的または哲学的信念、労働組合への加入、政治的意見、遺伝情報、生体認証データなど |
連絡先 | |
Contacts | ユーザーの電話、アドレス帳、ソーシャル グラフ内の連絡先リストなど |
ユーザーコンテンツ | |
Emails or text messages | 件名、送信者、受信者、電子メールまたはメッセージの内容を含む |
Photos or videos | ユーザーの写真またはビデオ |
Audio data | ユーザーの音声またはサウンドの録音 |
Gameplay content | 保存されたゲーム、マルチプレイヤー マッチングまたはゲームプレイ ロジック、ゲーム内のユーザー生成コンテンツなど |
Customer support | カスタマーサポートリクエスト中にユーザーによって生成されたデータ |
Other user content | その他のユーザー作成コンテンツ |
閲覧履歴 | |
Browsing history | ウェブサイトなど、ユーザーが閲覧した、アプリの一部ではないコンテンツに関する情報 |
検索履歴 | |
Search history | アプリ内で実行される検索に関する情報 |
識別子 | |
User ID | スクリーン名、ハンドル、アカウント ID、割り当てられたユーザー ID、顧客番号、または特定のユーザーまたはアカウントを識別するために使用できるその他のユーザーまたはアカウント レベルの ID など |
Device ID | アプリ内で実行される検索に関する情報 |
購入品 | |
Purchase history | アカウントまたは個人の購入または購入傾向 |
使用状況データ | |
Product interaction | アプリの起動、タップ、クリック、スクロール情報、音楽視聴データ、ビデオ表示、ゲーム内の保存場所、ビデオ、または曲、またはユーザーがアプリを操作する方法に関するその他の情報など |
Advertising data | ユーザーが見た広告に関する情報など |
Other usage data | アプリ内のユーザーアクティビティに関するその他のデータ |
診断 | |
Crash data | クラッシュログなど |
Performance data | 起動時間、ハング率、エネルギー使用量など |
Other diagnostic data | アプリに関連する技術的診断を測定する目的で収集されるその他のデータ |
その他のデータ | |
Other data types | 言及されていないその他のデータ型 |
- NSPrivacyCollectedDataTypeLinked 選択肢
- NSPrivacyCollectedDataTypeTracking 選択肢
- NSPrivacyCollectedDataTypePurposes 選択肢
Purpose | Description |
Analytics | データを使用してユーザーの行動を評価すること。これには、既存の製品機能の有効性の理解、新機能の計画、視聴者数や特性の測定などが含まれます。 |
App functionality | ユーザーの認証、機能の有効化、不正行為の防止、セキュリティ対策の実装、サーバーの稼働時間の確保、アプリのクラッシュの最小化、スケーラビリティとパフォーマンスの向上、カスタマー サポートの実行など。 |
Developer’s advertising or marketing | アプリ内でのファーストパーティ広告の表示、ユーザーへのマーケティング コミュニケーションの直接送信、広告を表示するエンティティとのデータ共有など。 |
Other purposes | 記載されていないその他の目的。 |
Product personalization | 推奨製品、投稿、提案のリストなど、ユーザーに表示される内容をカスタマイズします。 |
Third-party advertising | アプリ内にサードパーティの広告を表示する、またはサードパーティの広告を表示するエンティティとデータを共有するなど。 |
Privacy Reportの出力はXcode Organizerから実施します。PDFのPrivacy Reportがダウンロード出来ます。


- 所定のAPIの使用とその目的
- 公式ドキュメントを参照して記載: 公式ドキュメント
- 下記はUserDefaultのみ記載しています。
- 入力する内容
キー | 役割 |
NSPrivacyAccessedAPIType | アプリが使用する必要な理由 API のカテゴリを識別する文字列。指定する値は、以下のセクションにリストされている値のいずれかである必要があります。 |
NSPrivacyAccessedAPITypeReasons | アプリが API を使用する理由を識別する文字列の配列。指定する値は、以下のセクションでアクセスされる API タイプに関連付けられた値である必要があります。 |
- NSPrivacyAccessedAPIType 選択肢
以下より選択します。
キー | 役割 |
File Timestamp | ファイルのタイムスタンプ |
System Boot Time | システムの起動時間 |
Disk Space | 使用可能なディスク容量 |
Active Keyboards | アクティブなキーボードのリスト |
User Defaults | UserDefaults |
- NSPrivacyAccessedAPITypeReasons 選択肢
File Timestamp | |
DDA9.1 | デバイスを使用している人にファイルのタイムスタンプを表示するには、この理由を宣言します。 この理由でアクセスされた情報、または派生した情報は、デバイス外に送信することはできません。 |
C617.1 | アプリコンテナ、アプリグループコンテナ、またはアプリのCloudKitコンテナ内のファイルのタイムスタンプにアクセスするには、この理由を宣言します。 |
3B52.1 | ドキュメント ピッカー ビュー コントローラーを使用するなど、ユーザーが特別にアクセスを許可したファイルまたはディレクトリのタイムスタンプにアクセスするには、この理由を宣言します。 |
System Boot Time | |
35F9.1 | アプリ内で発生したイベント間の経過時間を測定するため、またはタイマーを有効にするための計算を実行するために、システムの起動時間にアクセスするこの理由を宣言します。この理由でアクセスされた情報、または派生した情報は、デバイス外に送信することはできません。アプリ内で発生したイベント間の経過時間に関する情報には例外があり、デバイス外に送信される場合があります。 |
Disk Space | |
85F4.1 | デバイスの使用者にディスク容量情報を表示するには、この理由を宣言します。ディスク容量は、情報単位 (バイトなど) またはメディア タイプと組み合わせた時間単位 (HD ビデオの分単位など) で表示されます。この理由でアクセスされた情報、または派生した情報は、デバイス外に送信することはできません。 |
E174.1 | ファイルを書き込むのに十分なディスク領域があるかどうかを確認するため、またはディスク領域が不足しているときにアプリがファイルを削除できるようにディスク領域が不足しているかどうかを確認するために、この理由を宣言します。アプリは、ユーザーが確認できる方法で、ディスク容量に基づいて異なる動作を行う必要があります。この理由でアクセスされた情報、または派生した情報は、デバイス外に送信することはできません。ディスク容量が不十分な場合、アプリがサーバーからのファイルのダウンロードを回避できる例外があります。 |
Active Keyboards | |
3EC4.1 | アプリがカスタム キーボード アプリであり、この API カテゴリにアクセスしてデバイス上でアクティブなキーボードを決定する場合は、この理由を宣言します。システム全体のカスタム キーボードをユーザーに提供することが、アプリの主要な機能である必要があります。この理由でアクセスされた情報、または派生した情報は、デバイス外に送信することはできません。 |
54BD.1 | アクティブなキーボード情報にアクセスして、デバイスを使用しているユーザーに適切にカスタマイズされたユーザー インターフェイスを表示するためのこの理由を宣言します。アプリにはテキストを入力または編集するためのテキスト フィールドが必要であり、ユーザーが確認できる方法でアクティブなキーボードに基づいて異なる動作をする必要があります。この理由でアクセスされた情報、または派生した情報は、デバイス外に送信することはできません。 |
User Defaults | |
CA92.1 | ユーザーのデフォルトにアクセスして、アプリ自体のみがアクセスできる情報の読み取りおよび書き込みを行うこの理由を宣言します。このため、他のアプリやシステムによって書き込まれた情報の読み取り、または他のアプリからアクセスできる情報の書き込みは許可されません。 |
- トラッキングドメインの定義
- 以下のようにトラッキングをするドメインを記載するそうです。(WWDC2023: https://wwdc.io/share/wwdc23/10060 セッション参照)

終わりに
Privacy Manifests対応についてまとめてみました。
UserDefaultsを使用しているapp多いと思うのでほぼ全てのappが対象になりそうですね、、忙しくなりそうです。
SDK側はすごい問い合わせがきて、もっと忙しくなりそうですが。。
まだ不明な点等あるので、新しい情報が入ったかどうかを常にウォッチしておかないといけませんね。
この記事がお役に立てれば幸いです。また、間違っている点などありましたら、教えていただけると幸いです。