我尝试了所有方法,每次提交我的应用程序到iTunes Connect时,它总是显示:
上传已接收
(2分钟后)
无效二进制文件
这让我发疯了, 我已经:
- 清理了所有构建 - 制作了新的Entitlement.plist - 检查了是否使用了发布配置。
请检查与您的苹果开发者帐户相关联的邮箱,苹果会将一封包含诊断信息和如何解决问题的电子邮件发送到您的邮箱。
对于我来说,苹果发送了以下诊断信息。我实际上从未接触过iCloud,这真的很令人困惑。毕竟,我创建了一个没有通配符字符的新应用程序ID,然后创建了一个新的发布配置文件,并签署了我的应用程序,最后提交给苹果,结果是成功的。
代码签名授权无效 - 您的应用程序包签名包含不受支持的授权值。对于com.apple.developer.ubiquity-container-identifiers授权,数组中的第一个值必须由Apple在供应配置文件中提供的前缀加上包标识符后缀组成。包标识符必须与您的应用程序或其他允许您用作iCloud容器标识符的应用程序的包标识符相匹配。
具体来说,在ProductName中com.apple.developer.ubiquity-container-identifiers密钥的“K8FN29QYP2.*”值不受支持。
代码签名授权无效 - 您的应用程序包签名包含不受支持的授权值。
具体来说,在ProductName中com.apple.developer.ubiquity-kvstore-identifier密钥的“K8FN29QYP2.*”值不受支持。
我也曾经遇到过这种问题,在苹果商店得到了这样的回复:
亲爱的开发者,
我们发现您最近提交的二进制文件存在一个或多个问题,涉及“应用名称”。在审核您的应用之前,必须纠正以下问题:
无效的图标路径 - 在"CFBundleIcons"键下引用的路径上未找到图标:icon114.png
一旦纠正了这些问题,请转到版本详细信息页面,然后单击“准备上传二进制文件”按钮。继续提交过程,直到应用程序状态为等待上传,然后使用“应用程序加载器”上传已更正的二进制文件。
此致,
iTunes Store团队
我通过在我的entitlements plist中添加两个新的键 - application-identifier和keychain-access-groups来解决了这个问题:
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>T9YRD11G97.com.duncancampbell.fontagious</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>T9YRD11G97.com.duncancampbell.fontagious</string>
</array>
</dict>
</plist>
当尝试更新我的应用时,我也遇到了这个问题。自从我上次提交以来,我应用的唯一真正变化就是添加了iCloud支持。我怀疑我的授权有问题,而且我从itunesconnect@apple.com提交机器人收到的错误邮件十分可疑。相关部分如下:
Specifically, value "XXXXXXXXXXX.com.mydomain.myappmame" for key
"com.apple.developer.ubiquity-container-identifiers" in
MyAppName is not supported.
我在这里对应用程序/域名/团队ID进行了匿名处理,分别为MyAppName/mydomain.com/XXXXXXXXXX。请注意,投诉中说“XXXXXXXXXX.com.mydomain.myappmame”是不正确的。确实是不正确的。应该是“myappname”,而不是“myappmame”,其中'm'应该是'n'。我查看了我的项目中的授权文件,它是正确的。我查看了提交到商店的应用程序包中包含的授权文件,它也是正确的。我解压了我提交到商店的zip文件,那里的授权文件也是正确的。因此,很明显这个字符替换是在应用程序提交被App Store接受之后发生的。
毫无疑问,这个问题并不会影响每个人,否则就会有大规模的抗议。因此,我认为我的应用程序可能有一些“特殊”的东西,会引发自动化App Store提交处理中的错误。为了验证,我从头开始创建了一个新的空应用程序,启用了iCloud授权,并使用新的应用程序标识符将其提交到App Store。它被接受并且状态变为“等待审核”。所以它通过了审核。(我立即拒绝了二进制文件,这样它就不会被审核:)
我设法通过更改我的授权文件来解决这个问题:
<plist version="1.0">
<dict>
<key>com.apple.developer.ubiquity-container-identifiers</key>
<array>
<string>$(TeamIdentifierPrefix)com.mydomain.myappname</string>
</array>
</dict>
</plist>
转换为:
<plist version="1.0">
<dict>
<key>com.apple.developer.ubiquity-container-identifiers</key>
<array>
<string>XXXXXXXXXX.com.mydomain.myappname</string>
</array>
</dict>
</plist>
我原本希望在 App Store 中执行团队标识符前缀的任何代码都是罪魁祸首,并且以某种方式破坏了字符串中更远的字符。通过自己进行替换,也许就不会发生损坏,我的应用程序就可以通过了。惊喜!它奏效了。
我浪费了一整天的时间来解决这个问题,但还没有收到苹果支持的回复。但这有点学术性,因为我的应用程序现在正在等待审核。但我仍然想知道是什么原因导致了这个问题,并且已经被苹果修复了。如果我找到了答案,我会更新这篇文章。