首頁 / 部落格 / App Store Connect Missing Compliance:2026 加密出口怎麼填?
ENGINEERING_BLOG · 2026.09.08

App Store Connect Missing Compliance:2026 加密出口怎麼填?

Apple 將「Missing Compliance」列為構建缺少出口合規資訊的狀態,並提供問卷與材料關聯流程。Apple 的構建狀態說明可核對這項定義。

症狀 → 最快解法: 構建已上傳但 TestFlight 顯示 Missing Compliance → 先盤點完整 App 的加密來源,再走「通常無需材料、需要進一步判斷、需要提交材料」三路判斷;確認屬於豁免範圍後,才在最終構建的 Info.plist 配置 ITSAppUsesNonExemptEncryption

誰該看這篇:
如果你上傳 TestFlight 構建後無法繼續分發,或使用 HTTPS、Keychain、登入 SDK、支付 SDK、端對端加密功能卻不知道如何申報,這篇適合你。
如果你透過遠端 Mac 或持續整合反覆上傳,也可以把文中的盤點與驗收步驟納入發布流程;它不是把問卷當成簽名錯誤或單純上傳失敗來處理。

SECTION 01先確認 Missing Compliance 的真正範圍

Missing Compliance 針對的是這個已上傳構建的出口合規資訊不完整,不是 Invalid Binary、簽名失敗,也不等於 Apple 仍在後台處理構建。先到 App Store Connect 的構建詳情查看狀態,再進入 TestFlight 的出口合規處理區域;Apple 的測試版構建合規流程說明了問卷回答與已批准材料的關聯方式。

不要只搜尋業務程式碼裡有沒有 AESRSA。申報對象是上傳的完整 App,盤點範圍至少包括:

  • 你自行撰寫的加密、通訊協定與安全儲存程式碼;
  • Apple 作業系統提供的網路、Keychain 或其他安全 API;
  • 靜態連結與動態連結的二進位檔;
  • 登入、支付、分析、推播、通訊及端對端加密 SDK;
  • SDK 內實際打包、啟用或由條件編譯帶入的加密功能。

你可以先建立一份依版本保存的依賴清單,欄位包括 SDK 名稱、版本、二進位檔來源、是否包含自行實作的標準演算法、實際啟用功能與分發地區。再保存問卷答案截圖、供應商技術文件及最終 Archive 的檢查紀錄。這些資料不是用來取代 Apple 或主管機關的判定,而是避免下一次上傳時重新猜測。

如果你需要先確認遠端 Mac 的存取與發布環境是否適合這類驗收,可參考 MACNOX 的遠端 Mac 使用入口,再把帳號權限、構建產物與合規紀錄分開管理。

SECTION 02系統加密能力與一般工具 App

只有 HTTPS 和 Keychain,通常怎樣處理?

若 App 只透過 Apple 系統提供的網路安全能力連線,或使用 Keychain 等作業系統安全功能,而沒有額外嵌入系統外的加密演算法,通常可按 Apple 的出口合規問卷判斷為不需要上傳出口合規文件。這裡的關鍵是「只使用系統能力」,而不是看到 HTTPS 就直接選擇某個答案。

例如,一個一般工具 App 可能使用系統網路框架建立 HTTPS 連線,並用 Keychain 保存登入憑證。這種情況與把 OpenSSL、加密通訊函式庫或自研安全通訊協定打包進 App 不同;兩者不能因為都出現「登入」或「HTTPS」而歸為同一類。Apple 對加密出口規則的官方說明應作為問卷判斷的起點。

你的申報結論應同時有三項證據:

  1. 專案依賴清單沒有系統外的加密實作,或已確認相關功能未被打包;
  2. 最終二進位檔與第三方 SDK 文件沒有顯示額外的標準或非標準加密能力;
  3. 問卷答案、版本號與構建識別資料已留存,之後可以對應到同一個 Archive。

這並不代表可以把 ITSAppUsesNonExemptEncryption 隨意設成 NO。如果你只檢查 Swift 或 Objective-C 業務程式碼,卻漏看動態函式庫,下一個構建仍可能再次出現問詢。

SECTION 03第三方標準加密與安全 SDK

第三方登入或支付 SDK 使用加密時,要看哪些材料?

