【Xcode/iOS】Privacy Manifestsに対応する方法!PrivacyInfo.xcprivacyとは
この記事からわかること
- Xcode/iOSアプリでPrivacy Manifestsに対応する方法
- PrivacyInfo.xcprivacyファイルとは?
- NSPrivacyCollectedDataTypesやNSPrivacyAccessedAPITypesに設定する値とは?
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Xcode:15.0.1
- iOS:17.0
- Swift:5.9
- macOS:Sonoma 14.1
参考資料
公式リファレンス:App Storeへの提出におけるプライバシー要件のアップデート
公式リファレンス:App Storeのプライバシーに関する最新情報
公式リファレンス:Get started with privacy manifests
2024年春以降、Privacy Manifests未対応のiOSアプリはリジェクトされてしまう
Privacy Manifestsとは?
「Privacy Manifests」はAppleがWWDC23で発表したプライバシーの取り扱いに関する決め事です。ここでいうプライバシーは「アプリやサードパーティSDK(ライブラリ)が収集するデータ」のことを指しています。要するに公開するアプリが収集するデータを適切にユーザーに知らせるための仕組みが変更になったということです。
これまではApp Store Connectでアプリを審査に出す段階でプライバシーに関する設定をしてきましたが、これからはそれだけでなくアプリ内とサードパーティSDK(ライブラリ)内に専用のファイル(PrivacyInfo.xcprivacy)を作成しておく必要があるようです。
対応すること
Privacy Manifestsに対応するためにやるべきことは大きく分けて以下の2つです。
- アプリにPrivacyInfo.xcprivacyを設置
- サードパーティSDK(ライブラリ)にPrivacyInfo.xcprivacyを設置
2つと言いましたがアプリ開発者がやるのは自身のアプリに「PrivacyInfo.xcprivacy」を設置するだけです。サードパーティSDK(ライブラリ)の対応はサードパーティSKD開発側の対応を待つしかないので使用するサードパーティSDKに「PrivacyInfo.xcprivacy」ファイルが設置されているかどうかを確認すればひとまずOKだと思います。
アプリにPrivacyInfo.xcprivacyを設置
リリースしている自分のアプリに「PrivacyInfo.xcprivacy」を設置し、中に必要なプライバシー情報を記述する必要があります。記述する内容はアプリの種類や使用しているSKDによって異なるので1つ1つ設定をしなければなりません。
「PrivacyInfo.xcprivacy」に設定しなければいけないのは以下の4つです。設定方法は後述しています。
- NSPrivacyTracking:トラッキングしているか
- NSPrivacyTrackingDomains:トラッキングドメイン
- NSPrivacyCollectedDataTypes:アプリorサードパーティSDKが収集するデータ型を説明する辞書配列
- NSPrivacyAccessedAPITypes:アプリorサードパーティSDKがアクセスするAPIタイプを説明する辞書配列
公式リファレンス:Privacy manifest files
1.PrivacyInfo.xcprivacyファイルの追加と準備
まずはアプリに「PrivacyInfo.xcprivacy」をファイルを追加します。プロジェクトを開き「New File..」から「App Privacy」を探しクリックします。
ファイル名は「PrivacyInfo.xcprivacy」のままにしておきデフォルトではターゲットが外れているのでチェックを入れて作成します。
「PrivacyInfo.xcprivacy」はplist(プロパティリスト)なのでキーと値の形式で設定値を記述していきます。
追加された「PrivacyInfo.xcprivacy」は空(ルートにApp Privacy Configurationのみ)の状態なのでここに必要なプライバシーを追加していきます。追加するプライバシーはApp Store Connectでアプリを審査に出す段階で設定するプライバシーと同じものです。
まずは大枠となるNSPrivacyCollectedDataTypes(Privacy Nutrition Label Types)
とNSPrivacyAccessedAPITypes(Privacy Accessed API Types)
を追加しておきます。上記の状態の中身が以下になります。
<?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>NSPrivacyCollectedDataTypes</key>
<array>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string></string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string></string>
</array>
</dict>
</array>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict/>
</array>
</dict>
</plist>
2.NSPrivacyCollectedDataTypesの記述
NSPrivacyCollectedDataTypes(Privacy Nutrition Label Types)
に記述するのはApp Store Connectでアプリを審査に出す段階で設定するプライバシーと同じものです。NSPrivacyCollectedDataTypes(Privacy Nutrition Label Types)
の中にNSPrivacyCollectedDataType(item)
を追加して同じものを全て記述していきます。
各設定項目はApp Store Connectでのプライバシー設定と同じになっているのでそれぞれ該当する値を転記していけばOKです。
- Collected Data Type:データタイプ(連絡先や位置情報、デバイスID、使用状況データなど)
- Linked to User:ユーザの個人情報に関連付けられるか
- User for Tracking:トラッキング目的かどうか
- Collection Purposes:使用されている目的(サードパーティ広告やアナリティクスなど)
3.NSPrivacyAccessedAPITypesの記述
NSPrivacyAccessedAPITypes
に記述するのはアプリorサードパーティSDKがアクセスするAPIタイプです。配列の中に以下の2つのキー値を持った辞書形式で値を設定していきます。
- Privacy Accessed API Type:APIタイプ
- Privacy Accessed API Reasons:APIを使用する理由
Privacy Accessed API Type
APIタイプは以下の6種類に分かれています。詳細は「Describing use of required reason API」を参照してください。
Key名 | アクセス対象 |
---|---|
NSPrivacyAccessedAPICategoryFileTimestamp | ファイルのタイムスタンプ |
NSPrivacyAccessedAPICategorySystemBootTime | システム起動時間 |
NSPrivacyAccessedAPICategoryDiskSpace | 使用可能なディスク容量 |
NSPrivacyAccessedAPICategoryActiveKeyboards | アクティブなキーボードのリスト |
NSPrivacyAccessedAPICategoryUserDefaults | UserDefaults |
Privacy Accessed API Reasons
APIを使用する理由もApple側で定義済みの文字列を使用して指定します。こちらも詳細は「Describing use of required reason API」を参照してください。
例えばUserDefaultsの場合は以下の文字列から適切なものを指定します。
Key名 | アクセス対象 |
---|---|
CA92.1 | アプリのみが読み書きする |
1C8F.1 | アプリと同じグループが読み書きする |
C56D.1 | サードパーティSDKがラッパー関数などで読み書きする |
AC6B.1 | MDMによって設定されたマネージドアプリ |
確認方法
「PrivacyInfo.xcprivacy」ファイルの作成が終わったら定義に問題ないかをアップロードする前に確認することができます。プロジェクトをアーカイブした後に右クリック>「Generate Privacy Report」をクリックします。
するとPDFファイルが出力されるので中身を見てみると「PrivacyInfo.xcprivacy」で定義した内容が見やすく表示されるのでApp Store Connect側で設定したプライバシー設定と相違がないか確認してみてください。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。