ハイライト
Apple は Privacy Manifests(プライバシーマニフェスト)を導入し、サードパーティ SDK 開発者がデータ収集を標準化された方法で宣言できるようにしました。Xcode 15 はプライバシーレポートを自動生成し、App Store のプライバシー栄養ラベルを正確に記入するのに役立ちます。iOS 17 はユーザーが追跡を許可していない場合、追跡ドメインへの接続を自動でブロックします。
主要内容
サードパーティ SDK のプライバシー情報の課題
App にサードパーティ SDK はいくつありますか。Analytics、広告、ソーシャル共有……各 SDK がデータを収集していますが、何を収集しているか本当に把握していますか。
(01:44)開発者からは、サードパーティ SDK から完全なプライバシー情報を得るのが非常に難しいという声が上がっています。各 SDK がどのデータタイプを収集するか、ユーザーに紐づくか、追跡に使うか——情報はあちこちに散らばっているか、そもそも見つかりません。
Apple の解決策が Privacy Manifests です。
プライバシーマニフェストとは
(01:58)Privacy Manifests は PrivacyInfo.xcprivacy という名前の plist ファイルで、サードパーティ SDK 開発者が SDK に含めます。このファイルで宣言する内容は次のとおりです。
- SDK が収集するデータタイプ
- 各データの用途
- データがユーザーに紐づくか
- データが追跡に使われるか
データタイプと用途の定義は App Store のプライバシー栄養ラベルと完全に一致するため、2 つの体系を覚える必要はありません。
Xcode 15 プライバシーレポート
(03:20)App Store 提出用にビルドすると、Xcode 15 がプロジェクト内のすべてのプライバシーマニフェストを集約し、プライバシーレポートを生成します。操作手順: Xcode Organizer → Archive を右クリック → “Generate Privacy Report”。
この PDF レポートはプライバシー栄養ラベルと同様の構成で、App Store Connect のプライバシー情報記入にそのまま参考にできます。
追跡ドメインの自動ブロック
(04:23)よくあるシナリオ: ユーザーが追跡を許可していないのに、サードパーティ SDK がデフォルトで追跡ドメインに接続する。開発者は SDK の無効化関数を手動で呼んだり設定を変更したりする必要があり、見落としやすい。
Privacy Manifests で宣言された追跡ドメインは、ユーザーが未許可の場合 iOS 17 がネットワーク接続を自動ブロックします。コードは不要で、システムがこうした境界ケースを処理します。
ドメインが追跡と非追跡の両方に使われる場合は、tracking.example.com と non-tracking.example.com のように別ホスト名に分割し、前者だけをマニフェストに宣言することを推奨します。
Required Reason API
(07:22)一部のプラットフォーム API はデバイスフィンガープリンティングに悪用される可能性があります。Apple はこれらを “Required Reason API” に分類し、プライバシーマニフェストで使用の承認理由を宣言する必要があります。
例えば NSFileSystemFreeSize(空きディスク容量)の承認理由の1つは「ファイル書き込み前に十分なディスク容量があるか確認する」です。完全なリストと承認理由は Apple 開発者ドキュメントで維持されています。
プライバシー影響型 SDK と署名要件
(10:15)Apple はユーザープライバシーへの影響が特に大きいサードパーティ SDK を「プライバシー影響型 SDK」として特定しました。2023 年秋から、App Store は新規提出と更新でこれら SDK の署名版とプライバシーマニフェストの含有を確認します。2024 年春からは App Review の正式要件になります。
詳細
プライバシーマニフェストファイルの作成
SDK 開発者は Xcode で PrivacyInfo.xcprivacy ファイルを作成します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array>
<string>tracking.example.com</string>
</array>
<key>NSPrivacyCollectedDataTypes</key>
<array>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypeName</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<true/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
<string>NSPrivacyCollectedDataTypePurposeProductPersonalization</string>
</array>
</dict>
</array>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
</array>
</dict>
</plist>
キーポイント:
NSPrivacyTracking: SDK がユーザー追跡に使われるかNSPrivacyTrackingDomains: 追跡ドメイン一覧。未許可時 iOS 17 が自動ブロックNSPrivacyCollectedDataTypes: 収集データタイプ、ユーザー紐づけ、用途NSPrivacyAccessedAPITypes: 使用する Required Reason API と承認理由コード
プライバシーレポートの生成
(03:40)Xcode 15 でプライバシーレポートを生成する手順:
- App をビルドして Archive
- Xcode Organizer を開く(Window → Organizer)
- Archives タブを選択
- 対象 Archive を右クリック
- “Generate Privacy Report” を選択
- 生成された PDF を保存
レポートは App とすべての依存関係のプライバシー宣言を集約し、データタイプと用途で整理。App Store Connect のプライバシー栄養ラベル入力画面と対応します。
Points of Interest Instrument で追跡ドメインを検出
(06:45)Xcode 15 の Points of Interest Instrument に追跡ドメイン検出が追加されました。テスト中に App/ウェブサイト横断のユーザー活動追跡に使われる可能性のあるドメイン接続をマークし、プライバシーマニフェストに宣言すべき追跡ドメインの特定に役立ちます。
Required Reason API 宣言の例
ファイルタイムスタンプ API の例。PrivacyInfo.xcprivacy で宣言:
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
</array>
キーポイント:
NSPrivacyAccessedAPICategoryFileTimestamp: ファイルタイムスタンプ API カテゴリC617.1: 承認理由コード。「App コンテナ、App グループコンテナ、または App の共有コンテナ内のファイルタイムスタンプにアクセス」- 完全な API カテゴリと理由コード一覧は Apple 開発者ドキュメント を参照
重要ポイント
1. 既存 App のプライバシーマニフェストを補完
- 何を作るか: App が使うすべてのサードパーティ SDK にプライバシーマニフェストがあるか確認
- 価値がある理由: 2024 年春以降、プライバシー影響型 SDK にマニフェストがないと App Review で拒否される
- 始め方: Xcode Organizer でプライバシーレポートを生成し、各依存関係と照合
2. 追跡と非追跡ドメインを分割
- 何を作るか: バックエンドドメインが追跡と非追跡の両方に使われる場合、独立したサブドメインに分割
- 価値がある理由: iOS 17 が未許可の追跡ドメイン接続を自動ブロック。分割すれば非追跡機能に影響しない
- 始め方:
PrivacyInfo.xcprivacyのNSPrivacyTrackingDomainsに追跡サブドメインのみ宣言
3. Required Reason API の使用を監査
- 何を作るか: ファイルタイムスタンプ、ディスク容量、システム起動時刻などの機密 API 使用をスキャン
- 価値がある理由: これらの API はプライバシーマニフェストで承認理由を宣言する必要があり、さもなければ Apple から警告メールが届く
- 始め方: Apple ドキュメント の API リストと照合
4. 自社 SDK にプライバシーマニフェストを追加
- 何を作るか: 社内またはオープンソース SDK を保守している場合、
PrivacyInfo.xcprivacyを作成 - 価値がある理由: SDK 利用者がプライバシー情報を正確に記入でき、信頼性が向上
- 始め方: Xcode で Property List を新規作成し
PrivacyInfo.xcprivacyと命名。ドキュメントに従ってデータ収集宣言を記入
5. SDK デジタル署名を有効化
- 何を作るか: サードパーティ SDK の署名検証を有効化し、信頼できるソースからのものか確認
- 価値がある理由: プライバシー影響型 SDK は署名とプライバシーマニフェストの両方が必須。署名で SDK の改ざんを防止
- 始め方: SDK 開発者は
codesignで framework に署名。App 開発者は Xcode 15 で自動検証
関連セッション
- Verify app dependencies with digital signatures — デジタル署名でサードパーティ SDK を検証する方法
- What’s new in privacy — iOS 17 と macOS Sonoma の最新プライバシー機能
- What’s new in App Store Connect — App Store Connect のプライバシー情報の最新更新
コメント
GitHub Issues · utterances