我有一个命令行脚本,用于编译,存档并将我的ios版本提交给ITC以进行TestFlight部署。它们运行良好,但我最近遇到了一个问题,试图在我的工作项目中使用嵌入式框架。我的脚本成功编译和归档项目,但由于嵌入式二进制冲突而导致ITC签名错误。
xctool -workspace $BASE_DIR/$PROJECT_NAME -scheme $SCHEME -configuration $CONFIG clean archive -archivePath ./$PRODUCT_NAME.xcarchive
xcodebuild -exportArchive -archivePath ./$PRODUCT_NAME.xcarchive -exportPath $PRODUCT_NAME -exportFormat ipa -exportProvisioningProfile "$DIST_PROVISIONING_PROFILE_NAME"
# result is successful, with .ipa file generated
成功编译后,我的脚本会尝试上传到ITC,并失败并显示以下消息。如果我尝试使用Application Loader工具将生成的IPA文件上传到ITC,我会收到相同的消息。
错误ITMS-90046:"无效的代码签名权利。你的申请 捆绑包的签名包含不符合的代码签名权利 iOS上支持。具体而言,价值' XXXXXXXXX.com.domain.Product' 对于密钥'应用程序标识符'在 '有效载荷/ Product.app /框架/ Charts.framework /图表'不是 支持的。该值应该是以TEAMID开头的字符串, 然后是一个点',然后是包标识符。
我的项目或设置中没有使用应用程序标识符字符串,我可以通过全局搜索找到它。
额外信息
com.domain.Product将是我项目的主要bundleIdentifier,它具有为其生成的分发证书和配置文件。没有嵌入式二进制文件可以正常工作。 "图表"嵌入式项目有一个bundleIdentifier,但团队设置为"无"在“信息”选项卡中,签名设置为“自动”。由于它是一个嵌入式二进制/框架,我假设它没有独立签名。使用Xcode的存档时,它被列为主项目的子集,没有独立的标识符或权利。
我还尝试为嵌入式二进制文件创建一个独立的appId和分发配置文件,名为" com.domain.ProductCharts"并正确设置项目。这不会改变错误。
我进一步尝试将嵌入式二进制文件设置为使用与父项目相同的bundleIdentier和设置,但这不会更改错误。
为什么xctool / xcodebuild无法正确编译并签名以通过ITC,而原生Archiver可以?
答案 0 :(得分:3)
目前,我遇到了我认为xcodebuild
命令中与此类似的错误,我修复它的方法是在项目设置中设置provisioning profile
。尝试更新项目并再次运行构建。
对此问题的调查如下:https://forums.developer.apple.com/thread/14378
但其他人报告了associated domains
的问题:
问题:Apple Store submit fails with Error ITMS-90046, but Associated Domains is not among entitlements
您的操作系统,XCode等等是什么?
答案 1 :(得分:0)
猜测:如果使用命令行,可能需要在Entitlements.plist中指定application-identifier
。这里https://developer.apple.com/library/ios/qa/qa1710/_index.html表示在“在Xcode的现代版本中”
你说:
他们工作得很好,但我最近遇到了一个问题......
您是否同时创建了新的个人资料,现在有两个?还是两个证书?这是一个description on how to check your entitlements。也许这有帮助。
答案 2 :(得分:0)
为嵌入式框架创建.entitlements只能在Xcode 7.x中解决问题。在版本8.x中,问题仍然存在。