我們有一個iOS應用程序,它使用Jenkins運行的一系列Bash腳本構建。截至今天事情是,我們使用這個命令建立一個xcarchive:如何在不同的機器上構建和簽署iOS應用程序?
xcodebuild archive -workspace "..." -scheme "..." -configuration "Release" -archivePath "..."
這將構建應用程序,並利用其中使用xcconfig設置的配置文件中指定的證書標誌吧。一旦它是完整的,那麼,我們用把它變成一個IPA:
xcodebuild -archivePath "..." -exportArchive -exportOptionsPlist "${export_options_plist}" -exportPath "..."
那麼這IPA可以上傳到曲棍球或取決於我們使用xcconfig的應用程序商店(我們換出來,以創建不同的版本) 。
我們現在要確保我們的證書儘可能保持安全。這意味着我們要在一臺機器上執行構建,但要在另一臺機器上進行簽名。爲了做到這一點,我們需要做的是:
- 創建一個無符號xcarchive
- 轉讓xcarchive的簽約機
- 打開xcarchive成簽署IPA
第2步現在可以忽略不計,所以我們只關注步驟#1和#3。
創建無符號xcarchive可以通過將參數CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
添加到archive
命令來完成。
雖然簽署IPA是非常棘手的。我們假定我們可以再次創建IPA並使用codesign
命令在IPA中對二進制進行簽名。但是,這有幾個問題。第一個是我們爲該應用程序提供的.entitlements
文件沒有得到尊重。我們必須將此作爲標誌傳遞給簽名命令。然後我們意識到我們必須更正.entitlements
文件中的所有變量,因爲Xcode不再使用正確的值替換它們。然後我們意識到我們必須爲每個擴展都做到這一點。
我們終於得到了這一切工作,正確的權利,取代變量和一切簽署,但當我嘗試上傳新的簽名國際音標到曲棍球它拒絕了它。錯誤消息也沒有幫助。
我們用新系統區分了以前的系統,每個二進制都不同。我們不確定這是一個密碼問題,還是隻是一個時間戳更改,但有變化。此外,我們發現我的擴展程序都丟失了archived-expanded-entitlements.xcent
文件,並且可能還有更多問題。
這絕對好像我們正在以這種錯誤的方式進行。我們顯然不應該爲了在不同的機器上簽名而重新做所有事情,那麼我們該在哪裏出錯?我們應該如何在一臺機器上構建並簽署另一臺機器?
P.S.我們目前的工具直接使用xcodebuild
,但我們對構建過程的其他部分支持fastlane
,所以如果需要,我們很樂意使用它。
更新:我們對此有一個「解決方案」,即使用開發證書籤署發佈版本,然後使用發佈版本對其進行簽名。這解決了所有權利被填充等問題,但仍然需要每個二進制文件被辭職和權利合併等等,所以我很好奇是否有更好的解決方案。
創建未簽名的IPA會導致缺少授權的問題,FloatSign不會處理重置權利中的調試密鑰等內容。 –