fastlane match 遠端 Mac 簽名失敗時,先確認建置帳號的密鑰鏈中有可用私鑰,再核對 iOS Provisioning Profile 與專案簽名設定。fastlane 官方文件將新機器同步與 CI 的 readonly 用法分開說明:同步完成不代表目前執行任務的使用者已能完成簽名;正式流程應先定位資產與環境差異,不要一開始就撤銷或重建憑證。fastlane match 官方說明

新遠端 Mac 首次建置:先核對工作實際使用的帳號、工作目錄與環境變數,再檢查簽名資產。
本週建議動作:把以下檢查套用到目標發布任務,記錄去除機密後的日誌,最後以預期發布設定完成 Archive 驗收。

這篇文章適合剛把 fastlane 建置搬到遠端 Mac 的獨立開發者、小型 iOS 團隊,以及正在追查簽名或歸檔錯誤的人。
如果問題發生在憑證建立、App Store Connect 上傳認證或 IPA 匯出,請先依錯誤階段分流,避免把不同環節混為同一種「簽名失敗」。

01

新 Mac 已同步:確認任務實際使用的執行環境

match 可以在新機器同步憑證與描述檔,但實際建置仍取決於任務的執行環境。互動式終端機使用的帳號,不一定就是 CI 工作或背景服務啟動時的帳號;兩者的主目錄、環境變數與密鑰鏈存取權也可能不同。

依序確認以下項目:

  • 查明執行 fastlane 任務的 macOS 使用者,以及該工作使用的專案目錄。
  • 確認建置程序取得的 match 設定與解密所需資料,來源符合團隊管理方式。
  • 檢視本次執行的關鍵日誌,分辨倉庫連線、解密、資產同步與 Xcode 簽名各自是否完成。
  • 複製日誌作為排查紀錄前,移除存取權杖、密碼、私鑰內容、憑證倉庫資料與其他機密。

可在工作紀錄中整理成這種不含秘密的格式:

執行帳號:<macOS 使用者>
專案目錄:<已核對的工作目錄>
match 模式:readonly / 非 readonly
失敗階段:倉庫存取 / 解密 / 簽名 / Archive / 匯出 / 上傳
日誌位置:<內部紀錄位置;不附機密內容>

工作目錄與帳號確認無誤後,再判斷「同步成功」代表什麼。不要將它直接等同於 Xcode 已取得可用簽名身分,也不要在同一輪排查中同時更換憑證、描述檔和專案設定,否則難以判斷真正修正了哪個問題。

02

憑證已在,但簽名身分仍不可用

簽名憑證與對應私鑰是不同的資產。Apple 說明,程式碼簽名會使用憑證及其私鑰;如果目前建置帳號無法使用相應私鑰,單看憑證已下載或已安裝,仍不足以證明簽名可用。Apple 關於簽名憑證與團隊分享的說明 與程式碼簽名憑證技術說明可用來核對這項關係。

依照實際建置帳號檢查,而非只在管理者的互動式桌面工作階段查看:

  • 確認目前帳號可見的簽名身分,並確認相應私鑰可供該帳號使用。
  • 核對 fastlane 任務與 Xcode 建置是否由同一個預期帳號執行。
  • 如果團隊透過 match 同步資產,確認憑據倉庫可讀取、解密資料有安全提供,而且使用者有權存取需要的密鑰鏈。
  • 若錯誤涉及憑證或私鑰,先保存遮蔽敏感內容的日誌,再按團隊的憑證管理流程處理。

注意:若本機可以簽名、遠端卻找不到簽名身分,這個差異值得先查帳號與密鑰鏈。不要僅因同步訊息成功便撤銷憑證;撤銷或重建會改變其他建置環境也可能依賴的簽名資產。

Apple 的程式碼簽名說明也將簽名視為對程式與相關資產的驗證機制,並非只要存在一個憑證檔便完成整條鏈路。診斷時應分開記錄「憑證存在」與「目前帳號可使用對應私鑰」兩件事。

03

描述檔同步成功,不代表專案選對

iOS Provisioning Profile 已安裝,仍可能與實際建置的 Bundle ID、Target、構建設定或分發用途不符。需要同時核對描述檔本身與 Xcode 實際採用的簽名設定;某個描述檔已出現在安裝位置,不代表 Archive 一定使用它。

Apple 的建立 App Store 描述檔文件說明描述檔與 App ID、簽名及用途的關係;Xcode 的建置設定參考則列出程式碼簽名相關設定。排查時,請對照目標 Target 的實際設定,而不是只看專案其他 Target 或平常使用的 Debug 配置。

檢查情境 核對項目 判斷方向
多個 Target 或 Bundle ID 各 Target 實際使用的 Bundle ID 與描述檔適用對象 某個 Target 成功,不足以證明其他 Target 也匹配
Debug 與發布設定不同 Archive 使用的構建設定、簽名身分與描述檔 日常建置通過,不等於發布歸檔設定正確
描述檔已同步但未被採用 Xcode 實際選擇的描述檔與簽名設定 區分「已安裝」與「本次建置有使用」
變更分發用途 所選描述檔與預期分發方式是否一致 不要把開發用途的驗證結果直接套用到發佈用途

可以先查閱程式碼簽名建置設定,再逐一比較 Archive 所用的設定與描述檔。若同時存在自動與手動簽名設定,先記錄這次建置實際採用的方式,避免只依據專案介面上的單一欄位推斷。

04

本機通過、遠端唯讀建置失敗:拆開查三段

