2017-06-05 79 views
2

我們有一個iOS應用程序,它使用Jenkins運行的一系列Bash腳本構建。截至今天事情是,我們使用這個命令建立一個xcarchive:如何在不同的機器上構建和簽署iOS應用程序?

xcodebuild archive -workspace "..." -scheme "..." -configuration "Release" -archivePath "..." 

這將構建應用程序,並利用其中使用xcconfig設置的配置文件中指定的證書標誌吧。一旦它是完整的,那麼,我們用把它變成一個IPA:

xcodebuild -archivePath "..." -exportArchive -exportOptionsPlist "${export_options_plist}" -exportPath "..." 

那麼這IPA可以上傳到曲棍球或取決於我們使用xcconfig的應用程序商店(我們換出來,以創建不同的版本) 。

我們現在要確保我們的證書儘可能保持安全。這意味着我們要在一臺機器上執行構建,但要在另一臺機器上進行簽名。爲了做到這一點,我們需要做的是:

  1. 創建一個無符號xcarchive
  2. 轉讓xcarchive的簽約機
  3. 打開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,所以如果需要,我們很樂意使用它。

更新:我們對此有一個「解決方案」,即使用開發證書籤署發佈版本,然後使用發佈版本對其進行簽名。這解決了所有權利被填充等問題,但仍然需要每個二進制文件被辭職和權利合併等等,所以我很好奇是否有更好的解決方案。

回答

0

我們和公司的其他團隊一起工作了好幾個星期。我們所有人都得出了同樣的結論,沒有比用開發證書籤名更好的選擇,然後用prod證書重新簽署每個二進制文件。這不是一個簡單的過程,但這就是我們一直留下來的。

0

這可能會爲你工作,我認爲

  1. 您的生成計算機上創建一個無符號的IPA。

  2. 在生成計算機中有一個腳本,用於將IPA傳輸到您的 簽名計算機。

  3. 使用簽名機器上的FloatSign腳本來辭去 IPA。

+0

創建未簽名的IPA會導致缺少授權的問題,FloatSign不會處理重置權利中的調試密鑰等內容。 –

0

請按照下列步驟來創建一個無符號xcarchive

  1. 設置 '代碼簽名身份'= '不要代碼簽名'

•選擇目標( '') - >構建設置並找到'Signing'部分。

設置 '代碼簽名身份'= '不要代碼簽名'

enter image description here

  • 設置捆綁標識符= ''
  • Set Version = 1.0 //你需要發送

    Set Build = 5 //你需要發送

    刪除'自動管理唱歌'旗幟。

    enter image description here

  • 打開端子並轉到項目根文件夾。然後運行以下命令。
  • xcodebuild -workspace <ProjectName>.xcworkspace -scheme <ProjectName> -configuration Release clean archive -archivePath buildArchive/<ProjectName>.xcarchive CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO

  • 成功完成後,將創建一個新的「buildArchive」文件夾和內部的一個「.xcarchive」文件。
  • 您可以對'.xcarchive'文件進行壓縮並將xcarchive傳輸到簽名機器。

    相關問題