Xcode 27 PrivacyInfo.xcprivacy 未進 Archive?2026 排查

Xcode 27 PrivacyInfo.xcprivacy 未進 Archive?2026 排查

症狀:Xcode 專案裡看得到 PrivacyInfo.xcprivacy,但 Archive 找不到,或提交驗證仍有錯誤。
最快解法:先檢查最終 .xcarchive 內的 App 與依賴 bundle,再追查 target 資源設定、Swift Package 資源宣告和第三方 SDK 產物;檔案存在不代表內容有效。

適合本地建置正常、但歸檔包缺少自有 iOS 隱私清單的應用程式開發者。
也適合需要驗證 Swift Package、二進位 SDK 是否入包的行動 CI 工程師。
若你負責遠端 Mac 構建節點,本文會提供可留下稽核證據的檢查方式。

最後更新:2026 年 10 月 5 日。規則依 Apple 隱私清單文件、TN3181 無效清單排查說明、第三方 SDK 要求頁及 Xcode 官方頁面複核。Xcode 27 是工具鏈背景,不代表 Apple 已改變隱私清單規則。

Xcode 27 PrivacyInfo.xcprivacy Archive:先分清是缺檔還是驗證錯誤

不要以 Xcode 專案導覽器中的檔案作為歸檔成功證據。你要確認清單是否出現在最終 .xcarchive 裡正確的 App、Framework 或 SDK bundle,再分別判斷檔案缺失、資源未打包、bundle 位置不符,或清單內容無效。

Apple 說明隱私清單用來描述 App 或第三方 SDK 的隱私實務,且清單必須使用有效的鍵和值;它並未要求所有 App 使用完全相同的內容。實際要申報哪些資料使用與 API 理由,應依程式行為和 Apple 的資料使用說明核對。

你看到的現象 優先檢查的位置 最有用的證據 先不要做的事
專案內有檔案,Archive 裡找不到 App target 的資源設定與歸檔組態 .xcarchive 內實際搜尋結果 只看檔案是否出現在導覽器
套件目錄有清單,App 內沒有 Swift Package 的資源宣告與套件產物 套件資源 bundle、最終 App bundle 假設放在 Sources 就會自動打包
SDK 有附清單,歸檔後不見 SDK 二進位內容及其 bundle 結構 SDK 原始產物與 Archive 對照 把 SDK 行為全部寫進 App 主清單
Archive 找得到清單,但提交驗證失敗 plist 格式、鍵值及 API 理由 plutil 結果與 Apple 驗證診斷 直接修改已簽署的 Archive

為什麼 PrivacyInfo.xcprivacy 沒有進入 iOS Archive?常見原因是檔案沒有納入目前歸檔的 target、資源複製設定沒有涵蓋使用中的組態,或你檢查的是另一個 Scheme 產物。這幾種狀況都應以 Archive 內容為準,而不是由原始碼路徑推定。

先用搜尋確認歸檔內的檔案位置:

ARCHIVE="<Archive 路徑>"
find "$ARCHIVE" -name "PrivacyInfo.xcprivacy" -print

接著記錄輸出路徑,辨認它位於 App、Framework,還是某個依賴的 bundle。若完全沒有輸出,先回到資源是否參與目前 Archive 的檢查;若有輸出,則繼續驗證位置與內容。這個結果只是「找到檔案」的證據,不是清單已通過驗證的證明。

App target 與 Swift Package:來源檔不等於歸檔資源

App 自有清單漏包時,先在 Xcode 檢查檔案是否屬於預期 target,再核對建置階段的資源處理及正在使用的 Scheme、組態。修正後,以同一個 Scheme、相同提交重新 Archive,否則你可能同時改了輸入條件,無法判斷修正是否有效。

Swift Package 則要查看 Package.swift 的資源宣告與產生的資源 bundle。Apple 的 Swift Package 資源指南說明,套件資源須依套件資源規則處理;因此,檔案僅存在於套件原始碼目錄,不能證明它已進入套件產物或最終 App。

Swift Package 的隱私清單如何確認已打進最終 App?先檢查套件是否把清單列入資源,再檢查建置後的套件資源 bundle,最後搜尋 Archive 內的 App 與相關 bundle。若套件產物已有清單、最終 App 卻找不到,回頭比對套件整合方式與 Archive 中保留的 bundle 結構,不要把問題直接歸咎於 App target。

下列命令可用來檢查清單的 plist 語法:

plutil -lint "<PrivacyInfo.xcprivacy 路徑>"

語法檢查通過只表示檔案能被解析,不代表每個鍵值都受支援、資料使用聲明正確,或 required-reason API 的理由符合實際用法。Apple 的 required-reason API 聲明文件應與程式碼實際使用情況一併核對。

第三方 SDK 與 bundle 位置:逐一對照產物結構

