Apple 隱私權指令清單
Apple 針對以 App Store 上的 iOS 為目標的應用程式有隱私策略。 它要求應用程式在應用程式套件組合中包含隱私權指令清單、列出 .NET MAUI 應用程式或任何第三方 SDK 和套件收集的數據類型,以及使用任何必要原因 API 的原因。 如果您的使用必要原因 API 或第三方 SDK 未在隱私權指令清單中宣告,App Store 可能會拒絕您的應用程式。 如需隱私權指令清單的詳細資訊,請參閱 developer.apple.com 上的隱私權指令清單檔案 。
視您使用 .NET MAUI 開發應用程式或提供系結套件來搭配 .NET MAUI 應用程式使用而定,提供隱私權指令清單的需求可能會有所不同。
.NET MAUI 應用程式的隱私權指令清單
以執行 iOS 或 iPadOS 之裝置為目標的所有 .NET MAUI 應用程式都需要應用程式套件組合中的隱私權指令清單。 如需詳細資訊,請參閱 將必要專案新增至隱私權指令清單。
您也需要檢閱您自己的程式碼、任何原生程式代碼,以及數據收集和追蹤做法,並據以更新隱私權指令清單:
- 如果您的應用程式或 SDK 會收集有關使用應用程式之人員的數據,您必須描述隱私權指令清單中的數據使用方式。 如需詳細資訊,請參閱 描述 developer.apple.com 隱私權指令清單 中的數據使用。
- 如果您的應用程式或 SDK 包含呼叫 Apple 必要原因 API 的 .NET API,則您必須評估使用這些 API 的使用方式,並宣告使用這些 API 的原因。 如需必要原因 API 的詳細資訊,請參閱 描述在 developer.apple.com 上使用必要原因 API 。
注意
如果您的應用程式包含任何第三方 SDK 或套件,則這些第三方元件必須個別包含自己的隱私權指令清單。
隱私權指令清單會自動新增至使用 .NET CLI 或 Visual Studio 建立的新 .NET MAUI 應用程式專案。 如需將隱私權指令清單新增至現有 .NET MAUI 應用程式的詳細資訊,請參閱 將隱私權指令清單新增至現有的應用程式。
重要
為了方便起見,提供了上述指導方針。 請務必先檢閱Apple關於 隱私權指令清單檔案 的檔,再為您的專案建立隱私權指令清單。
系結項目的隱私權指令清單
系結專案分為兩個類別:靜態架構系結和動態架構系結。 隱私權指令清單應該包含在架構套件組合中,以包含在架構中。 正確放置時,系結專案會自動將其新增至應用程式套件組合,讓應用程式開發人員不需要提供架構 API 使用的原因。 如需詳細資訊,請參閱 將內容放在套件組合中。
針對動態架構,架構會新增至應用程式套件組合。 隱私策略指令清單會新增至 App Store 預期所在的位置,且應用程式開發人員不會執行任何動作。
目前,系結靜態架構時,應用程式開發人員必須手動將靜態架構隨附的隱私權指令清單合併到應用程式隱私權指令清單中。 這是因為靜態庫如何連結至主要應用程式二進位檔,而不需要架構。
將隱私權指令清單新增至現有的應用程式
若要將隱私權指令清單新增至現有的 .NET MAUI 應用程式專案,請將名為 PrivacyInfo.xcprivacy 的新 XML 檔案新增至 應用程式專案的 Platform/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,而不論連結器模式為何。 下表顯示三個 API 類別及其必須在 .NET MAUI 應用程式中隱私權指令清單中的關聯原因:
API 類別 | 原因 | 連結 |
---|---|---|
NSPrivacyAccessedAPICategoryFileTimestamp |
C617.1 |
檔案時間戳 API |
NSPrivacyAccessedAPICategorySystemBootTime |
35F9.1 |
系統開機時間 API |
NSPrivacyAccessedAPICategoryDiskSpace |
E174.1 |
磁碟空間 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>
然後,將NSPrivacyAccessedAPICategoryFileTimestamp
具有原因的類別、NSPrivacyAccessedAPICategorySystemBootTime
具有原因C617.1
的類別和NSPrivacyAccessedAPICategoryDiskSpace
具有原因35F9.1
E174.1
的類別新增至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 的使用方式。 如需 API 在 .NET 運行時間、.NET 基類庫 (BCL)、適用於 iOS 的 .NET 和可能導致您需要其他原因碼的 .NET MAUI 的詳細資訊,請參閱<另請參閱>一節中的連結。
如果您的 .NET MAUI 應用程式使用 喜好 設定 API,或直接使用 NSUserDefaults API,則必須在隱私權指令清單中包含使用的原因。 使用字串NSPrivacyAccessedAPICategoryUserDefaults
作為字典NSPrivacyAccessedAPITypes
中索引鍵的值NSPrivacyAccessedAPIType
。 例如,如果您的應用程式或 SDK 直接或間接使用 NSUserDefaults API,透過 .NET MAUI 的喜好設定 API,您的 PrivacyInfo.xcprivacy 檔案應包含dict
金鑰數位中的其他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>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>
您必須從 developer.apple.com 上的用戶預設 API 提供一或多個原因碼。 新增下列一或多個原因代碼,以指出正確的使用方式:
CA92.1
- 只存取您應用程式中的用戶預設值。1C8F.1
- 從屬於相同應用程式群組成員的應用程式、應用程式延伸模組和應用程式剪輯存取用戶預設值。C56D.1
- 從 SDK 存取使用者預設值。AC6B.1
- 存取用戶預設會讀取 com.apple.configuration.managed 或 com.apple.feedback.managed 密鑰。
重要
如果您修改應用程式中的程序代碼,可能需要更新應用程式的 PrivacyInfo.xcprivacy 檔案。 這包括將 NuGet 套件或系結專案新增至您的應用程式,以呼叫任何 Apple 的必要原因 API。
另請參閱
使用下列連結來深入瞭解 API 在 .NET MAUI、適用於 iOS 的 .NET 和 .NET 運行時間和 BCL 中使用的必要原因: