应用提交失败 - 1+损坏的二进制文件/非公共API使用情况,没有其他详细信息

时间:2018-01-27 16:55:31

标签: ios xcode itunesconnect

我一直将我的应用程序提交到App Store进行测试飞行,在构建11之后,我通过Apple的电子邮件收到了失败:

非公共API使用:该应用包含一个或多个损坏的二进制文件。重建应用程序并重新提交

我没有收到他们的其他详细信息。没有方法名称或类或任何东西。

我已经提交了构建15,例如,它实际上是构建版本11的完全副本(通过了!),版本号为bump,构建15失败。

我认为这是Apple的错误,但除了上面的段落之外我无法证明这一点。构建1-11工作正常,并能够上传和分发。

我正在使用Xcode 9.1和9.2,两者都给出了相同的错误。

我也通过DTS联系Apple,他们说他们无法帮助我。

我现在该怎么办?

9 个答案:

答案 0 :(得分:6)

我遇到了这个问题。我使用CommonCrypto作为假冒的'框架。我将其删除,并切换为 the method described by the accepted answer in this thread ,iTunesConnect接受了我的版本。

在使用pod update时,通过XCode获取Swift 4转换警告或使用" CommonCryptoModule" 显示在cmd输出中似乎是一个强有力的指标,无论您是否受到影响通过这个问题与否。

答案 1 :(得分:2)

我们没有启用bitcode的项目在2018-01-26周五开始失败。在这些项目的构建设置中将Enable Bitcode设置为Yes解决了这个问题。

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

自周六以来遇到同样的问题。在我们的案件中进行了长时间的试验和错误,打开Bitcode不起作用。 我的podfile的以下部分是原因:

post_install do |installer| 
  puts("Set deployment target")
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '10.3'
    end
  end
end

我删除了这个后,它处理没有错误(仍然关闭Bitcode)。虽然为什么设置部署目标会突然导致拒绝,但这真让我感到困惑。

答案 4 :(得分:0)

似乎问题已在iTunes Connect后端修复。 建成45后,我们昨天晚上通过了。试图找出解决所有这些变化问题的原因 - 现在似乎还要进行初始构建。

所以我可以在外面度过三天......

答案 5 :(得分:0)

最近从2018年1月26日没有任何通知或公告苹果做了一些改变相关的快速旧代码不再适用于在app-store提交申请。我没有在我的项目中使用CommonCrypto

我也面临这个问题,我在苹果论坛和各种平台上进行了大量搜索并发布了一个关于非公共API使用情况的问题:该应用程序包含一个或多个损坏的二进制文件。重建应用并重新提交

了解到那种无效的二进制拒绝没有单一解决方案。我提到了一些可能最近适用于某些用户的解决方案。

  1. 如果您长时间使用并且包含一些swift框架或类,那么更新你的cocoa-pods,因为swift 2.0然后用swift 4支持更新你的cocoa-pods,而目标10.0则错误消失了。
  2. 我正在谈论的一个用户,他在Build设置中启用了bitcode,该问题为他解决了问题。
  3. 一些用户删除了未使用cocoa-pods问题直接在代码中使用的未使用的代码,类和框架。
  4. 对我来说,我在左侧面板中收到警告,如下图
  5. enter image description here

    • 转换为swift4后,我会收到以下警告:
      

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

    • 要修复此警告,我会使用该答案:The use of Swift 3 @objc inference in Swift 4 mode is deprecated?

    • 之后,我需要在@objc类公共方法中添加swift3我在objective-c类中使用桥接

    • 我还检查左侧面板中的其他警告,还有一些其他依赖警告,应用程序目标可能也是其他的帮助。

    希望这个答案对于一些尚未找到答案但可能有帮助的用户有用。

答案 6 :(得分:0)

我能够为自己解决这个问题,这就是我所做的:

  • 在我的项目中禁用Bitcode并保持禁用状态
  • 我删除了3个pod,其中一个是CommonCrypto,我忘记了它(其他2个是QRCode和SwiftyJSON)
  • 我在Build Settings
  • 中删除了他们的Linker Flags

我希望有所帮助!

答案 7 :(得分:0)

我在上传第9版之后找到了自己的解决方案。

  1. 我在网桥使用的objective-c源代码中使用了一些swift类。在构建项目时,您可以看到项目相关的左侧面板警告,并且有一行说明了swift 4的更新。
  2. 转换swift 4后,我得到更多警告,例如使用@objc将swift 3用于最新的swift 4代码。
  3. 您可以在swift课程中查看如何使用 @objc 查看此链接:The use of Swift 3 @objc inference in Swift 4 mode is deprecated?

  4. 然后我更改了未使用的个人资料。

  5. 然后我上传应用程序,它的工作原理。如果有人需要帮助,请告诉我

答案 8 :(得分:0)

我使用soffes / CommonCrypto和Carthage。删除CommonCrypto.framework对我有用,请查看此链接如何导入commoncryto框架: http://ioscake.com/importing-commoncrypto-in-a-swift-framework.html