非公共API使用情况:该应用包含一个或多个已损坏的二进制文件

时间:2018-01-29 12:58:44

标签: ios xcode app-store itunesconnect application-loader

对于iOS应用程序新版本上传,我真的很沮丧。这是故事。

2018年1月25日日期,我们上传了新版本 3.3.27内部版本号1.0 。成功处理并在测试飞行中进行测试。在那之后我们发现了一些问题,并且在 2018年1月26日我们修复它并上传新的构建1.1并且我们从iTunes Connect收到电子邮件说:

  

亲爱的开发人员,

     

我们发现了您最近为" appname"发送的一个或多个问题。要处理您的交付,必须纠正以下问题:

     

非公开API使用:

The app contains one or more corrupted binaries. Rebuild the app and resubmit.
     

如果源代码中的方法名称与私有Apple API匹配   如上所列,更改方法名称将有助于防止此应用程序   在未来的提交中被标记。另外,请注意一个   或者更多上述API可能位于静态库中   包含在您的应用中。如果是这样,他们必须被删除。

     

如果您认为此邮件是错误发送的,并且您只有   使用Apple发布的API按照指南发送   应用程序的九位数Apple ID,以及有关原因的详细信息   您认为上述API被错误地标记为   email@apple.com。有关详细信息,请访问

虽然我在上传成功之前验证了构建:

enter image description here

当我上传应用时,我获得了以下成功:

enter image description here

在邮件中,我没有得到正确的信息,那就是损坏的二进制文件或框架的名称。我们使用的方法是非公开的,我们在1月25日之前上传了该应用程序的100s更新版本,一切都很好并且可以接受。

然后我尝试了以下更改:

  1. 重建应用并再次提交同样的电子邮件。
  2. 卸载Xcode9.2并再次安装获取相同的电子邮件。
  3. 删除更改并再次上传内部版本号1.0获取相同的电子邮件。
  4. 更改Mac并尝试再次上传新版本的同一封电子邮件。
  5. 尝试上传旧版本,之前和之后再次使用相同的电子邮件
  6. 我们向iTunes Connect Review发送了一封电子邮件,但是3天后我们没有得到他们的回复。我做研究从1月26日起许多用户在提交申请时面临那种问题。

    如果有人知道过去或最近遇到过这类问题的解决方案请帮助我们

4 个答案:

答案 0 :(得分:4)

经过大量的调查后,我们终于发现了这个问题的问题: 似乎Apple为支持32位和64位的应用程序提供了此错误。

Apple为Mac Appstore提供了this提醒,但似乎iOS应用程序也受到了影响。

因此,解决方案是支持bitcode OR通过删除对ARMV7和ARMV7S的支持或者从构建设置的Valid Architectures中删除对32位设备的支持。这意味着您的应用程序仅适用于iPhone 5S及更高版本。 我希望这有助于某人。

谢谢你,编码愉快!

答案 1 :(得分:2)

这个问题没有一个解决方案Apple现在没有提及任何关于其官方帐户或论坛或其官方开发者网站上的错误或无效二进制相关新闻的日子。即使他们没有回复你的电子邮件。

有些问题通过BitCode启用解决了,有些解决了更新PODFILE的问题,有些通过删除项目中使用的旧swift框架解决了这个问题。

但最后我得到了自己的解决方案,对我有用。当我构建项目时,我在Xcode的左侧面板中发现了一些警告,如下所示。

enter image description here

我认为苹果现在删除了旧的快速支持,以防你的项目使用任何swift类或podfile我们需要更新到swift 4。

一旦我转换为swift 4,我会收到以下警告:

  

不推荐在Swift 4模式下使用Swift 3 @objc推理。   请解决已弃用的@objc推理警告,测试您的代码   启用“使用已弃用的Swift 3 @objc推理”日志记录,以及   然后通过更改“Swift 3 @objc Inference”构建来禁用推理   设置为“默认”为“appname”目标。

为了修复此警告,我使用以下链接The use of Swift 3 @objc inference in Swift 4 mode is deprecated?,在swift类中,我在公开声明之前使用了@objc。

此外,我还会查看所有源代码,并从项目中删除未使用的podfile和类库。

通过上面的方式我解决了这个问题,并在上​​传了第13个版本之后终于接受了。

答案 2 :(得分:1)

非公共API是指未记录并提供给程序员的Apple API方法。 Apple不保证API的这一部分将在将来的升级中使用。他们可以自由更改此部分。 它们禁止使用,以便您的应用程序不会在iOS更新中中断,从而保护您的应用程序的未来用户/购买者! Web服务是外部的,因此不属于非公开范围。您需要保证这部分,而不是苹果。

答案 3 :(得分:0)

我们找到了2个问题的解决方案。删除32位支持,如上所述。并删除CommonCrypto用法。我们用CryptoSwift(https://github.com/krzyzanowskim/CryptoSwift)替换了CommonCrypto。

我们选择更换CommonCrypto,因为我们不想放弃32位用户(iPhone4S,5和5C)。