2017-07-17 221 views
9

我使用命令行xcodebuild工具從Xcode存檔中導出.ipa文件。它工作正常到Xcode 8.3.3。相同的設置已停止使用Xcode 9測試版。現在它失敗,出現此錯誤:xcodebuild -exportArchive失敗,錯誤定位簽署資產失敗

IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7fc309310550>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed." 

看來Xcode 9找不到配置文件,但爲什麼?

+0

什麼是xcodebuild聯編命令的具體你執行? –

回答

10

我運行此命令:

xcodebuild -exportArchive -archivePath archive.xcarchive -exportPath /my/export/path -exportOptionsPlist options.plist 

我的項目使用手工簽名。事實證明,Xcode 9需要在options.plist中指定的供應配置文件名稱或UUID才能簽署導出的.ipa文件。我加入此項以我options.plist:

<key>provisioningProfiles</key> 
<dict> 
    <key>com.myapp.bundle.id</key> 
    <string>My AdHoc Provisioning Profile Name</string> 
</dict> 

和錯誤「定位簽署資產失敗」不見了。然而,還有另一個錯誤:

IDEDistribution: Step failed: <IDEDistributionPackagingStep: 0x7f9dfd8e5930>: Error Domain=IDEFoundationErrorDomain Code=1 "ipatool failed with an exception: #<CmdSpec::NonZeroExcitException: CmdSpec::NonZeroExcitException> 

Xcode 9默認情況下從位碼重新編譯應用程序。我得到了這個錯誤,通過增加另一個進入我的options.plist轉位碼斷:

<key>compileBitcode</key> 
<false/> 

現在,我終於可以在Xcode 9和出口的ipa文件來構建我的應用程序xcodebuild聯編沒有錯誤。

+0

我們已經嘗試過(包含UUID和我們認爲的名稱),並且我們得到相同的錯誤。 xcodebuild告訴你*它在哪裏看,*它正在嘗試哪些*配置文件,以及它們爲什麼不適合會非常有幫助。 –

+0

有人找出「NonZeroExcitException」的真正原因是什麼?關閉位代碼不適用於我們 – Tres

+0

一些與NonZeroExcitException有關的有用信息:它在歸檔步驟中來自python腳本bitcode-build-tool。 Xcode在臨時文件夾中創建日誌。對我來說是這樣的:/var/folders/62/wwfl967573n9f1g2yqg_3zg80000j_/T/MyApp_2017-09-18_10-32-23.314.xcdistributionlogs這些日誌包含腳本更詳細的輸出。看起來在導出步驟中存在一些位代碼問題。 – Tres

8

在我的情況下,問題得到了解決由-exportOptionsPlist plist中的下一個領域:

<dict> 
    <key>compileBitcode</key> 
    <false/> 

    <key>method</key> 
    <string>ad-hoc</string> 

    <key>provisioningProfiles</key> 
    <dict> 
     <key>com.my.bundle.id</key> 
     <string>AD_HOC_PROVISIONING_PROFILE_NAME</string> 
    </dict> 

    <key>signingCertificate</key> 
    <string>CERTIFICATE_HASH</string> 

    <key>signingStyle</key> 
    <string>manual</string> 

    <key>teamID</key> 
    <string>TEAM_ID</string> 
</dict> 

所以,顯然我必須設置:compileBitcodemethodprovisioningProfilessigningCertificatesigningStyleteamID

在你的情況下,一組字段可以不同。我已經通過Xcode 9歸檔並導出.ipa找到了我的設置。XCode會將它的exportOptionsPlist與ipa一起導出並顯示它使用的字段。上田發現

更多信息:https://blog.bitrise.io/new-export-options-plist-in-xcode-9

+0

謝謝!爲我工作。 compileBitCode不是簽名問題的一部分,可能不需要。應該標記爲解決方案... – moritz