はじめに

こんにちは!システム開発部のYです。

WWDC2023で Get started with privacy manifests 動画が上がっており、その中でプライバシーに関して新しく対応が必要な項目が発表されました。

それはXcode15からPrivacy Manifestsが導入され、2024年春には対応必須になります。

対応しないとリジェクト対象とのこと。詳細と対応内容についてまとめていきます。

そもそもこの対応をする為に必要なXcodeのバージョンは何か?

Xcode15から追加されるので、 Xcode15 以上が必要。

なので、秋にはXcode15をダウンロードする為に、MacOS13.4+ 以上が必要。

いつまでに対応すべきか

2024年春までに対応 が必須。アプリレビューの基準の1つになる予定とのことで、対応してないとリジェクト対象になるという事。

2023年秋から開始され、対応されてない場合はAppleがアプリ開発者にメールを送信するとの事。

対応内容についての詳細

全員対応必要なのは以下

Privacy Manifestファイルに以下記載

  1. 所定のAPIの使用とその目的
  2. トラッキングドメインの定義
    • Privacy Manifestにドメインを記載することで、ユーザーが許可しない限り、そのドメインからのアクセスを拒否するようになる。

アプリ開発者として、必要なのは以下

  1. Privacy Manifestファイルに以下記載
    • 取得するデータの種類とその目的(Apple が定める プライバシーのデータを扱う場合に必須)
  2. アプリがサードパーティSDKを使っている場合、SDK側でもPrivacy Manifestを保持する必要があるので対応していないSDKがある場合、サードパーティ SDK 開発者に Privacy Manifest を要求する必要がありそうです。

SDK開発者として、必要なのは以下

  1. コード証明
  2. 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 typeDescription
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 選択肢
PurposeDescription
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 DefaultsUserDefaults
  • 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ユーザーのデフォルトにアクセスして、アプリ自体のみがアクセスできる情報の読み取りおよび書き込みを行うこの理由を宣言します。このため、他のアプリやシステムによって書き込まれた情報の読み取り、または他のアプリからアクセスできる情報の書き込みは許可されません。

終わりに

Privacy Manifests対応についてまとめてみました。

UserDefaultsを使用しているapp多いと思うのでほぼ全てのappが対象になりそうですね、、忙しくなりそうです。

SDK側はすごい問い合わせがきて、もっと忙しくなりそうですが。。

まだ不明な点等あるので、新しい情報が入ったかどうかを常にウォッチしておかないといけませんね。

この記事がお役に立てれば幸いです。また、間違っている点などありましたら、教えていただけると幸いです。

参考リンク



ギャップロを運営しているアップフロンティア株式会社では、一緒に働いてくれる仲間を随時、募集しています。 興味がある!一緒に働いてみたい!という方は下記よりご応募お待ちしております。
採用情報をみる