Apple プライバシー マニフェスト
Apple は、App Store 上の iOS を対象とするアプリのプライバシー ポリシーを定めています。 アプリには、アプリ バンドルにプライバシー マニフェストを含める必要があります。これには、.NET MAUI アプリまたはサード パーティの SDK およびパッケージが収集するデータの種類と、理由が求められる API を使う理由が一覧に含まれています。 理由が求められる API またはサード パーティ SDK の使用がプライバシー マニフェストで宣言されていない場合、アプリは App Store によって拒否されることがあります。 プライバシー マニフェストの詳細については、developer.apple.com の「Privacy manifest files (プライバシー マニフェスト ファイル)」を参照してください。
.NET MAUI を使ってアプリを開発するか、.NET MAUI アプリで使うバインディング パッケージを提供するかによって、プライバシー マニフェストを提供するための要件が異なる場合があります。
.NET MAUI アプリのプライバシー マニフェスト
iOS または iPadOS を実行しているデバイスを対象とするすべての .NET MAUI アプリには、アプリ バンドル内にプライバシー マニフェストが必要です。 詳細については、「プライバシー マニフェストに必要なエントリを追加する」を参照してください。
また、独自のコード、ネイティブ コード、データ収集と追跡のプラクティスを確認し、以下に応じてプライバシー マニフェストを更新する必要があります。
- アプリまたは SDK が、アプリを使っているユーザーに関するデータを収集する場合は、プライバシー マニフェストでデータの使用を説明する必要があります。 詳細については、developer.apple.com の「Describing data use in privacy manifests (プライバシー マニフェストでのデータ使用の説明)」を参照してください。
- Apple の理由が求められる API を呼び出す .NET API がアプリまたは SDK に含まれている場合は、これらの各 API の使用状況を評価し、それらを使う理由を宣言する必要があります。 理由が求められる API の詳細については、developer.apple.com の「Describing use of required reason API (理由が求められる API の使用の説明)」を参照してください。
Note
アプリにサード パーティの SDK またはパッケージが含まれている場合、これらのサードパーティのコンポーネントには独自のプライバシー マニフェストを個別に含める必要があります。
プライバシー マニフェストは、.NET CLI または Visual Studio を使用して作成された新しい .NET MAUI アプリ プロジェクトに自動的に追加されます。 既存の .NET MAUI アプリにプライバシー マニフェストを追加する方法については、「既存のアプリにプライバシー マニフェストを追加する」をご覧ください。
重要
上記のガイドラインは利便性のために提供されています。 プロジェクトのプライバシー マニフェストを作成する前に、プライバシー マニフェスト ファイルに関する Apple のドキュメントを確認することが重要です。
バインド プロジェクトのプライバシー マニフェスト
バインド プロジェクトは、2 つのカテゴリ (静的フレームワーク バインディングと動的フレームワーク バインディング) に分類されます。 プライバシー マニフェストは、フレームワーク バンドルに格納してフレームワークに含める必要があります。 バインド プロジェクトは、正しく配置すると、アプリ バンドルに自動的に追加されるため、アプリ開発者はフレームワーク API の使用理由を指定する必要がありません。 詳細については、バンドルへのコンテンツの格納に関する記事を参照してください。
動的フレームワークの場合、フレームワークはアプリ バンドルに追加されます。 プライバシー ポリシー マニフェストは、App Store で想定されている場所に追加され、アプリ開発者は何も行う必要がありません。
現在、静的フレームワークをバインドする場合、アプリ開発者は、静的フレームワークに含まれるプライバシー マニフェストをアプリのプライバシー マニフェストに手動でマージする必要があります。 これは、静的ライブラリがメイン アプリ バイナリにリンクされ、フレームワークが不要になるためです。
既存のアプリにプライバシー マニフェストを追加する
既存の .NET MAUI アプリ プロジェクトにプライバシー マニフェストを追加するには、PrivacyInfo.xcprivacy という名前の新しい XML ファイルをアプリ プロジェクトの Platforms/iOS フォルダーに追加します。 PrivacyInfo.xcprivacy ファイルに .xml 拡張子がないことを確認します。 それから、次の XML をファイルに追加します。
<?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/>
</plist>
次に、.NET MAUI アプリ プロジェクト ファイル (*.csproj) を編集し、ルート <Project>
要素の下部に次の iOS 用ビルド項目を追加します。
<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">
<BundleResource Include="Platforms\iOS\PrivacyInfo.xcprivacy" LogicalName="PrivacyInfo.xcprivacy" />
</ItemGroup>
これにより、確実にプライバシー マニフェストがバンドルのルートにある iOS アプリにパッケージ化されます。
必要なエントリをプライバシー マニフェストに追加する
iOS または iPadOS を実行しているデバイスを対象とするすべての .NET MAUI アプリには、アプリ バンドル内にプライバシー マニフェストが必要です。 これは、.NET ランタイムと基本クラス ライブラリ (BCL) が、リンカー モードに関係なく削除されない、理由が求められる API を使っていることが原因です。 次の表に、.NET MAUI アプリのプライバシー マニフェストに含める必要がある 3 つの API カテゴリとそれに関連付けられた理由を示します。
API カテゴリ | 理由 | リンク |
---|---|---|
NSPrivacyAccessedAPICategoryFileTimestamp |
C617.1 |
File timestamp APIs (ファイル タイムスタンプ API) |
NSPrivacyAccessedAPICategorySystemBootTime |
35F9.1 |
System boot time APIs (システム起動時間 API) |
NSPrivacyAccessedAPICategoryDiskSpace |
E174.1 |
Disk space APIs (ディスク領域 API) |
既存の .NET MAUI アプリにプライバシー マニフェストを手動で追加した場合は、これらのエントリをプライバシー マニフェストに追加する必要があります。 それには、テキスト エディターで PrivacyInfo.xcprivacy ファイルを開き、NSPrivacyAccessAPITypes
キーを追加します。続いて、ここに、各 API カテゴリの使用理由 (必須) を追加します。
<?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>NSPrivacyAccessedAPITypes</key>
<array>
</array>
</dict>
</plist>
次に、理由 C617.1
の NSPrivacyAccessedAPICategoryFileTimestamp
カテゴリ、理由 35F9.1
の NSPrivacyAccessedAPICategorySystemBootTime
カテゴリ、理由 E174.1
の NSPrivacyAccessedAPICategoryDiskSpace
カテゴリをプライバシー マニフェストの NSPrivacyAccessedAPITypes
配列に追加します。
<?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>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>E174.1</string>
</array>
</dict>
</array>
</dict>
</plist>
これらのエントリは、アプリにとって最低限必要なものです。 指定された理由コードによってカバーされない方法で、理由が求められる API のいずれかを使用する場合は、API の使用をサポートするために、新たな理由コードを追加する必要があります。 追加の理由コードが必要になる可能性がある .NET ランタイム、.NET 基本クラス ライブラリ (BCL)、.NET for iOS、および .NET MAUI での API の使用の詳細については、「関連項目」セクションのリンクを参照してください。
.NET MAUI アプリが Preferences API を使用する、または NSUserDefaults API を直接使用する場合は、プライバシー マニフェストに使用理由を含める必要があります。 NSPrivacyAccessedAPITypes
ディクショナリの NSPrivacyAccessedAPIType
キーの値として、文字列 NSPrivacyAccessedAPICategoryUserDefaults
を使います。 たとえば、アプリまたは SDK が .NET MAUI の Preferences API を経由して直接または間接的に NSUserDefaults API を使用する場合、以下のように PrivacyInfo.xcprivacy ファイルの NSPrivacyAccessedAPITypes
キーの配列の中に追加の dict
要素を含める必要があります。
<?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>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>E174.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>
developer.apple.com 上のユーザー既定値 API の理由コードを 1 つ以上指定する必要があります。 正当な使用方法であることを示すために、以下の理由コードを 1 つ以上追加します。
CA92.1
- 自分のアプリの中だけでユーザー既定値にアクセスします。1C8F.1
- 同じアプリ グループのメンバーであるアプリ、アプリ拡張機能、アプリ クリップからユーザー既定値にアクセスします。C56D.1
- SDK からユーザー既定値にアクセスします。AC6B.1
- com.apple.configuration.managed または com.apple.feedback.managed キーを読み取るためにユーザー既定値にアクセスします。
重要
アプリ内のコードを変更した場合、アプリの PrivacyInfo.xcprivacy ファイルの更新が必要になる場合があります。 これには、Apple の理由が求められる API を呼び出す NuGet パッケージまたはバインド プロジェクトをアプリに追加することが含まれます。
関連項目
.NET MAUI、.NET for iOS、および .NET ランタイムと BCL における理由が求められる API の使用方法の詳細を確認するには、以下のリンクを使用してください。
.NET MAUI