畫面上已顯示 Archive Succeeded,但 App Store Connect 仍未出現可送審構建。

最快的判斷方式是:不要把 Archive 成功當作發布完成。Xcode 27 iOS App 發布前驗收至少要通過身份資訊、構建產物、簽名能力、上傳狀態與 App Store Connect 關聯五類檢查;遠端 Mac 可以承載重複建構與上傳,但最後仍須用實際 TestFlight 或送審構建完成閉環。

這篇文章適合第一次提交 iOS App 的獨立開發者,用一份清單完成從 Archive 到 App Store Connect 的首次驗收。
正在維護遠端 Mac 打包機、或使用腳本與 CI 自動上傳的小型團隊,也可以用它檢查常駐環境是否具備可重複發布能力。

最後更新於 2026 年 9 月 22 日。版本與分發規則核對自 Apple Developer 的 Xcode 發布記錄、Xcode 分發文件,以及 App Store Connect 的構建管理說明;Xcode 27 正式版與 Xcode 27.2 Beta 分開處理,Beta 行為不直接推論為正式版規則。

先用發布結果界定「驗收通過」

發布鏈路不是單一成功或失敗訊息,而是多個彼此獨立的交付狀態。Apple 的 Xcode 分發文件將 Archive、匯出、上傳與測試或發布分成不同步驟;因此,CI 日誌中的成功訊息不能取代平台上的最終確認。

狀態 應查的證據 通過標準 未通過時的動作
Archive 成功 Xcode Organizer 中的 Archive 產物屬於預期 Target,且可開啟詳細資訊 回到構建設定及 Target 身份資料檢查
IPA 匯出成功 匯出資料夾、ExportOptions 設定 產生符合分發用途的 IPA,而不是模擬器或 Debug 產物 重新確認分發方式、簽名身份與 Profile
上傳完成 上傳工具訊息與上傳紀錄 平台已收到該 Bundle ID、版本號及 Build 號 保存錯誤日誌,先不要重複盲目上傳
Processing 完成 App Store Connect 構建清單 構建狀態完成,沒有仍在處理的阻斷訊息 查看平台錯誤與警告,按新 Build 號重新處理
TestFlight 可用 測試分發頁面及實際安裝 構建在正確 App 版本下,可分配給測試者 檢查合規問答、測試群組與構建關聯
可送審 版本提交頁面 該構建可被選取,且必要資料沒有阻斷 補齊平台欄位,再重新進行提交前複核

Apple 也提醒,構建上傳後需要在 App Store Connect 完成處理,發布者才能在相應流程中使用它;App Store Connect 上傳構建說明應作為狀態判斷的依據。

先核對專案身份與版本歸屬

版本身份錯誤通常不會在「按下 Archive」時立即暴露,卻會在上傳後造成構建找不到、歸入錯誤版本,或無法選作送審構建。驗收時應從最終 Archive 或匯出產物反向確認,而不是只截取 Xcode 專案設定頁。

  • [ ] Bundle ID 與 App Store Connect 中的 App 記錄一致。
  • [ ] 本次 Archive 使用正確的 Target,而不是測試 Target、白標 Target 或模擬器專用 Target。
  • [ ] Team、平台目標及簽名團隊屬於正確的開發者帳戶。
  • [ ] Version Number 對應準備提交的 App 版本。
  • [ ] Build Number 或 Build String 與本次產物唯一對應。
  • [ ] 最終 Archive 詳細資料中的身份值,與預期提交資料一致。
  • [ ] 若是首次建立 App 記錄,已先確認 Bundle ID 與平台資料符合新增 App 記錄的官方流程

版本號與 Build 號不是同一個欄位。版本號通常決定構建要歸入哪個 App 版本;Build 號則用來區分同一版本下的不同構建。新增版本、向現有版本追加構建,以及重新處理上傳失敗的產物,不能混用同一套處置方式。若一個構建已經上傳並被平台接受,重新提交相同內容時應先確認平台是否要求新的 Build 號,而不是只改本機檔名。

Apple 的構建與元資料說明可用來核對平台實際收到的身份資訊。這一步的證據入口應優先使用平台資料與 Archive 詳細資訊,不能以本機工作區的檔案名稱代替。

再驗證 Archive、IPA 與簽名鏈