fastlane 的 readonly 模式適合已準備好簽名資產的 CI 任務;它讓同步流程使用既有憑證與描述檔,不會自動補上缺失私鑰,也不會代替專案選擇正確的簽名設定。match 官方文件列有新機器同步、唯讀模式及憑據相關說明。

執行時可依團隊核准的方式指定唯讀選項,例如:

bundle exec fastlane match appstore --readonly

如果出錯,將故障切成不同階段處理:

  • 倉庫存取失敗:確認遠端任務能讀取憑據倉庫,並檢查使用的認證方式是否適用於該執行環境。
  • 解密失敗:確認解密所需資料已透過安全方式提供給任務;不要把密碼或金鑰直接貼進日誌。
  • 簽名階段失敗:若資產已同步,轉查執行帳號可用的私鑰、密鑰鏈與 Xcode 選用設定。
工作類型 match 操作方向 適用條件 不應期待它處理的問題
首次準備或核准的資產維護 依團隊流程同步或維護簽名資產 已確認具備管理憑證的權限與程序 不應在不清楚影響範圍時任意建立或撤銷憑證
日常 CI 與正式發布 優先採用 readonly 同步既有資產 憑證、私鑰與描述檔已準備好,任務可安全讀取 不會建立缺失資產,也不會自動修復 Xcode 設定
遠端倉庫或解密出錯 先修正存取或解密環境,再重跑任務 日誌能指出錯誤發生於同步前後哪個環節 不應直接歸因於程式碼簽名

倉庫認證失敗、解密失敗與簽名失敗不是同一問題。若本機通過但遠端失敗,應逐一比較兩邊的工作帳號、憑據來源與環境設定,不要因錯誤發生在 match 任務附近,就假定一定要換掉憑證。

05

發布 Archive 失敗:按產物流程定位

Debug 建置通過,不能代替發布 Archive 的驗收。發布任務可能使用不同的構建設定、簽名身分或描述檔;而 Archive、IPA 匯出與上傳也是不同階段。Apple 的將 App 封存並分發至已註冊裝置的說明可協助核對封存與分發步驟。

依日誌中最後成功的階段分流:

  • 如果錯誤出現在 Archive,先核對 Archive 使用的 Target、簽名身分、描述檔與分發用途。
  • 如果 Archive 已完成、但 IPA 匯出失敗,檢查匯出時採用的分發選項與相應簽名資產。
  • 如果產物已匯出、但 上傳失敗,轉查上傳認證與傳輸流程,不要再把它當成簽名鏈路故障。
  • 若錯誤訊息只指出某個簽名項目,先對照完整上下文與實際建置設定;單一訊息未必能證明唯一根因。

本機與遠端環境的差別可能在帳號、私鑰可用性、描述檔選擇或構建設定。逐項比對後再改動,通常比一次重建所有簽名資產更容易保留可追查的因果關係。

06

以目標發布設定完成遠端驗收

最後要驗證的是實際工作鏈路,而不是單一同步訊息或普通建置結果。使用預期發布設定,讓遠端 Mac 完成目標專案的 Archive,再檢查歸檔內容與選定的簽名身分、描述檔及分發方式是否一致。

完成驗收時,保留不含機密的紀錄:

  • 任務使用的 macOS 帳號與工具鏈資訊。
  • 簽名資產的取得方式,以及本次是否以唯讀模式同步。
  • 專案 Target、發布設定與預期分發用途。
  • Archive、匯出、上傳各階段的結果;尚未執行的階段要明確標示。
  • 可公開分享的驗證摘要,並移除憑證內容、私鑰、密碼與倉庫認證資料。

這只能證明該專案、該執行環境與該種分發設定完成本次驗收,不能推定其他專案或分發方式也已通過。若需要補足簽名配置背景,可參考遠端 Mac 的相關環境資訊;該頁不能取代專案本身的簽名驗收。

07

常見問題

match 同步成功,為何仍找不到簽名身分?

先核對建置任務使用的 macOS 帳號,再確認該帳號能否使用憑證對應的私鑰。同步成功只表示 match 處理了資產,不代表目前執行環境已具備簽名條件。

遠端 Mac 的私鑰不在登入密鑰鏈時怎麼處理?

先確認任務帳號及其可存取的密鑰鏈,再依團隊核准的安全程序提供簽名資產。不要把私鑰內容或解密資料寫入日誌,也不要未查明原因便撤銷憑證。

readonly 可以用在發布建置嗎?

可以用於已備妥簽名資產的 CI 或發布任務,但它只讓同步使用既有資產,不會修復缺少的私鑰、建立遺失的描述檔,或自動改正專案簽名設定。

本機簽名成功、遠端 Archive 失敗,優先查哪裡?

先比較執行帳號與密鑰鏈,再核對描述檔和 Archive 所用的發布設定。之後依錯誤出現在 Archive、IPA 匯出或上傳哪個階段繼續排查;不要以 Debug 成功代替發布驗收。

若目前只靠開發者個人電腦承接發布,離線或帳號環境差異可能讓常規建置難以重現;把正式簽名資產留在不受控的共用工作環境,也會增加憑據管理風險。若已確認故障在遠端執行環境,而非簽名配置本身,租用 Mac 可作為承接 Xcode 歸檔與發布任務的另一種安排;它不會自動修復憑證或專案設定,仍須依本文流程驗收。需要比較遠端 Mac 方案時,可查看 NodeMini 的遠端 Mac 資訊,並按實際連線方式與任務需求判斷是否合適。