ITMS-91064 修正:隱私清單追蹤設定錯誤
作者:Mehdi Azizi
發布於 ,5 分鐘
ITMS-91064 代表隱私清單的兩個追蹤鍵互相矛盾。在 Expo 設定讓它們一致,再重新建置即可。
ITMS-91064 是 Apple 的自動拒絕,會在你上傳 build 之後以 e-mail 寄來。它的意思是:你的隱私清單(privacy manifest)裡兩個跟追蹤有關的鍵互相矛盾。修正方法:讓 NSPrivacyTracking 和 NSPrivacyTrackingDomains 的內容一致,然後重新建置。
我在 TradaZen(我的交易練習 app)加了一個廣告成效評估工具之後,就踩到了這個錯誤。以下是原因和修正方式。
ITMS-91064 錯誤是什麼意思?
這封信的標題是「ITMS-91064: Invalid tracking information」。它針對的是 PrivacyInfo.xcprivacy 檔案,也就是每個 app 和每個 SDK 都可以內含的隱私清單。這個檔案裡有兩個跟追蹤相關的鍵(這裡的「追蹤」是 App Tracking Transparency 定義的追蹤):
NSPrivacyTracking:如果 app 或 SDK 會把資料用於追蹤,就設為 true。NSPrivacyTrackingDomains:為了追蹤而連線的網域清單。
Apple 在關於無效隱私清單的技術說明中,列出了三種會被拒絕的組合:
NSPrivacyTracking為 true,但網域清單是空的。要把清單填上。我就是這種情況。NSPrivacyTracking為 true,但有某個網域寫錯。網域不能包含路徑,結尾也不能有斜線。- 列出了網域,但
NSPrivacyTracking卻是 false。要把清單拿掉。
根本規則寫在隱私清單的文件裡:只要 NSPrivacyTracking 為 true,就必須提供網域清單。
Apple 的 e-mail 會告訴你出問題的檔案名稱和路徑。 仔細看這個路徑:它會告訴你問題出在你 app 的隱私清單,還是某個內含 SDK 的隱私清單。
跟其他 ITMS 錯誤一樣,這不是審查人員的拒絕。檢查是自動的,在 build 上傳時進行,build 會直接被剔除。
為什麼會發生:每個 target 各有一份隱私清單
陷阱就在這裡。SDK 常常自帶一份隱私清單,裡面有它的網域。你可能以為這樣就夠了。但你的 app 也有自己的一份,而在我的案例中,Apple 拒絕的正是 app 的那一份。
我的狀況,2026 年 7 月 21 日。在 TradaZen 接上廣告成效評估工具時,我在 app 的設定裡宣告了 NSPrivacyTracking: true,這是正確的。但我沒有加上 NSPrivacyTrackingDomains。SDK 的隱私清單是完整的。而 app 的那份,由 Expo 根據我的設定產生,寫著「true」卻配上空清單。build 在處理階段就被拒絕了。
學到的教訓:SDK 的隱私清單不能代替你 app 的隱私清單。只要你在設定裡宣告了追蹤,就也要宣告網域。
在 Expo app 中修正 ITMS-91064
在 Expo 裡,app 的隱私清單是在設定檔的 ios.privacyManifests 底下設定。原理寫在 Expo 的隱私文件,這個鍵則寫在設定參考文件。
- 找出 SDK 的追蹤網域。 照抄你 build 實際內含的那個版本的隱私清單,而不是網路上最新版本的:兩者可能不同。不要自己亂編。
- 把它們加進你的設定。 下面兩個網域只是範例,請換掉:
{
"expo": {
"ios": {
"privacyManifests": {
"NSPrivacyTracking": true,
"NSPrivacyTrackingDomains": [
"example-tracking-domain.com",
"another-tracking-domain.com"
]
}
}
}
}
- 在花錢跑 build 之前,先檢查產生出來的檔案(前提是你的
ios資料夾是由 Expo 產生、而且被 git 忽略)。執行npx expo prebuild -p ios,然後打開ios資料夾裡產生的PrivacyInfo.xcprivacy檔案。裡面應該要有設為true的NSPrivacyTracking,以及完整的網域清單。 - 重新建置並再次上傳。 隱私清單是二進位檔的一部分:遠端更新改不到它。
第 3 步要注意:這個指令可能會刪除再重建 ios 資料夾。如果你曾經手動修改過裡面的東西,就不要在你的專案上執行。請在副本上操作。
如果你的 app 完全沒有追蹤,做法更簡單:把 NSPrivacyTracking 改成 false,並移除網域清單。
這些網域對你的使用者有什麼影響
宣告這些網域不只是走個形式。根據 Apple 的文件,如果使用者沒有在 App Tracking Transparency 的視窗中同意追蹤,連到這些網域的請求就會失敗。這是預期中的行為:只有對方同意,追蹤才會送出。
你的 App Store 頁面也必須講同一件事。如果你的隱私清單宣告了追蹤,App Store 頁面上的隱私權宣告和你的隱私權政策也都要寫明。不然之後你可能會因為 guideline 5.1.1 或 5.1.2 被審查人員拒絕:細節請看 app 的隱私權政策。
上傳 build,不再有意外
ITMS 錯誤只要看得懂,很快就能修好。之後才出現的拒絕就需要多想一點:處理方式寫在 app 被 Apple 拒絕這一頁,最常見的原因則整理在 Apple 為什麼拒絕你的 app。
想在送審前檢查你的專案,Apple Review Kit 收錄了我的檢查清單,以及會幫你檢視專案的 Claude Code skills。如果你卡在上傳,想找個人幫你看看,跟我預約一小時:我們會透過視訊,在你的螢幕上一起檢視你的專案。如果你正在準備第一次上架,做一下免費診斷:它會幫你把步驟排好順序,並寄給你我的 Apple 防拒絕檢查清單。
常見問題
ITMS-91064 算是 App Review 的拒絕嗎?
不算是人工審查人員的拒絕。這是 build 上傳時、進入審查之前的自動檢查。build 會被剔除:你必須修正隱私清單,再上傳一個新的 build。
NSPrivacyTrackingDomains 裡要填什麼?
填你的 app 或 SDK 為了追蹤而連線的網域。照抄你 build 內含的那個版本的 SDK 隱私清單中列出的網域。NSPrivacyTracking 為 true 卻配上空清單,正是 Apple 會拒絕的組合之一。
我的 SDK 隱私清單還不夠嗎?
不夠。在 TradaZen 上,SDK 的隱私清單是完整的,build 還是被拒絕了:因為 app 的隱私清單宣告了追蹤,卻沒有任何網域。如果你 app 的設定宣告了追蹤,就也必須列出網域。
我的 app 沒有追蹤,該怎麼做?
在設定中把 NSPrivacyTracking 改成 false,並移除網域清單。接著確認你的 App Store 頁面和隱私權政策也寫的是同一件事。
可以不重新建置就修正 ITMS-91064 嗎?
不行。隱私清單是送交 Apple 的二進位檔的一部分。你必須修正設定、重新建置,然後再次上傳。