Skip to content

iOS 應用程式的隱私清單

如果您的應用程式預計發佈至 Apple App Store,且使用了 必須提供原因的 API (required reasons APIs), App Store Connect 可能會發出警告,提示應用程式未包含正確的隱私清單:

必須提供原因警告

這可能會影響任何 Apple 生態系統的應用程式,無論是原生還是多平台。您的應用程式可能透過第三方程式庫或 SDK 使用了必須提供原因的 API,而這可能並不明顯。Kotlin Multiplatform 可能是其中一個使用了您未察覺之 API 的架構。

在此頁面中,您將找到有關該問題的詳細說明以及處理建議。

此頁面反映了 Kotlin 團隊目前對該問題的瞭解。 隨著我們獲得更多關於公認做法和規避措施的數據與知識,我們將更新此頁面以反映這些資訊。

問題是什麼

Apple 對於提交至 App Store 的要求 在 2024 年春季已發生變化App Store Connect 不再接受未在隱私清單中說明使用必須提供原因的 API 之原因的應用程式。

這是一項自動檢查,而非人工審核:您的應用程式程式碼會被分析,然後您會收到一封包含問題列表的電子郵件。郵件中會提到 「ITMS-91053: Missing API declaration」 問題,並列出應用程式中所有屬於 必須提供原因 類別的 API 類別。

理想情況下,您的應用程式所使用的所有 SDK 都會提供各自的隱私清單,這樣您就無需擔心。 但如果您的某些相依性沒有這樣做,您提交至 App Store 的內容可能會被標記。

如何解決

在您嘗試提交應用程式並從 App Store 收到詳細的問題列表後,您可以參考 Apple 文件來建立您的清單:

產生的檔案是一個字典集合。針對每個存取的 API 類型,從提供的列表中選擇一個或多個使用原因。Xcode 透過提供視覺化佈局和包含每個欄位有效值的下拉式功能表,協助編輯 .xcprivacy 檔案。

您可以使用 特殊工具 來尋找 Kotlin 架構相依性中必須提供原因的 API 之用法,並使用 獨立的外掛程式.xcprivacy 檔案與您的 Kotlin 產物打包在一起。

如果新的隱私清單無法滿足 App Store 的要求,或者您無法確定如何完成這些步驟,請與我們聯絡並在 此 YouTrack 問題 中分享您的案例。

尋找必須提供原因的 API 之用法

您的應用程式中的 Kotlin 程式碼或其中一個相依性可能會存取來自 platform.posix 等程式庫中必須提供原因的 API,例如 fstat

kotlin
import platform.posix.fstat

fun useRequiredReasonAPI() {
    fstat(...)
}

在某些情況下,可能很難確定哪些相依性使用了必須提供原因的 API。 為了幫助您找到它們,我們建立了一個簡單的工具。

若要使用它,請在專案中宣告 Kotlin 架構的目錄下執行以下指令:

shell
/usr/bin/python3 -c "$(curl -fsSL https://github.com/JetBrains/kotlin/raw/rrf_v0.0.1/libraries/tools/required-reason-finder/required_reason_finder.py)"

您也可以單獨 下載此指令碼,檢查它,並使用 python3 執行。

將 .xcprivacy 檔案放置在您的 Kotlin 產物中

如果您需要將 PrivacyInfo.xcprivacy 檔案與您的 Kotlin 產物打包,請使用 apple-privacy-manifests 外掛程式:

kotlin
plugins {
    kotlin("multiplatform")
    kotlin("apple-privacy-manifests") version "1.0.0"
}

kotlin {
    privacyManifest {
        embed(
            privacyManifest = layout.projectDirectory.file("PrivacyInfo.xcprivacy").asFile,
        )
    }
}

該外掛程式會將隱私清單檔案複製到 相對應的輸出位置

已知用法

Compose Multiplatform

使用 Compose Multiplatform 可能會導致您的二進位檔案中使用 fstatstatmach_absolute_time。 儘管這些函式不用於追蹤或指紋採集,也不會從裝置發送,但 Apple 仍可能將其標記為缺少必須原因的 API。

如果您必須為 statfstat 用法指定原因,請使用 0A2A.1。對於 mach_absolute_time,請使用 35F9.1

有關 Compose Multiplatform 中使用的必須提供原因的 API 之進一步更新,請關注 此問題

1.9.10 或更早版本中的 Kotlin/Native 執行期

mach_absolute_time API 用於 Kotlin/Native 執行期中的 mimalloc 分配器。這是 Kotlin 1.9.10 及更早版本中的預設分配器。

我們建議升級到 Kotlin 1.9.20 或更高版本。如果無法升級,請更改記憶體分配。 為此,請在您的 Gradle 建置指令碼中為目前的 Kotlin 分配器設定 -Xallocator=custom 編譯選項,或為系統分配器設定 -Xallocator=std

如需更多資訊,請參閱 Kotlin/Native 記憶體管理