[WWDC23] Xcode15からPrivacy Manifestsが導入

今年の発表で結構重要そうな内容だったので、簡単にまとめておきました。
[WWDC23] Get started with privacy manifests

https://developer.apple.com/videos/play/wwdc2023/10060

Xcode15からPrivacy Manifestsが導入されます。

2023年秋から開始され、2024年春には対応必須（対応しないとリジェクト対象）になるので、また運営側が混乱しそう。
特にPrivacy-impacting SDKsを使っているアプリは要注意。
（またSDK側にすごい問い合わせがいきそう。SDKチーム頑張って！）
（FlutterのAPIとSDKがどうなるのかはビデオだけではよく分からなかった）

# ポイント

1. **Privacy manifests**: Xcode15からPrivacy manifestが導入され、自アプリとThird-party SDKのManifestと署名が必要になる
2. **Privacy report**: Privacy manifestはApp StoreでPrivacy reportとして公開される
3. **Tracking domains**: Manifestにはトラッキングしているドメインを含める必要がある（InstrumentsのPoints of Interest instrumentで確認できる）
4. **Required reason APIs**: 既存API(NSFileSystemFreeSizeとか)にRequired reason APIと呼ばれる新たなカテゴリが追加され、Required reason APIを使う時はManifestに理由を記載する
5. **Privacy-impacting SDKs**: プライバシーへの影響が大きいSDKをAppleが特定したので、そのSDKを使う時は（そのSDKのコピー？と）ManifestとSDK署名が必須（Privacy-impacting SDKs というDocumentationで公開される）
6. **New and updated apps**: 新しいレビュープロセス（Privacy manifests）は2023年秋から開始され、2024年春からレビューの一部（必須化）になる

## Developer News

WWDC初日にDeveloper Newsでも「App Storeのプライバシーに関する最新情報」として公開されています。

https://developer.apple.com/jp/news/?id=av1nevon

## 続編

続編記事を追加しましたが、Privacy Manifests の詳細情報は年内に公式ドキュメントが公開されるまで分かりません。

https://qiita.com/YokohamaHori/items/3d136da7b684c6f6da8f


# 詳細

以下はセッションビデオの詳細です。（もちろんChatGPTにまとめてもらってます）

## Privacy manifests

1. **Privacy manifests**: プライバシーマニフェストは、サードパーティのSDK開発者が自分たちのプライバシー慣行についての情報を提供する新たな方法です。これは、あなたがアプリのプライバシーを正確に表現するのに役立ちます。
2. **PrivacyInfo.xcprivacy**: サードパーティのSDK開発者は、そのSDKにプライバシーマニフェストを含めることができます。マニフェストは "PrivacyInfo.xcprivacy" という名前のファイルで、Xcodeのナビゲータから新規作成できます。
3. **マニフェストの内容**: マニフェストはプロパティリストで、SDKが収集するデータのタイプ、それぞれのデータの使用方法、ユーザーにリンクされているかどうか、App Tracking Transparencyのポリシーに基づいて追跡に使用されているかどうかを宣言します。
4. **マニフェストの確認**: サードパーティのSDKの機能を理解した上でプライバシーマニフェストが一致しているか確認してください。プライバシーマニフェストのデータタイプとデータの使用についての定義は、Nutrition Labelのものと同じなので、アプリプライバシー詳細に関するAppleの開発者ドキュメンテーションを参照してください。

## Privacy report

1. **新しいプライバシーレポート**: すべての情報を一箇所にまとめる新しいプライバシーレポートが導入されました。
2. **プライバシーレポートの作成**: アプリをApp Storeに提出するためにビルドする際、Xcode 15ではアプリプロジェクト内のすべてのプライバシーマニフェストを集約し、宣言されたデータ利用をまとめたプライバシーレポートを作成します。これを見るためには、Xcode Organizerに移動し、アーカイブのコンテキストメニューを表示させ、「Generate Privacy Report」を選択します。
3. **プライバシーレポートの形式**: プライバシーレポートはPDF形式で、使いやすい形に整理されています。その構成は Privacy Nutrition Labelと似ているため、App Store Connectでアプリのプライバシー詳細を提供する際にこのレポートを参照することが容易になります。これにより、あなたのアプリとその依存関係のプライバシー慣行を見直し、理解し、説明するのに役立ちます。

## Tracking domains