第三方 SDK 自行包含標準加密實作時,不能因為你的業務程式碼沒有直接呼叫演算法,就自動選擇豁免。你需要向 SDK 供應方確認二進位檔組成、實際啟用的功能、使用的演算法類型,以及 SDK 是否只是呼叫 Apple API,還是把自己的加密函式庫一併帶入。

支付 SDK 可能需要保護交易資料,登入 SDK 可能建立安全通道;但「有安全功能」本身不足以決定問卷答案。以下表格把應採取的路線分開:

加密來源情況 主要識別證據 問卷與材料方向 構建驗收方式
只使用 Apple 系統加密能力 原始碼、依賴清單與二進位檢查均未發現額外實作 依問卷確認豁免範圍,通常不需上傳出口合規文件 檢查最終 Info.plist,重新上傳後確認不再重複要求相同資訊
第三方 SDK 內含標準加密 供應商文件、二進位組成及實際啟用功能顯示系統外實作 不能只憑「未直接呼叫」判斷,依問卷結果準備相應資料 以同一版本的 Archive、上傳紀錄及 TestFlight 狀態交叉核對
自研協定或非標準演算法 自研安全通訊、特殊演算法或主要安全產品功能 先準備正式分類、聲明或其他主管機關要求的材料 等待材料審核或批准後,再將批准資訊關聯至構建
主要提供安全通訊或安全儲存 App 的核心功能本身就是加密服務 不應用修改 plist 的方式繞過問卷,需按實際功能判斷 將問卷、批准材料、構建版本與分發地區一起留檔

美國出口管制的分類與豁免不能由一般技術文章代替法律意見;涉及分類時,應核對美國 BIS 的加密常見問題資料。如果 App 在法國分發,也不要把美國問卷答案當成法國程序已完成。法國主管機關對密碼學工具的監管說明需要按你的功能、角色與分發方式另行復核。

注意: CCATS、法國加密聲明,以及 Apple 審核可能要求的程式碼或說明,解決的是不同層次的問題。它們不能互相替代;有疑義時,應諮詢具備出口管制經驗的專業人士,而不是用 Info.plist 改值掩蓋不確定性。

SECTION 04自研加密與非標準演算法

什麼情況下不應只修改 Info.plist

如果你自行設計了未被公認標準組織採納的演算法、自研安全通訊協定,或 App 的主要賣點就是安全通訊、安全儲存、檔案加密,應先準備正式分類或申報材料,再處理構建設定。修改 Info.plist 只能表達你對構建加密狀態的配置,不能把實際存在的加密功能變成不存在。

Apple 的出口合規總覽可用來確認 App Store Connect 的材料關聯與問卷入口;至於是否屬於某個國家或地區的豁免,仍要依實際功能、分發地區與適用規則判斷。

你可以將這類專案拆成四份文件:

  • 功能說明: 加密保護什麼資料、在哪個流程啟用、使用者能否自行控制;
  • 技術說明: 演算法、協定、函式庫來源及是否為自研;
  • 分發範圍: App Store、TestFlight、企業部署與各地區分發的差異;
  • 申報狀態: Apple 問卷結果、主管機關材料、批准代碼及適用版本。

這種分類方式也能避免把「申報完成」誤寫成「法律上所有地區都已獲准」。Apple 的問卷結果只處理其平台流程;BIS 或法國主管機關的要求,仍需依其規範個別確認。

SECTION 05Info.plist、TestFlight 與新構建驗收

ITSAppUsesNonExemptEncryption 要設定為 YES 還是 NO

這個鍵的選擇取決於 App 是否使用 Apple 定義範圍外的加密,而不是取決於你是否使用了 HTTPS。Apple 的ITSAppUsesNonExemptEncryption 鍵說明可用來核對鍵名與其用途。

最終構建中的設定 代表的申報意思 你應採取的動作
NO 你已確認 App 不使用需要額外申報的非豁免加密 保存盤點證據,重新 Archive 並上傳新構建
YES App 使用了需要進一步判斷或申報的加密能力 先完成問卷與材料判定,不要只依賴 plist 消除提示
未配置 App Store Connect 可能在構建或 TestFlight 流程中要求你補充合規資訊 回到最終產物檢查,確認實際上傳的 plist 是否含有正確值

