无效的可执行文件大小 - 来自iTunes Connect

时间:2013-03-09 10:28:46

标签: ios xamarin.ios itunesconnect

我正在iTunes上上传我的iOS应用程序。我正在使用MonoTouch来编译我的iOS LibGdx游戏。在Android中它几乎不是7-8mb。但是当我在iTunes AppStore上传时它会达到78 MB。我不知道为什么?请让我知道。

我也从Apple收到此错误。

亲爱的开发人员,

我们发现您最近交付的“Run Panda Run:Racing”存在一个或多个问题。要处理您的交付,必须纠正以下问题:

无效的可执行文件大小 - 72037504字节的可执行文件大小超过了允许的最大大小60 MB。

3 个答案:

答案 0 :(得分:12)

如果没有更多细节,很难给出明确的答案。有很多很多可能会影响应用程序的大小。让我们从基本开始。

您应该检查的内容:

  • 首先,确保您的应用使用不链接进行构建。这将创建非常大的应用程序,因为您将完全几乎 Xamarin.iOS提供的完整.NET框架;

  • 其次,确保您构建单一架构(ARMv7)。 FAT二进制文件(例如ARMv7和ARMv7s)构建两次,需要两倍的空间;

  • 第三,确保您没有启用 Debug 构建(在Release版本中可以这样做,它是一个复选框)。这将创建更大的二进制文件以支持调试;

  • 第四,确保您使用的是 LLVM 编译器。编译需要更多时间,但它会产生更好(和更小)的代码;

这些初步检查非常容易,并且是获得非常大的二进制文件的最常见原因。

要了解大小的来源,您需要了解应用程序的构建方式。

  • Android和iOS版本之间的主要差异是iOS上不允许JIT(即时编译)(Apple的规则)。

    < / LI>
  • 这意味着代码必须是AOT(提前编译),并且该过程会创建更大的可执行文件(因为IL比本机代码更紧凑);

  • 如果您的代码是通用的,那么最终的二进制文件可能会变得非常大,因为它需要本地编译每个通用的可能性(许多情况可以共享,但值类型不能)。

    < / LI>

您可以采取哪些措施来缩小尺寸:

  • 首先尝试减少托管代码大小。执行此操作的简单方法是在每个程序集上启用链接器,即在项目选项中链接所有程序集

许多人认为不值得链接他们自己的代码 - 因为他们知道在运行时需要它(因此链接器无法删除它),否则他们就不会编写该代码。

这是正确的一半。链接器可能无法删除大多数应用程序代码如果您使用的是第三方程序集,则不太可能100%使用它们。链接器可以删除该额外代码(并且还从SDK中删除保留以支持不需要的代码的所有代码)。您拥有的共享代码越多,链接器就可以为您提供更多帮助。

较少的IL代码意味着更快的AOT时间,这意味着更快的构建更小的最终binaires(包括可执行文件大小)。

注意:有很多文档和博客条目可以控制链接器如何跳过某些程序集,某些类型或方法被处理/删除。

  • 第二次尝试减少原生大小。如果您正在构建本机库,那么请再次查看它们,因为它们将静态(非动态)链接到您的最终二进制文件(iOS应用程序的另一个规则)。其中一些可能不值得(功能明智)他们在最终二进制文件中的重量(并且可能有更轻的替代品)。

答案 1 :(得分:0)

不应该启用调试,因为它会使构建不必要的大。

enter image description here

有关更多信息,请参见:https://docs.microsoft.com/en-us/xamarin/ios/deploy-test/app-distribution/app-store-distribution/publishing-to-the-app-store?tabs=windows

答案 2 :(得分:0)

我遇到了同样的问题,但就我而言,我在info.plist中将最低操作系统版本设置为8,从而导致了较大的.ipa文件。我将其更改为版本10,并能够通过大小要求。甚至10点有点慷慨