「能夠建構」不等於「能夠分發」。模擬器構建、Debug 構建、Release Archive 與可分發 IPA 的用途不同,任何一種都不能自動替代另一種。

  • [ ] Archive 來自預期的 Release 分發設定,而非 Debug 或模擬器工作流程。
  • [ ] IPA 是從本次 Archive 匯出,不是從另一個舊 Archive 或本地暫存檔複製。
  • [ ] IPA 內的 Bundle ID、版本號與 Build 號,和 Archive 詳細資料相符。
  • [ ] 簽名身份屬於本次分發用途,沒有誤用開發簽名。
  • [ ] Provisioning Profile 與 Target、Team 及分發目的匹配。
  • [ ] Entitlements 沒有因匯出設定而遺失或加入不應存在的權限。
  • [ ] dSYM 與本次 Archive 產物一起保存,並可在日後對應崩潰符號化。
  • [ ] 匯出設定檔、Archive 路徑、IPA 雜湊或檔案識別資料已寫入交付紀錄。

Apple 的分發準備文件適合用來核對提交前的分發條件。對獨立開發者而言,最容易忽略的是「簽名成功」只證明當下環境能完成某項操作,不代表這份 IPA 一定使用了正確的 Profile,也不代表它已經與 App Store Connect 的目標版本關聯。

遠端 Mac 環境還要增加三項檢查:Keychain 是否能在非互動式流程中取得必要憑據、腳本是否因權限或解鎖狀態不同而產生另一份產物,以及斷線後能否找回原有 Archive、匯出檔與日誌。若腳本依賴人工點擊、暫存目錄或當次登入工作階段,便不應宣稱具備可重複發布能力。

按照平台狀態完成交付回查

上傳工具回報成功,只能證明檔案已交給平台處理,不能證明 Processing 已完成。若使用遠端 Mac iOS 打包流程,執行者應把上傳時間、版本號、Build 號、錯誤日誌與平台回查結果一併留存,讓另一位成員能夠重現判斷。

需要特別區分以下情況:

  • 上傳成功但尚未 Processing:等待平台處理完成,不能立刻判定可測試或可送審。
  • Processing Failed:先讀取平台提供的錯誤內容,再決定修正設定或建立新的 Build 號。
  • Processing Complete 但構建找不到:檢查 Bundle ID、平台版本與帳戶團隊是否一致。
  • 構建存在但無法選取:檢查該構建是否仍有合規、版本欄位或其他提交阻斷。
  • 重複上傳舊 Build 號:不要把檔名改掉當成新構建;應依平台對該 Build 號的狀態決定是否重新建構。

App Store Connect 的構建狀態與元資料頁面是平台端證據入口。若本機 Transporter 或命令列退出碼與平台顯示互相矛盾,應以平台狀態及其錯誤訊息作為下一步判斷依據。

將 TestFlight 與送審關聯列為最後門檻

TestFlight 的構建顯示 Complete,並不代表可以直接送審。發布者仍需確認構建位於正確的平台版本下,並且在提交頁面中實際可被選取。Apple 的選擇送審構建說明可用於核對這個關聯步驟。

  • [ ] 在正確的 App 版本頁面找到本次 Build 號。
  • [ ] 構建已完成平台處理,沒有停留中的錯誤或警告阻斷。
  • [ ] Missing Compliance 或出口合規問題已按實際使用情況回答。
  • [ ] 測試分發設定沒有把構建限制在錯誤的測試群組。
  • [ ] 版本提交頁面可以選取該構建。
  • [ ] 至少完成一次實際 TestFlight 安裝或最終提交前安裝驗證。
  • [ ] 測試結果使用本次 IPA,而不是本機 Debug 版本。
  • [ ] 提交前重新核對版本號、Build 號、發行說明與必要平台資料。

這個最後門檻特別重要,因為「後台看得到構建」和「審核流程能使用構建」是兩個不同判斷。若構建已完成處理卻不能選取,應先留存畫面與狀態資料,再檢查版本歸屬、合規欄位及帳戶權限,不要立即重建一份內容相同的 IPA。

FAQ:把五個常見判斷放到實際流程中

Xcode 27 Archive 成功後還要檢查什麼?
Archive 只代表封存產物建立成功。還要核對 Bundle ID、版本號、Build 號、簽名身份、Entitlements、Provisioning Profile 與 dSYM,確認能匯出分發 IPA,並完成上傳、Processing、TestFlight 或送審關聯。

iOS App 的版本號和 Build 號怎麼驗收?
版本號應對應 App Store Connect 中準備提交的版本,Build 號則要與本次 Archive、IPA 及平台構建清單一致。新增版本、同版本追加構建與失敗後重新上傳,處理方式不同;最終值不能只依賴 Xcode 專案設定頁。

