WWDC Quick Look 💓 By SwiftGGTeam
Get started with privacy manifests

Get started with privacy manifests

元の動画を見る

ハイライト

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.comnon-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 でプライバシーレポートを生成する手順:

  1. App をビルドして Archive
  2. Xcode Organizer を開く(Window → Organizer)
  3. Archives タブを選択
  4. 対象 Archive を右クリック
  5. “Generate Privacy Report” を選択
  6. 生成された 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.xcprivacyNSPrivacyTrackingDomains に追跡サブドメインのみ宣言

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 で自動検証

関連セッション

コメント

GitHub Issues · utterances