第三方 SDK 需要單獨驗收。先確認供應方是否提供自己的 PrivacyInfo.xcprivacy,再檢查它是否存在於二進位 SDK 的預期 bundle,並在最終 Archive 中確認原有 bundle 結構有被保留。應用整合方負責確認依賴實際入包;SDK 的程式行為及清單內容,則需與 SDK 供應方釐清。

不要以 App 主清單取代 SDK 自己的清單。Apple 對特定第三方 SDK 設有要求,但適用範圍須以官方 SDK 名單與說明為準,不能推論所有套件都適用相同要求。

產品類型不同,清單放置位置也不能用單一路徑套用。Apple 的依平台與 bundle 類型放置內容說明應作為核對依據;請按實際 Archive 的 bundle 結構判斷清單是放錯位置、沒有複製,還是歸檔了不同產品目標。

檢查對象 位置判斷方式 常見錯判 下一步
iOS App 依 App bundle 類型核對 Apple 文件與 Archive 結構 在來源目錄找到檔案就當作已入包 核對 target、資源處理及最終 App
Framework 依 Framework bundle 類型檢查其自身內容 只檢查外層 App 根目錄 比對 Framework 原始產物和歸檔內容
Swift Package 檢查套件資源宣告及套件產生的 bundle 將套件原始檔等同於套件資源 逐層檢查套件產物與最終 App
二進位 SDK 檢查 SDK 提供的 bundle 與 Archive 中保留的結構 把 SDK 清單責任移到 App 主清單 與供應方確認清單及 SDK 版本

遠端 Mac CI 的產物比對

如何確認遠端 Mac CI 產生的 Archive 含有 SDK 隱私清單?使用同一提交,在本機和遠端 Mac 分別記錄 Xcode 版本、Scheme、建置組態、依賴解析結果及 Archive 搜尋結果。若來源提交相同而產物不同,再逐項比對解析後的依賴版本與資源設定;若依賴版本不同,先固定解析結果再重建,避免把工作區差異誤判為 Xcode 行為。

把每次驗收結果留在 CI 記錄中,至少包括提交識別、使用的 Xcode、依賴解析資訊、Archive 路徑搜尋輸出、plist 語法檢查結果,以及提交驗證診斷。路徑和專案名稱可使用佔位符;不要把帳戶、簽署憑據或專案機密寫入可公開的建置日誌。

注意:不要在已簽署的 Archive 內直接補檔或改清單。這會改動簽署後的產物;應回到原始建置來源修正,再重新歸檔與驗證。

清單已存在但驗證失敗:把檔案問題和內容問題拆開

隱私清單檔案存在,但提交驗證仍報錯,接下來查什麼?先確認錯誤指向的是檔案路徑、plist 格式、未接受的鍵值,還是 required-reason API 聲明。再依 Apple 的 TN3181 排查流程對照診斷資訊與 Archive 內實際清單,不要只因為 plutil -lint 通過就結案。

以下判分只用來安排排查優先次序,不是 Apple 的官方驗證分數。每一項符合記 1 分:最終 Archive 已找到清單;清單位於對應產品 bundle;plist 語法通過;鍵值與 API 理由已依官方文件核對。達到 4 分才進入提交驗證;少任何一項,就先補足對應證據。

依證據選擇修正路徑

  • 若 Archive 完全找不到自有清單,先修正 App target 或資源處理設定,再用同一 Scheme 重建。
  • 若 Swift Package 原始碼有清單、套件產物沒有,修正套件資源宣告並檢查套件產物。
  • 若 SDK 原始 bundle 有清單、Archive 沒有,核對整合流程是否保留該 bundle;仍無法確認時向 SDK 供應方查證。
  • 若檔案存在但所在 bundle 不符合產品類型,依 Apple 文件調整來源與打包方式,不要把其他產品的路徑照搬過來。
  • 若語法檢查失敗,先修正 plist 格式;若語法通過但 Apple 仍指出內容問題,按診斷核對鍵值、資料使用聲明與 required-reason API 理由。
  • 若本機與遠端 Mac 結果不同,先固定提交、Xcode、Scheme 和依賴解析結果,再比較兩邊的 Archive 證據。

遠端 Mac 能提供可重現的 macOS 歸檔環境,但不能替你判斷清單是否準確,也不能取代最終產物驗收。當本地機器與 CI 的環境差異難以控制,除了檢視建置節點的方案,也可先參考 Mac mini 伺服器方案的成本項目及裸機 macOS 方案說明,再按使用期間與維運責任選擇。

如果目前方案依賴工程師手動維持本機環境、CI 與開發機的依賴版本容易漂移,或故障時缺少可重跑的 macOS 節點,使用 MacDate 租用遠端 Mac 可讓你另設專用歸檔環境,再以提交、依賴與產物證據完成驗收。若你只偶爾建置,先比較租用與現有方案;若需要長期固定負載或實體介面,則應一併評估自購 Mac。需要臨時或階段性建置節點時,可查看 MacDate 遠端 Mac 節點選項。