将应用程序上传到Mac Store时,最终的API分析太大


107

我打算将我的第一个Mac应用程序上传到Apple Store

并修复了图标,类别的所有验证错误...

但是之后,我通过了警告并通过了验证:

The resulting API analysis file is too large. We were unable to validate your API usage prior to delivery. This is just an informational message.

并且我的上传被拒绝,原因是:“无效的二进制文件”
有人遇到过这种情况吗?


更新:此警告不是拒绝的原因,可能是应用程序归档的问题。我成功发布了我的应用程序以进行存储。

因此,我们可以放心地忽略它。


1
你能解决这个问题吗?我有同样的问题,我不知道该怎么办!
nosmirck 2014年

1
也收到了这个。我无法在任何地方找到准确解释其含义的资源?
Andrew Davis

5
我刚刚将很小的运输应用程序从Swift 1.2升级到了Swift 2,并收到此错误。没有其他功能。实际上,这在他们的分析工具中确实是一个缺点。(这是针对Xcode 7中的iOS应用,不是Mac商店。)
Ray Fix

2
与Ray Fix相同,不使用任何私有API,只是将代码从Objective-C升级到Swift
Jerome Diaz

1
与上面相同,没有私有API,仅使用Xcode 7而已。
DevC

Answers:


65

Apple禁止在iOS应用中使用私有或未记录的API。您对与私有或未公开API方法同名的方法进行的任何调用都将被标记为私有API使用,即使所调用的方法是您自己定义的。

App Loader进行初始扫描,检查方法名称,实例变量访问,甚至使用私有方法名称使用@selector。App Loader并不总是做得很好,并且您拥有的源文件越多,就越有可能警告您它生成的API分析文件“太大”。

幸运的是,尽管有警告,您仍然可以提交您的申请。Apple会在内部对其进行检查,如果由于名称重叠而使某些内容退回去,您将不得不再次进行审核。

埃里卡·萨顿(Erika Sadun)试图制作一个名为API Kit的应用程序来为您进行扫描,但她似乎放弃了自己的工作,并从网站上删除了该应用程序的任何痕迹。

Chimp Studios创建了App Scanner来执行相同的操作,但是自2011年以来就没有进行过更新。不幸的是,对于大型项目-其中包括带有CocoaPods大量豆荚的项目-目前(2014年)没有任何好的选择除了主动命名事物,以免与私有API方法和实例名称冲突之外,还可以通过其他方式解决此问题。

您可以主动了解Apple的 可可命名约定并尝试进行预测。这将减少将来的头痛。但是,在Apple引入诸如名称空间之类的内容之前,我们可能会不时继续遇到这个问题。

“无效的二进制”错误可能有多种原因,但与App Loader创建的API分析文档完全无关。

您应该知道,即使进行了扫描,仍然有许多方法可以避免使用私有/未记录的API的禁止。:)


您是说这个“太大”的错误是纯粹贴错标签的错误吗?是否总是表明某种无效的API使用情况?您是如何建立此连接的?
克里斯·普林斯

我意识到问题是关于Mac App Store,但对于iOS App Store,此答案并不完全正确。当我尝试使用Xcode 7 GM验证我的应用程序时,我刚刚收到此警告,但是当我实际上使用Xcode 7 GM将其上传到ITC时,没有任何问题。
克里斯·普林斯

有什么暗示……暗示着您的最后一句话?
goodguys_activate 2015年

感谢您提供非常有用的答案。您知道要在哪里找到API分析文件。我想消除我应用程序中的所有警告
user462990

因此,如果iTunes Connects显示内部版本已上传,这意味着尽管出现此错误消息,它确实通过了吗?我现在要做的就是等待他们的批准?
杰伊(Jay)

10

在我的第一个Swift项目中首次遇到此问题后,现在看来,此问题的最常见答案是:

如果您使用Swift 2.x和XCode 7,则会收到此错误。只是忽略它。

[更新:XCode 7.3和iOS 9.3推出似乎已解决了此问题!]


我在Xcode 7.3中使用的是Swift 2.1,这似乎是事实。希望他们会尽快解决。
戴(Dai)

jap,即时通讯还使用Swift 2.1.1和xCode 7.2.1获取此信息...我会让你知道它是否通过。
HitEmUp

1

这是解决它们的一种简单方法...将选择器名称反向存储,例如“ dlroWolleH”,然后在调用该方法之前将字符串反向。

如果Apple明智地做到这一点,那么您可以对它们进行加密。


48
或者,您可以遵循审阅指南,而不使用私有API。
Maciej Swic

这不会阻止任何事情。他们将能够检测是否从方法本身调用了该方法。不是来自您使用的选择器名称。
昵称

2
@nicktones,有可能直到将来某个时候才调用私有方法,例如在您的应用程序获得批准之后
powerj1984 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.