没有更多细节很难给出明确的答案。有很多事情会影响应用程序的大小。让我们从基本的.
您应该检查的内容:
首先,确保您的应用程序没有使用Don't link构建。这将创建非常大的应用程序,因为您将使用 Xamarin.iOS 提供的几乎完整的 .NET 框架进行 AOT;
其次,确保您正在构建单一架构 (ARMv7)。FAT 二进制文件(例如 ARMv7 和 ARMv7s)被构建两次并且需要两倍的空间;
第三,确保您没有启用Debug构建(可以在 Release 构建中启用,它是一个复选框)。这将创建更大的二进制文件来支持调试;
第四,确保您使用的是LLVM编译器。编译需要更多时间,但会生成更好(更小)的代码;
这些初始检查很容易做到,并且是获得非常大的二进制文件的最常见原因。
要了解大小来自哪里,您需要知道应用程序是如何构建的。
Android 和 iOS 版本的主要区别在于 iOS 上不允许 JIT'ing(即时编译)(Apple 的规则)。
这意味着代码必须经过 AOT(提前编译),并且该过程会创建更大的可执行文件(因为 IL 比本地代码更紧凑);
如果您的代码是泛型繁重的,那么最终的二进制文件可能会变得非常大,因为它需要本地编译每个泛型可能性(许多情况可以共享,但值类型不能)。
你可以做些什么来减小尺寸:
- 首先尝试减少托管代码的大小。最简单的方法是在每个程序集上启用链接器,即在您的项目选项中链接所有程序集。
许多人认为链接他们自己的代码不值得——因为他们知道在运行时会需要它(因此链接器无法删除它),否则他们就不会编写该代码。
这是对的一半。链接器可能无法删除您的大部分应用程序代码,但如果您使用的是第 3 方程序集,则它们不太可能 100% 被使用。链接器可以删除该额外代码(也可以从 SDK 中删除为支持该不需要的代码而保留的所有代码)。您拥有的共享代码越多,链接器可以为您提供的帮助就越多。
更少的 IL 代码意味着更快的 AOT 时间,这意味着更快的构建和更小的最终二进制文件(包括可执行文件大小)。
注意:有很多文档和博客文章介绍了如何控制链接器以跳过某些程序集、某些类型或方法被处理/删除。
- 第二次尝试减少你的原生大小。如果您正在构建本机库,请再次查看它们,因为它们将静态(非动态)链接到您的最终二进制文件(iOS 应用程序的另一个规则)。其中一些可能不值得(在功能方面)在您的最终二进制文件中占据重要地位(并且可能有更轻的替代品)。