兩條路徑邊界 · SSH/VNC 決策表 · 失敗碼速查 · 20 分鐘驗收
沒有自有 Mac、卻在租用雲端節點做 iOS 上架的獨立開發者,常在「最後一公里」栽跟頭:CI 或同事那邊已經打出 .ipa,你 SSH 進 Mac 卻發現沒有可點的上傳介面;或者 Archive 成功,Organizer 一直轉圈,不知道是否該換 Transporter。本文先釐清兩條官方上傳路徑各自解決什麼問題,再給出僅 SSH / SSH+VNC 分段 / 全程 VNC對照決策表、Organizer 與 Transporter 的最小可複現步驟、四條可寫進工單的結論,以及20 分鐘 VNC 驗收表;並與站內《首次 TestFlight 外測檢查表》、《Xcode Cloud Plan B》、《緊急修復與上架》、《Fastlane Match 與 SSH/VNC》互鏈。
Apple 在 2026 年仍支援透過 Xcode Organizer 與獨立應用 Transporter(Mac App Store 分發)把構建送到 App Store Connect。二者不是「新舊替代」,而是輸入物與操作習慣不同:
Organizer 路徑:適合你在同一台雲端 Mac上完成 Archive,並在圖形介面裡走 Distribute App → App Store Connect。優勢是與簽名、描述檔、匯出選項同屏核對;劣勢是對 Xcode 版本、登入態、鑰匙串彈窗更敏感。
Transporter 路徑:適合已有合規簽名的 .ipa(或 CI 產物同步到節點),用拖拽或命令列交付。優勢是介面單一、對「只上傳」任務更輕;劣勢是不能替你修復簽名或重新 Export,且登入 Apple ID / App 專用密碼時常要圖形會話。
隱性成本:租用節點按小時計費時,在 SSH 裡反覆嘗試需要 GUI 的步驟,會產生零產出占機;應把「需要點按」的步驟在 Runbook 裡標為 needs-vnc。
與 ASC 的關係:無論哪條路徑,上傳成功只表示交付開始;TestFlight 可用、處理完成、元資料審核等狀態要在 App Store Connect 網頁對照,詳見外測檢查表中的構建號核對項。
SDK 窗口:2026 年起 Apple 對「用什麼 Xcode / SDK 構建」有明確時間線要求;若處理狀態長期停在「無效的二進位」,先查RC 對齊清單與工具鏈凍結,再怪網路。
若你來自 Windows 主力機,可把雲端 Mac 理解為帶 Apple 官方上傳客戶端的「上架工作站」:編譯可以在別處,但交付到 ASC 的客戶端幾乎總在 macOS。這也是租遠程 Mac 相比「只在 Linux CI 上猜上傳 API」的核心價值之一。
下表按任務 → 推薦接入 → 典型失敗信號 → 常見誤判排列,可直接貼進團隊 wiki。若你們同時用 Xcode Cloud,可把「Cloud 失敗轉人工上傳」與Plan B 決策表合併使用。
| 任務 | 推薦接入 | 典型失敗信號 | 常見誤判 |
|---|---|---|---|
| 雲端 Archive + Organizer 上傳 | VNC(同用戶) | 上傳卡住、無錯誤碼 | 只加大 SSH 逾時 |
| 已有 .ipa,僅交付 | VNC + Transporter | 登入失敗、401 | 以為 ipa 壞了 |
| 首次登入 Apple ID / 2FA | VNC | SSH 裡 session 無效 | 反覆刪 DerivedData |
| 查看 Organizer 處理日誌 | VNC | CLI 無等價輸出 | 只刷 ASC 網頁 |
| 用 API Key + altool 上傳 | SSH(金鑰已配置) | JWT 過期、權限不足 | 去改描述檔 |
| Transporter 圖形登入態修復 | VNC | Transporter 空白或閃退 | 重裝 Xcode 全家桶 |
| 核對 Export 選項與符號表 | VNC + Organizer | ASC 缺 dSYM | 只重傳 ipa 不勾選符號 |
經驗法則:第一次失敗若涉及帳號、鑰匙串或 Transporter 視窗,不要在同一 SSH 會話裡第三次重試——切 VNC 通常比多付一小時租費便宜。
在 VNC 會話中,用與 SSH 相同的 macOS 用戶打開 Xcode,確認選單列帳號已登入。推薦順序:
Window → Organizer,選中對應 Archive(注意 Scheme 與 Configuration 與發布一致)。
Distribute App → App Store Connect → 按精靈選擇上傳(非 Ad Hoc)。
勾選上傳符號(若團隊依賴崩潰符號化);與隱私清單、出口合規相關的選項按隱私清單文預先填好 ASC 元資料。
等待 Organizer 顯示交付完成;立刻在 ASC 打開 TestFlight,記錄處理開始時間與構建號。
若失敗,展開日誌:認證類(帳號/金鑰)、簽名類(profile/certificate)、合規類(SDK/隱私)分開建檔,避免混為一談。
| 現象 / 提示 | 優先懷疑 | 建議動作 |
|---|---|---|
| 卡在「正在上傳」無進度 | 企業網出口 / 代理 | 換熱點試一次;必要時對照站內企業網排查長文 |
| Invalid Signature / Profile | 簽名鏈 | 先Match 驗收與鑰匙串 |
| ITMS-9xxxx 合規 | SDK / 隱私清單 | 查 ASC 郵件與處理詳情 |
| 需要登入 / 會話過期 | Apple ID | VNC 重新登入 Xcode Accounts |
# 上傳前在同一用戶下核對工具鏈(SSH 或 VNC 終端均可) xcodebuild -version /usr/bin/security find-identity -v -p codesigning | head -n 15
從 Mac App Store 安裝 Transporter(若映像未預裝)。在 VNC 下完成首次 Apple ID 登入後,日常可嘗試 SSH 觸發 CLI,但登入態維護仍建議圖形確認。
確認 .ipa 的 Bundle ID、版本號、構建號與 ASC 中待測條目一致(避免傳錯包)。
打開 Transporter → 登入 → 將 .ipa 拖入交付區 → 開始交付。
觀察交付進度;失敗時匯出活動日誌附到工單(比截圖更可檢索)。
到 ASC 核對處理狀態;若提示「缺少合規」,回到網頁端出口合規與隱私問卷,而非盲目重傳。
與 Organizer 路徑一樣:處理完成後走外測邀請或生產發布流程。
若 ipa 來自 Windows 側打包腳本,上傳前請在雲端用 unzip -l 或 Transporter 預檢確認簽名存在;未簽名 ipa 在 Transporter 會快速失敗,此時應回雲端重新 Archive,而不是反覆拖拽。
提示:緊急上架場景可先讀《手術室》確定最小環境,再按本節只上傳;避免在租期第一小時同時裝 beta Xcode 與傳生產包。
| 核對項 | 操作要點 | 通過標準 |
|---|---|---|
| 用戶一致 | VNC 用戶 = SSH whoami | 無「桌面 A、終端 B」 |
| Xcode / Transporter 登入 | Accounts 無黃標 | 可選中正確 Team |
| 構建座標 | 版本號 + 構建號 + Bundle ID | 與 ASC 條目一致 |
| 交付完成 | Organizer 或 Transporter 成功 | 有完成時間戳 |
| ASC 處理 | TestFlight 構建列表 | 由「處理中」→「可測試」或明確失敗原因 |
| 符號與合規 | 符號上傳 / 隱私清單 | 無 ITMS 合規郵件 pending |
新節點請先完成首次使用清單再執行上表,可顯著降低「能連桌面卻不會上傳」的挫敗感。
上傳後的邀請與檢查表。
閱讀 →佇列失敗時轉遠程手動上傳。
閱讀 →簽名鏈穩定後再談上傳。
閱讀 →不必為編譯再開 Xcode;上傳仍須在 macOS 完成。已簽名 .ipa 優先 Transporter;僅 .xcarchive 需 Organizer 匯出。
API Key + 命令列可行,但登入態與 2FA問題仍常要 VNC。團隊應統一「預設 Transporter / 預設 API」之一,避免每人一套。
上傳≠處理完成。核對 Bundle ID 與構建號;處理失敗常見為 SDK、隱私清單或出口合規,按 ASC 詳情逐項修。
已有有效 .ipa → Transporter 通常最短;要在雲端 Archive → Organizer 更順,但需預留帳號與鑰匙串時間。
上傳構建不是 Xcode 裡的「順便點一下」,而是帳號、簽名、合規與網路出口四條鏈路的交會點。只在 SSH 裡重試命令、卻在關鍵時刻沒人打開 Transporter 或 Organizer,租用節點的隱性成本會體現在超長占機與重複交付上;自建 Mac 則要額外承擔固定硬體、睡眠策略與上傳頻寬的不確定性。
把 VNC 當作上傳鏈路的標準介面而非救火通道,才能在無自有 Mac 時穩定對齊 Apple 官方客戶端與 App Store Connect 的處理節奏。
若你需要按任務租用帶完整桌面會話的物理 Mac,在本文第五節同款表格下完成交付驗收,可透過 VNCMac 開通遠程節點:主按鈕進入購買頁;連接方式可先查閱站點幫助頁中的 SSH 與 VNC 說明。