fastlane match 遠端 Mac 簽名失敗時,先確認建置帳號的密鑰鏈中有可用私鑰,再核對 iOS Provisioning Profile 與專案簽名設定。fastlane 官方文件將新機器同步與 CI 的 readonly 用法分開說明:同步完成不代表目前執行任務的使用者已能完成簽名;正式流程應先定位資產與環境差異,不要一開始就撤銷或重建憑證。fastlane match 官方說明
新遠端 Mac 首次建置:先核對工作實際使用的帳號、工作目錄與環境變數,再檢查簽名資產。
本週建議動作:把以下檢查套用到目標發布任務,記錄去除機密後的日誌,最後以預期發布設定完成 Archive 驗收。
這篇文章適合剛把 fastlane 建置搬到遠端 Mac 的獨立開發者、小型 iOS 團隊,以及正在追查簽名或歸檔錯誤的人。
如果問題發生在憑證建立、App Store Connect 上傳認證或 IPA 匯出,請先依錯誤階段分流,避免把不同環節混為同一種「簽名失敗」。
新 Mac 已同步:確認任務實際使用的執行環境
match 可以在新機器同步憑證與描述檔,但實際建置仍取決於任務的執行環境。互動式終端機使用的帳號,不一定就是 CI 工作或背景服務啟動時的帳號;兩者的主目錄、環境變數與密鑰鏈存取權也可能不同。
依序確認以下項目:
- 查明執行 fastlane 任務的 macOS 使用者,以及該工作使用的專案目錄。
- 確認建置程序取得的 match 設定與解密所需資料,來源符合團隊管理方式。
- 檢視本次執行的關鍵日誌,分辨倉庫連線、解密、資產同步與 Xcode 簽名各自是否完成。
- 複製日誌作為排查紀錄前,移除存取權杖、密碼、私鑰內容、憑證倉庫資料與其他機密。
可在工作紀錄中整理成這種不含秘密的格式:
執行帳號:<macOS 使用者>
專案目錄:<已核對的工作目錄>
match 模式:readonly / 非 readonly
失敗階段:倉庫存取 / 解密 / 簽名 / Archive / 匯出 / 上傳
日誌位置:<內部紀錄位置;不附機密內容>
工作目錄與帳號確認無誤後,再判斷「同步成功」代表什麼。不要將它直接等同於 Xcode 已取得可用簽名身分,也不要在同一輪排查中同時更換憑證、描述檔和專案設定,否則難以判斷真正修正了哪個問題。
憑證已在,但簽名身分仍不可用
簽名憑證與對應私鑰是不同的資產。Apple 說明,程式碼簽名會使用憑證及其私鑰;如果目前建置帳號無法使用相應私鑰,單看憑證已下載或已安裝,仍不足以證明簽名可用。Apple 關於簽名憑證與團隊分享的說明 與程式碼簽名憑證技術說明可用來核對這項關係。
依照實際建置帳號檢查,而非只在管理者的互動式桌面工作階段查看:
- 確認目前帳號可見的簽名身分,並確認相應私鑰可供該帳號使用。
- 核對 fastlane 任務與 Xcode 建置是否由同一個預期帳號執行。
- 如果團隊透過 match 同步資產,確認憑據倉庫可讀取、解密資料有安全提供,而且使用者有權存取需要的密鑰鏈。
- 若錯誤涉及憑證或私鑰,先保存遮蔽敏感內容的日誌,再按團隊的憑證管理流程處理。
注意:若本機可以簽名、遠端卻找不到簽名身分,這個差異值得先查帳號與密鑰鏈。不要僅因同步訊息成功便撤銷憑證;撤銷或重建會改變其他建置環境也可能依賴的簽名資產。
Apple 的程式碼簽名說明也將簽名視為對程式與相關資產的驗證機制,並非只要存在一個憑證檔便完成整條鏈路。診斷時應分開記錄「憑證存在」與「目前帳號可使用對應私鑰」兩件事。
描述檔同步成功,不代表專案選對
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 所用的設定與描述檔。若同時存在自動與手動簽名設定,先記錄這次建置實際採用的方式,避免只依據專案介面上的單一欄位推斷。
本機通過、遠端唯讀建置失敗:拆開查三段
fastlane 的 readonly 模式適合已準備好簽名資產的 CI 任務;它讓同步流程使用既有憑證與描述檔,不會自動補上缺失私鑰,也不會代替專案選擇正確的簽名設定。match 官方文件列有新機器同步、唯讀模式及憑據相關說明。
執行時可依團隊核准的方式指定唯讀選項,例如:
bundle exec fastlane match appstore --readonly
如果出錯,將故障切成不同階段處理:
- 倉庫存取失敗:確認遠端任務能讀取憑據倉庫,並檢查使用的認證方式是否適用於該執行環境。
- 解密失敗:確認解密所需資料已透過安全方式提供給任務;不要把密碼或金鑰直接貼進日誌。
- 簽名階段失敗:若資產已同步,轉查執行帳號可用的私鑰、密鑰鏈與 Xcode 選用設定。
| 工作類型 | match 操作方向 | 適用條件 | 不應期待它處理的問題 |
|---|---|---|---|
| 首次準備或核准的資產維護 | 依團隊流程同步或維護簽名資產 | 已確認具備管理憑證的權限與程序 | 不應在不清楚影響範圍時任意建立或撤銷憑證 |
| 日常 CI 與正式發布 | 優先採用 readonly 同步既有資產 |
憑證、私鑰與描述檔已準備好,任務可安全讀取 | 不會建立缺失資產,也不會自動修復 Xcode 設定 |
| 遠端倉庫或解密出錯 | 先修正存取或解密環境,再重跑任務 | 日誌能指出錯誤發生於同步前後哪個環節 | 不應直接歸因於程式碼簽名 |
倉庫認證失敗、解密失敗與簽名失敗不是同一問題。若本機通過但遠端失敗,應逐一比較兩邊的工作帳號、憑據來源與環境設定,不要因錯誤發生在 match 任務附近,就假定一定要換掉憑證。
發布 Archive 失敗:按產物流程定位
Debug 建置通過,不能代替發布 Archive 的驗收。發布任務可能使用不同的構建設定、簽名身分或描述檔;而 Archive、IPA 匯出與上傳也是不同階段。Apple 的將 App 封存並分發至已註冊裝置的說明可協助核對封存與分發步驟。
依日誌中最後成功的階段分流:
- 如果錯誤出現在 Archive,先核對 Archive 使用的 Target、簽名身分、描述檔與分發用途。
- 如果 Archive 已完成、但 IPA 匯出失敗,檢查匯出時採用的分發選項與相應簽名資產。
- 如果產物已匯出、但 上傳失敗,轉查上傳認證與傳輸流程,不要再把它當成簽名鏈路故障。
- 若錯誤訊息只指出某個簽名項目,先對照完整上下文與實際建置設定;單一訊息未必能證明唯一根因。
本機與遠端環境的差別可能在帳號、私鑰可用性、描述檔選擇或構建設定。逐項比對後再改動,通常比一次重建所有簽名資產更容易保留可追查的因果關係。
以目標發布設定完成遠端驗收
最後要驗證的是實際工作鏈路,而不是單一同步訊息或普通建置結果。使用預期發布設定,讓遠端 Mac 完成目標專案的 Archive,再檢查歸檔內容與選定的簽名身分、描述檔及分發方式是否一致。
完成驗收時,保留不含機密的紀錄:
- 任務使用的 macOS 帳號與工具鏈資訊。
- 簽名資產的取得方式,以及本次是否以唯讀模式同步。
- 專案 Target、發布設定與預期分發用途。
- Archive、匯出、上傳各階段的結果;尚未執行的階段要明確標示。
- 可公開分享的驗證摘要,並移除憑證內容、私鑰、密碼與倉庫認證資料。
這只能證明該專案、該執行環境與該種分發設定完成本次驗收,不能推定其他專案或分發方式也已通過。若需要補足簽名配置背景,可參考遠端 Mac 的相關環境資訊;該頁不能取代專案本身的簽名驗收。
常見問題
match 同步成功,為何仍找不到簽名身分?
先核對建置任務使用的 macOS 帳號,再確認該帳號能否使用憑證對應的私鑰。同步成功只表示 match 處理了資產,不代表目前執行環境已具備簽名條件。
遠端 Mac 的私鑰不在登入密鑰鏈時怎麼處理?
先確認任務帳號及其可存取的密鑰鏈,再依團隊核准的安全程序提供簽名資產。不要把私鑰內容或解密資料寫入日誌,也不要未查明原因便撤銷憑證。
readonly 可以用在發布建置嗎?
可以用於已備妥簽名資產的 CI 或發布任務,但它只讓同步使用既有資產,不會修復缺少的私鑰、建立遺失的描述檔,或自動改正專案簽名設定。
本機簽名成功、遠端 Archive 失敗,優先查哪裡?
先比較執行帳號與密鑰鏈,再核對描述檔和 Archive 所用的發布設定。之後依錯誤出現在 Archive、IPA 匯出或上傳哪個階段繼續排查;不要以 Debug 成功代替發布驗收。
若目前只靠開發者個人電腦承接發布,離線或帳號環境差異可能讓常規建置難以重現;把正式簽名資產留在不受控的共用工作環境,也會增加憑據管理風險。若已確認故障在遠端執行環境,而非簽名配置本身,租用 Mac 可作為承接 Xcode 歸檔與發布任務的另一種安排;它不會自動修復憑證或專案設定,仍須依本文流程驗收。需要比較遠端 Mac 方案時,可查看 NodeMini 的遠端 Mac 資訊,並按實際連線方式與任務需求判斷是否合適。