在构建脚本中使用xctool和xcodebuild进行代码签名后,ITC上的代码签名权利无效

时间:2015-08-13 20:07:20

标签: itunesconnect code-signing xcodebuild xctool

我正在为持续集成的情况编写一些构建脚本,其中代码将部署在另一台机器上,并且需要能够构建并正确签署Xcode项目,然后我将脚本上载到ITC。到目前为止,我能够构建和存档到.ipa,验证代码签名,但ITC失败并出现以下错误。为什么会出现此错误?我可以添加什么来解决这种情况?

上传.ipa后ITC出错:

无效的代码签名权利。您的应用包标签中的权利与配置文件中包含的权利不匹配。根据配置文件,捆绑包含一个不允许的密钥值:' [" AAAAAAAA.com.domain.Product" ]'关键的钥匙串访问组'在' Payload / Product.app / Product'"

请注意,在目标构建计算机上,我将.mobileprovision文件安装在" $ HOME / Library / Provisioning Profiles"中,并创建一个具有相关.cert和.p12私钥的自定义密钥链,例如构建可以签署文件。这需要花费很多时间,直到xctool终于认出了密钥和配置文件。

我使用相同的分发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进行了构建/归档/导出,ITC接受了XCode,并将结果与​​脚本生成的构建进行了比较。

脚本化的ipa缺少一个archived-expanded-entitmentments.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>

1 个答案:

答案 0 :(得分:0)

以下是我发现有效的修复方法。

原创.ipa创作线

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

替换为这一行:

xcrun -sdk iphoneos PackageApplication ./$PROJECT_NAME.xcarchive/Products/Applications/$PROJECT_NAME.app -o `pwd`/$PROJECT_NAME.ipa --sign "$IDENTITY" - -embed "$PROVISIONING_PROFILE_FILE"

这也需要设置&#34;代码签名资源规则路径&#34;在Xcode中设置值为&#34; $(SDKROOT)/ResourceRules.plist" ;,因为它会抛出一个关于此的错误。不满意每个项目需要这样做,但这是一次性的事情并解决了这个问题。