2012-11-28 242 views
4
運行xcodebuild聯編代碼簽名錯誤

[不是的類似的問題重複進一步向下解釋]在詹金斯

我越來越從內詹金斯運行xcodebuild聯編時,但它會建立在命令行中確定或簽名錯誤代碼來自Xcode。

過去有幾個人遇到過這個問題,與他們共同的主題是Jenkins在啓動時作爲守護程序用戶運行,因此試圖訪問系統鑰匙串。 人們已經應用的解決方案是將憑據複製到系統鑰匙串或運行命令來設置要使用的鑰匙串。

但是在我的情況下,如果我查看活動管理器中的launchd,用戶顯示爲我登錄到計算機上的用戶,因此Jenkins應該以此用戶身份運行,而不是作爲守護程序用戶運行。

我想這鑰匙扣加入該命令將詹金斯腳本使用狀態下運行xcodebuild聯編

security list-keychains -s /Users/[user]/Library/Keychains/login.keychain 

之前但是,這並沒有解決問題。

我得到的錯誤是:

Code Sign error: The identity 'iPhone Developer: NNNNN (9TYX5WAM63)' doesn't match any valid, non-expired certificate/private key pair in your keychains" 

於是,我就在詹金斯移動證書到系統鑰匙串,但現在得到這個錯誤,但它仍然在命令行罰款:

Code Sign error: Provisioning profile 'F152C66E-B99A-47F6-B262-376CE4403D71' can't be found 

另外,當我將證書移動到系統鑰匙串時,我不再能夠從XCOde內部生成 - 我得到與上面的最高錯誤消息相同的錯誤。

我也嘗試編輯org.jenkins-ci.plist文件,將用戶設置爲我登錄到機器上的用戶,按照這種方式,但這也沒有效果。

Missing certificates and keys in the keychain while using Jenkins/Hudson as Continuous Integration for iOS and Mac development

任何想法我可以嘗試下?

+0

在回答關於詹金斯支持你(刪除)的問題,有堆棧溢出,郵件列表,IRC和Twitter。請參閱Jenkins網站頂部的「連接」標籤。 –

回答

5

我感覺對你而言,我們最後一次與此混淆,這是相當大的挑戰。當我們爲一個項目設置CI服務器時,我們做了這個。如果我沒記錯的(廣義)我們遵循下列步驟操作:

1)設置詹金斯了作爲蘋果開發一個開發者賬戶

2)創建的證書和DEV預置簡檔專門爲詹金斯

3 )設置的CI服務器上的用戶詹金斯和刪除的Xcode以往任何證書/省型材爲用戶

4)詹金斯證書添加到的AD-HOC DIST配置文件(如果你想給的.ipa分發到HockeyApp你將需要爲此建立檔案庫。)

5)進入Xcode項目文件,並刪除此用戶和適當的箴言配置文件以預置描述文件

6)下載並安裝該證書的任何現有引用。

7)構建解鎖Jenkins用戶鑰匙串之前。只有在Jenkins用戶不是運行xcode構建的用戶時才這樣做。

驗證Xcode在以Jenkins用戶身份登錄時,在組織者中顯示Prov Profile爲有效。

我知道我的答案有點含糊,我的意圖是幫助。這種類型的錯誤通常是由三件事之一引起的。 Xcode無法找到配置文件,Xcode無法找到證書或Xcode發現多個配置文件(應該會產生一個不同的錯誤,但並不總是),並有某種不匹配。通常重做Prov配置文件是最痛苦的解決方案。

祝你好運。你會解決它,這只是一個巨大的頭痛!

+0

嗨,您爲開發者設置的Jenkins用戶需要成爲代理人還是管理員才能將最終版本提交給應用商店。我在某處讀到提交只能由代理執行,是否對用於執行構建的用戶帳戶有任何影響? – Gruntcakes

+0

有趣的問題。我已經編寫了AD-Hoc上傳腳本,但我從未編寫過AppStore構建腳本。至於一般問題,我認爲這可能會有所幫助:http://stackoverflow.com/questions/11570419/can-a-team-admin-create-a-distribution-provisioning-profile-or-just-the -team -ag/11570807#11570807你應該可以上傳作爲管理員的AppStore版本(正如我在帖子中提到的那樣),但其他人遇到過問題。 – Kibitz503

2

可能不是您正在尋找的答案,但由於多種原因,我放棄了XCodeBuild插件,並通過「Execute Shell」步驟運行我的構建。

你說你的命令行構建工作,所以你已經知道所需的命令。只需將其放入外殼即可。

xcodebuild -verbose -alltargets -configuration Debug clean build CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" PROVISIONING_PROFILE=${PROVISIONING_PROFILE} 
&& 
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${WORKSPACE}/client_trunk/build/Debug-iphoneos/${Application}.app" -o "${WORKSPACE}/client_trunk/build/Debug-iphoneos/${Application}-Debug-${shortVer}.${revVer}.ipa" --sign "${CODE_SIGN_IDENTITY}" --embed "/Users/[youruser]/Library/MobileDevice/Provisioning Profiles/${PROVISIONING_PROFILE}.mobileprovision" 

以上,${CODE_SIGN_IDENTITY}是一個看起來像iPhone Developer: blah
${PROVISIONING_PROFILE}對於像F152C66E-B99A-47F6-B262-376CE4403D71

0

使用詹金斯配置文件中的十六進制數,我得到這個錯誤:

/Users/Shared/Jenkins/Home/jobs/ExampleTabbed-Integration/workspace/build/Debug-iphoneos/ExamplesTabbed.app: User interaction is not allowed. 

命令/ usr/bin/codesign失敗,退出代碼爲1

我固定它通過執行以下操作:

  • 所述的XCode(詹金斯插件)之前添加生成步驟步驟
  • 添加以下作爲執行命令:

    安全解鎖鑰匙串-p「passwordhere 「$ {HOME} /Library/Keychains/login.keychain

  • 在Xcode(通過插件)配置我使用了以下內容:

    • 解鎖鑰匙扣? (未選中)
    • 鑰匙扣路徑:$ {HOME} /Library/Keychains/login.keychain
    • 鑰匙串密碼:(空)

可能可以去除前階段和使用實際的xcode配置來實現它,但它的工作方式與所描述的一樣沒有問題。

注意這並沒有考慮到使用更安全的解決方案,但這是我對xcode簽名問題的解決方案。我使用Jenkins安裝程序在OSX上運行,並作爲launchctl命令運行,由默認的Jenkins安裝程序應用程序使用。如果有幫助。在Xcode Plugin home page

0

按照指令:

If this prompt is not showing on the build machine, you can force it to appear by running the codesign command that failed from a terminal on the build machine: /usr/bin/codesign --force --sign "iPhone Distribution: .....

,可執行未能從終端作爲詹金斯用戶簽署命令,選擇「總是允許」