ERROR ITMS-90046 using xctool / xcodebuild vs XCode Archive 的成功

Posted

技术标签:

【中文标题】ERROR ITMS-90046 using xctool / xcodebuild vs XCode Archive 的成功【英文标题】:ERROR ITMS-90046 using xctool / xcodebuild vs XCode Archive's success 【发布时间】:2015-12-23 05:13:49 【问题描述】:

我有一个命令行脚本,用于编译、存档并将我的 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' 对于关键的“应用程序标识符” 'Payload/Product.app/Frameworks/Charts.framework/Charts' 不是 支持的。这个值应该是一个以你的 TEAMID 开头的字符串, 后跟一个点“.”,然后是包标识符。

在我的项目或设置中没有使用我可以通过全局搜索找到的应用程序标识符字符串。

额外信息

com.domain.Product 将是我项目的主要 bundleIdentifier,它具有为其生成的分发证书和配置文件。没有可以正常工作的嵌入式二进制文件。 “图表”嵌入式项目有一个 bundleIdentifier,但团队在信息选项卡中设置为“无”,并且签名设置为自动。由于它是一个嵌入式二进制/框架,我假设它不会独立签名。当使用 Xcode 的存档时,它被列为主项目的子集,没有独立的标识符或权利。

我还尝试为名为“com.domain.ProductCharts”的嵌入式二进制文件创建独立的 appId 和分发配置文件,并正确设置项目。这不会改变错误。

我进一步尝试将嵌入二进制的项目设置为使用与父项目相同的 bundleIdentier 和设置,但这不会改变错误。

为什么 xctool/xcodebuild 无法正确编译和签名以通过 ITC,而本机 Archiver 可以?

【问题讨论】:

【参考方案1】:

目前,我在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 ...等是什么?

【讨论】:

论坛主题似乎与我遇到的问题相同,他们的解决方案是使用 XCode 构建应用商店版本。我可以做到,但是由于我的构建脚本每天为 TestFlight 版本运行多次,所以很快就会变得乏味。我尝试了手动 entitlements.plist 添加,但这没有帮助。我的配置文件+代码签名都在项目上正确设置,但我也专门在 xcodebuild cmd 中设置了它。在 Yosemite 上使用最新的 Xcode 7.2。似乎 xcodebuild 需要为此修复错误。 有谁知道苹果是否至少承认了这个问题?从 Xcode 7.3 开始,他们还没有修复它。 “我为我修复它的方法是在项目设置中设置配置文件”——哪个项目、应用程序或嵌入式框架?【参考方案2】:

只是猜测:如果您使用命令行,可能需要在 Entitlements.plist 中指定 application-identifier。这里https://developer.apple.com/library/ios/qa/qa1710/_index.html 声明在“在 Xcode 的现代版本中......”

你说:

它们工作得很好,但我最近遇到了一个问题......

您是否同时创建了新的个人资料,现在有两个?还是两个证书?这是description on how to check your entitlements。也许这有帮助。

【讨论】:

我已经尝试创建带有标识符集的 entitlements.plist,但它没有改变任何东西。【参考方案3】:

为嵌入式框架创建 .entitlements 只能解决 Xcode 7.x 中的问题。在 8.x 版本中,问题仍然存在。

【讨论】:

以上是关于ERROR ITMS-90046 using xctool / xcodebuild vs XCode Archive 的成功的主要内容,如果未能解决你的问题,请参考以下文章

退出应用程序后出现 ITMS-90046 错误,我需要退出每个框架吗?

从 Phonegap Build 提交 .ipa 时出现错误 ITMS-90046

错误 ITMS-90046:“无效的代码签名权利。具体来说,密钥 > 'com.apple.developer.associated-domains' 的值 '*'

将应用程序上传到 iTunes 连接时如何解决 Xcode 验证错误?

签名失败问题

Xcode7:无效的代码签名权利