App Store Connect 上傳後如何確認構建關聯正確?
在構建清單中同時核對 Bundle ID、版本號與 Build 號,再確認 Processing 已完成;接著進入對應版本的提交頁面,確認該構建可被選取。上傳工具顯示成功而平台仍在處理時,不能視為關聯已完成。

遠端 Mac 打包發布前需要檢查哪些項目?
除了 Xcode 與專案身份,還要檢查 Keychain 解鎖、簽名憑據注入、非互動式腳本權限、Archive 與 IPA 保存、日誌留存,以及斷線後的任務恢復。遠端 Mac 只負責執行建構與上傳,不代替平台完成最終確認。

TestFlight 構建 Complete 後可以直接送審嗎?
不能直接推定。Complete 只說明平台處理已完成,仍要確認構建位於正確 App 版本下、可以在提交頁面選取,並處理出口合規、Missing Compliance、測試分發與其他阻斷;完成一次實際安裝或提交前複核後才算通過。

用兩張表完成發布前的責任交接

如果由一人完成全部工作,仍建議把「檢查對象、證據入口、停止條件」寫入發布紀錄。這能避免遠端 Mac 上傳成功後,另一位成員誤以為平台已完成處理。

驗收指標 主要負責人 必須保存的證據 立即停止條件
身份與版本 開發者或發布負責人 Archive 詳細資料、平台構建資料 Bundle ID、版本號或 Build 號不一致
產物與簽名 建構環境維護者 Archive、IPA、匯出設定、dSYM IPA 不是本次 Archive 匯出,或簽名用途不符
上傳交付 CI 或遠端 Mac 維護者 上傳日誌、時間、平台回查畫面 只有本機成功,平台沒有對應構建
Processing 狀態 App 管理者 平台狀態、錯誤與警告 狀態失敗、長時間未完成或版本歸屬不明
TestFlight 與送審 提交負責人 實際安裝結果、提交頁面 構建不能選取或存在合規阻斷

下表則用來選擇執行環境,而不是比較某個環境的理論效能。官方發布規則仍然以 Xcode 與 App Store Connect 文件為準;遠端環境的價值在於是否能穩定保存產物、憑據流程與交付紀錄。

發布方式 適合情況 發布前必查 不適合直接承擔的工作
本機 Mac 偶發提交、需要人工操作或實體裝置 本機 Xcode、Keychain、Archive 保存 長時間無人值守的重複上傳
遠端 Mac 需要常駐建構、腳本上傳或多人共用流程 遠端連線、憑據注入、日誌、斷線恢復 代替 App Store Connect 做最終送審判斷
CI 串接遠端 Mac 需要固定觸發條件與可追蹤產物 Runner 權限、環境版本、失敗重試、產物保存 未經人工核對就把退出碼視為發布完成
純本機模擬器流程 只驗證介面或基本執行 測試用途與構建類型 代替 Release Archive、IPA 或 TestFlight 驗收

Xcode 27 正式版本與 Xcode 27.2 Beta 必須分開管理。若團隊正在評估 Beta,應把它標記為獨立驗證環境,保留正式版可重現的發布路徑;Apple 的 Xcode 發布記錄是核對版本狀態與更新內容的入口,不應以社群個案代替正式規則。

讓遠端 Mac 成為可回溯的發布環境

完成這份清單後,判斷重點就不再是「有沒有一台 Mac」,而是每次發布是否都能拿出同一組證據:正確身份、同一次構建的 Archive 與 IPA、可驗證的簽名、平台處理狀態,以及能夠實際選取的 TestFlight 或送審構建。

若只是偶爾提交,購買或長期維護一台常駐打包機未必划算;本機操作通常更直接,也不必額外處理遠端連線、Keychain 與任務恢復。相反地,若團隊需要反覆 Archive、夜間上傳、失敗後重跑,臨時共用本機容易遇到環境漂移、磁碟空間不足、憑據不在場與任務中斷後難以追溯等問題,此時可評估 RUVCLOUD 的遠端 Mac 方案作為執行環境。

RUVCLOUD 不能取代 App Store Connect 的最終確認,也不會讓錯誤的 Bundle ID 或簽名設定自動變正確;它較適合被放在可重複建構、匯出與上傳的那一段。若發布頻率不高,可先按需使用;若需要長期維持遠端 Mac 打包流程,再依照方案與計費資訊評估是否值得固定一個可回溯的發布環境。