我正在 iTunes 上上传我的 iOS 应用程序。我正在使用 MonoTouch 编译 iOS 版 LibGdx 游戏。在 Android 中几乎不到 7-8mb。但是当我上传到 iTunes AppStore 时,它的大小就变成了 78 mb。我不知道为什么?请告诉我。
我也收到了来自 Apple 的此错误。
亲爱的开发者,
我们发现您最近交付的“熊猫快跑:赛车”存在一个或多个问题。要处理您的交货,必须纠正以下问题:
可执行文件大小无效 - 72037504 字节的可执行文件大小超过了允许的最大大小 60 MB。
很难给一个definite回答没有更多细节。有一个lot可能影响应用程序大小的因素。让我们从basic.
您应该检查什么:
首先,确保您的应用程序是not正在构建不要链接。这将创建非常大的应用程序,因为您将进行 AOT'ingnearlyXamarin.iOS 提供的完整 .NET 框架;
其次,确保您正在构建单一架构 (ARMv7)。 FAT 二进制文件(例如 ARMv7 和 ARMv7s)构建两次,需要两倍的空间;
第三,确保您尚未启用Debug构建(可以在发布构建中执行此操作,它是一个复选框)。这将创建更大的二进制文件以支持调试;
第四,确保您正在使用LLVM编译器。编译需要更多时间,但会生成更好(且更小)的代码;
这些初步检查非常容易完成,并且是最常见的获得非常大的二进制文件的原因。
要了解大小从何而来,您需要了解应用程序的构建方式。
The mainAndroid 和 iOS 版本之间的区别在于 iOS 上不允许 JIT'ing(即时编译)(Apple 的规则)。
这意味着代码必须经过 AOT(提前编译),并且该过程会创建更大的可执行文件(因为 IL 比本机代码更紧凑);
如果您的代码是泛型的,那么最终的二进制文件可能会变得相当大,因为它将需要本机编译每个泛型的可能性(许多情况可以共享,但值类型不能)。
您可以采取哪些措施来减小尺寸:
- 首先尝试减少你的managed代码大小。执行此操作的简单方法是在每个程序集上启用链接器,即链接所有程序集在您的项目选项中。
许多人认为不值得链接自己的代码 - 因为他们知道在运行时需要它(因此链接器无法删除它),否则他们就不会编写该代码。
这话对了一半。链接器might无法删除大部分应用程序代码but如果您使用第 3 方程序集,它们可能不会 100% 被使用。链接器可以删除该额外的代码(并且还可以从 SDK 中删除为支持该不需要的代码而保留的所有代码)。越多shared您拥有的代码越多,链接器可以为您提供的帮助就越多。
更少的 IL 代码意味着更快的 AOT 时间,这意味着更快的构建and较小的最终二进制文件(包括可执行文件大小)。
注意:有很多文档和博客文章介绍了如何控制链接器跳过某些程序集、某些类型或方法来处理/删除。
- 第二次尝试减少你的native尺寸。如果您正在构建本机库,请再次查看它们,因为它们将是静态地(不是动态地)链接到最终的二进制文件(iOS 应用程序的另一条规则)。其中一些可能不值得(功能方面)在最终二进制文件中的权重(并且可能有lighter备择方案)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)