1. **プライバシーマニフェストのもう一つの機能**: プライバシーマニフェストは、アプリからのネットワーク接続を理解し管理することを容易にし、トラッキングドメインの管理を支援します。
2. **トラッキングのエッジケース**: ユーザーの許可なしに追跡する意図はないものの、追跡に利用されるドメインへの意図しないネットワーク接続を生み出すエッジケースが存在するかもしれません。例えば、多くのサードパーティSDKは、人々を追跡する前に追跡許可の状態を確認します。しかし、一部のサードパーティSDKは、ユーザーが許可を与えていない場合に追跡を手動で無効化することを求めています。これがエッジケースを生む可能性があります。
3. **PrivacyInfoとPrivacy Tracking Domains**: 許可なく人々を追跡するのを避けるために、追跡を宣言するプライバシーマニフェストには、トラッキングドメインが含まれます。ユーザーが追跡許可を与えていない場合、iOS 17はアプリ内で含まれる任意のプライバシーマニフェストに指定されたトラッキングドメインへの接続を自動的にブロックします。これにより、エッジケースを排除するのに役立ちます。
4. **自身のアプリのプライバシーマニフェスト**: サードパーティのSDKだけでなく、あなた自身のアプリに対してもプライバシーマニフェストを作成し、トラッキングドメインを含めることも可能です。偶発的な接続を防止することで、この機能はユーザーの許可なく追跡しないというあなたの意図を維持するのに役立ちます。
5. **トラッキングと非トラッキング機能の分離**: トラッキング機能と非トラッキング機能が混在しているドメインが存在する場合、それらの機能を異なるホスト名に分けるというアプローチをとることができます。例えば、トラッキング機能をtracking.example.comで、非トラッキング機能をnon-tracking.example.comでホストすることができます。その上で、プライバシーマニフェストでtracking.example.comをトラッキングドメインとして宣言します。
6. **トラッキングドメインへの接続の確認**: あなたのアプリやサードパーティのSDKがトラッキングドメインに接続しているかを常に認識しているとは限りません。Xcode 15では、テスト中にこれを確認するのを助けるために、Points of Interest instrumentが利用できます。これにより、複数のアプリやウェブサイトでユーザーの活動を組み合わせるためにユーザーを追跡する可能性のあるドメインへの接続が表示されるようになりました。
7. **ドメインの追跡使用の評価**: ドメインがApp Tracking Transparencyポリシーに基づいて追跡に利用されているかどうかを評価することができます。もし利用されているのであれば、あなたまたはあなたのSDK開発者は、そのドメインをプライバシーマニフェストでトラッキングドメインとして宣言すべきです。

## Required reason APIs

1. **追跡とフィンガープリンティング**: ユーザーの許可があれば、追跡は許可されます。しかし、フィンガープリンティング（デバイスやユーザーを特定しようとするシグナルの使用）は決して許可されません。ユーザーがアプリに追跡を許可していても、フィンガープリンティングは許可されません。
2. **Required reason API（必須理由API）**: フィンガープリンティングを避けつつ、ユーザーに利益をもたらす重要なユースケースをサポートするために、Required reason APIと呼ばれる新たなカテゴリのAPIがあります。これらのAPIは、その機能性と提供する情報を考慮してカテゴリに分けられています。各カテゴリには、ユースケースに基づいてこれらのAPIにアクセスするための承認された理由のリストがあります。
3. **Required reason APIの例**: 例えば、Required reason APIの一つに「NSFileSystemFreeSize」があります。これはファイルシステム上の空きスペースの量を示します。これの承認された理由の一つは、ファイルをディスクに書き込む前に十分なディスクスペースがあるかどうかを確認するためにこのAPIを使用することをサポートします。
4. **Required reason APIと承認された理由のリスト**: Required reason APIと承認された理由のリストは、Appleの開発者ドキュメンテーションで公開されています。Required reason APIの総数は少ないですが、あなたが1つ以上のAPIを使用している可能性があります。
5. **フィンガープリンティングからのユーザー保護**: アプリやSDKは、承認された理由のみでRequired reason APIにアクセスすることが許可されています。これらのAPIから返されるデータは他の目的で使用することはできません。
6. **プライバシーマニフェストとRequired reason API**: Required reason APIを使用する理由を明確に示し、サードパーティのSDK開発者が同じことを容易にするために、プライバシーマニフェストにはこの情報が含まれます。

## Privacy-impacting SDKs

1. **プライバシーへの影響が大きいSDK**: アプリのエコシステムを見て、ユーザーのプライバシーに特に大きな影響を与えるサードパーティのSDKを特定しました。これらはプライバシーに影響を与えるSDKと呼ばれています。これらのサードパーティのSDKのリスト、および将来の更新は、Appleの開発者ドキュメンテーションで公開されています。
2. **プライバシーへの影響が大きいSDKのマニフェスト要求**: プライバシーに影響を与えるSDKを含むアプリは、そのSDKのプライバシーマニフェストを含むコピーを含めることが求められます。
3. **SDK署名**: Xcode 15はSDK署名もサポートしており、これはあなたのアプリを保護し、サードパーティのSDKの完全性を検証するのに役立ちます。署名を含めることは、すべてのサードパーティのSDKにとって最善の方法です。

## New and updated apps

1. **App Storeの新しいレビュープロセス**: 2023年秋から、App Storeは新しく更新されたアプリがプライバシーに影響を与えるSDKのライブラリを含んでいるかどうかをチェックします。プライバシーに影響を与えるSDKが署名とプライバシーマニフェストを含んでいない場合、Appleはアプリ開発者に情報提供のメールを送ります。また、承認された理由を宣言せずにRequired Reason APIにアクセスするアプリに対しても情報提供のメールを送ります。2024年春から、これらは期待され、App Reviewの一部となります。新しいアプリや更新されたアプリをApp Storeに提出する前に、これらの問題を解決する必要があります。
2. **次にすべきこと**: アプリ開発者は、サードパーティのSDK開発者にSDKプライバシーマニフェストを要求します。あなたのアプリを提出するときは常にXcodeのプライバシーレポートを参照し、あなたの栄養ラベルを最新の状態に保ちます。SDK開発者は、署名とマニフェストを採用します。これらはあなたの顧客にとって非常に役立ちます。すべての開発者は、あなたのアプリあなたのアプリまたはSDKのプライバシーマニフェストで、追跡ドメインとRequired Reason APIの使用を文書化し、宣言します。新しいプライバシーマニフェストを使用すると、ユーザーに対して正確で、完全で、明確なプライバシー情報を提供することがこれまで以上に簡単になります。ご視聴いただきありがとうございました。