如果你的專案已取得 Apple 可接受的出口合規批准代碼,ITSEncryptionExportComplianceCode 可用於把批准資訊帶入構建配置;它不是把未知加密功能標成豁免的捷徑。代碼、帳號識別資料與內部 SDK 名稱不應出現在公開截圖或遠端終端機紀錄中。

為什麼配置了 Info.plist,新構建仍然要求填寫?

最常見的原因不是 App Store Connect「沒有讀到」設定,而是你檢查的是專案原始設定,不是實際上傳的 Archive。Xcode 的 Build Settings、不同 Target、環境變數、加工腳本或重新簽名流程,都可能讓最終產物與原始設定不一致。

請按以下順序處理:

  1. 鎖定失敗構建: 記下版本號、構建號與 App Store Connect 顯示的狀態,不要只看本地 Xcode 訊息。
  2. 盤點完整依賴: 檢查 App 自有程式碼、系統 API、靜態庫、動態庫與第三方 SDK,確認是否有系統外加密。
  3. 檢查 Archive:.xcarchive 的最終 App 產物中查看實際 Info.plist,不要只看專案編輯器或某個 Target 的設定。
  4. 確認鍵值與 Target: 檢查 ITSAppUsesNonExemptEncryption 的布林值是否套用到上傳的 App Target;若有批准代碼,也核對其對應版本與材料。
  5. 重新 Archive: 修改後必須產生新的 Archive,不要重複上傳舊的 .ipa 或舊 Archive。
  6. 重新上傳:Apple 的構建上傳說明完成上傳,保存上傳工具輸出的脫敏紀錄。
  7. 核對 TestFlight: 進入新構建的合規區域,確認是問卷人工處理、配置後不再重複問詢,或仍須等待材料審核。

即使配置正確,新構建也不會替舊構建自動補上資料。你必須以新 Archive 對應新上傳紀錄,再判斷 TestFlight 是否可以繼續分發。若只是想確認狀態變化,也不要把「上傳成功」誤認為「合規已完成」;兩者在 App Store Connect 中是不同的驗收點。

Missing Compliance 後,TestFlight 還能否讓內部測試者安裝?

通常不能把缺少出口合規資訊的構建直接當成可正常分發的 TestFlight 版本。你應先在構建詳情中完成問卷、關聯已批准材料,或按照實際情況補上正確配置,再確認構建是否進入可測試狀態。內部測試權限、簽名成功與出口合規完成是三件不同的事,不能互相替代。

SECTION 06遠端發布環境的安全收尾

當你在遠端 Mac、CI 或持續在線的打包機上處理合規資訊,驗收不應只看瀏覽器裡的綠色狀態。至少要保存以下四類脫敏紀錄:

  • 依賴清單與 SDK 文件版本;
  • 最終 Archive 中的 Info.plist
  • 上傳工具與 App Store Connect 的構建狀態;
  • TestFlight 合規處理與重新構建後的結果。

三種結論要分開記錄:第一,問卷人工處理即可;第二,確認豁免後可透過構建配置減少重複問詢;第三,必須等待材料審核,不能先以修改 plist 的方式發布。這樣做也能把加密合規與簽名資產、API Key、Bundle ID 的權限檢查分開,降低發布腳本把敏感資料寫入日誌的風險。

如果你不想為了單次合規驗收而購買一台長期閒置的 Mac,可以先比較 MACNOX 的遠端 Mac 方案是否適合你的工作週期;但若你的團隊需要長期高負載、實體 USB 裝置或現場真機除錯,自購硬體可能更直接。遠端方案的優勢在於可按需取得 macOS 與 Xcode 環境,缺點則是依賴遠端連線、需要嚴格管理帳號與憑據,且不能替代所有實體硬體測試。

最後,App Store Connect Missing Compliance 的處理重點不是找到一個能消除提示的欄位,而是讓「實際加密來源、問卷答案、最終 Archive 與 TestFlight 狀態」彼此一致。完成一次脫敏的 Archive、上傳和分發驗收後,再把同樣的檢查納入你的遠端 Mac 發布流程;這比每次看到 Missing Compliance 才臨時猜答案更可靠。

SECTION 07延伸閱讀