2015-08-13 21 views
0

我正在編寫一些構建腳本,以實現代碼將部署在另一臺計算機上的持續集成情況,並且需要能夠構建正確簽署一個Xcode項目,然後將我的腳本上傳到ITC。到目前爲止,我能夠構建並存檔到.ipa,驗證代碼簽名,但ITC失敗並出現以下錯誤。爲什麼會發生這個錯誤,我可以添加什麼來解決這種情況?在ITC代碼在構建腳本中使用xctool和xcodebuild進行代碼簽名後ITC上的代碼簽名無效

錯誤的.ipa的上傳後:

無效代碼簽名授權。應用程序包簽名中的權利與供應配置文件中包含的權利不匹配。根據供應配置文件,捆綁包包含一個不允許的密鑰值:'[Payload/Product.app/Product'中的密鑰'keychain-access-groups'的'[AAAAAAAA.com.domain.Product]]' 「

請注意,在目標生成機器上,我將.mobileprovision文件安裝在」$ HOME/Library/Provisioning Profiles「中,並創建一個具有相關.cert和.p12私鑰的自定義鑰匙串,這個花了很長時間,直到xctool最終識別出了密鑰和配置文件。

我正在使用相同的Distribution App Store證書和配置文件,我可以在我的機器上使用Xcode這工作正常。

以下是我如何構建代碼並歸檔ipa。

xctool -project ./$PROJECT_NAME.xcodeproj 
     -scheme $SCHEME 
     -configuration Release 
     CODE_SIGN_IDENTITY="${IDENTITY}" 
     PROVISIONING_PROFILE="${PROVISIONING_PROFILE_UUID}" 
     OTHER_CODE_SIGN_FLAGS="--keychain $HOME/Library/Keychains/$KEYCHAIN" 
     clean archive 
     -archivePath ./$PROJECT_NAME.xcarchive 

xcodebuild -exportArchive -archivePath ./$PROJECT_NAME.xcarchive 
      -exportPath $PROJECT_NAME 
      -exportFormat ipa 
      -exportProvisioningProfile "$PROVISIONING_PROFILE_NAME" 

我也能夠驗證已解壓的ipa程序進行簽名,如果這意味着什麼。如果簽名不像上面那樣發生,那肯定會失敗。

$codesign --verify -vvvv Payload/Product.app 
Payload/Product.app: valid on disk 
Payload/Product.app: satisfies its Designated Requirement 

編輯:

我沒有使用Xcode中構建/存檔/出口,這是由美國國際貿易委員會接受,並比較結果由腳本生成的構建。

腳本中的ipa缺少文件archived-expanded-entitlements.xcent。這似乎是問題的根源。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>application-identifier</key> 
    <string>AAAAAAA.com.domain.Product</string> 
    <key>keychain-access-groups</key> 
    <array> 
      <string>AAAAAAA.com.domain.Product</string> 
    </array> 
</dict> 
</plist> 

回答

0

下面是我發現的修復工作。

原始的.ipa創建線

xcodebuild -exportArchive -archivePath ./$PROJECT_NAME.xcarchive -exportPath $PROJECT_NAME -exportFormat ipa -exportProvisioningProfile "$PROVISIONING_PROFILE_NAME" 

這一行替換:

這也需要設置「代碼簽名資源規則路徑」在Xcode中設置具有值「$ (SDKROOT)/ResourceRules.plist「,否則會引發錯誤。對於每個項目都需要這樣做並不滿意,但這只是一次性解決問題。