Version: 2021.2
使用内置性能分析器来衡量性能
优化物理性能

优化构建的 iOS 播放器的大小

减小播放器大小的两种主要方法是在 Xcode 中创建合理的 Release build 以及在 Unity 中更改 Stripping Level

为分发进行构建

通常应使用 Xcode 命令 Product > Archive 进行最终发行版构建。使用此命令可确保使用发布配置进行构建剥离所有调试符号。 发出此命令后,Xcode 将切换到 Organizer 窗口 Archives 选项卡。如需了解关于如何计算应用程序大小的准则以及其他关于减小大小的技巧,请参阅 Apple 的技术问答:减小我的应用程序的大小 (Reducing the size of my App)

注意:我们建议您在设置无线下载限制(目前为 150MB)时留出少量的误差余地。

iOS 剥离级别

使用以下剥离方式激活 Mono 脚本后端构建的大小优化:

  1. Strip assemblies 级别:分析脚本的字节码,以便可从 DLL 中删除未在脚本中引用的类和方法,从而在 AOT 编译阶段中将它们排除。此优化可以减小主二进制文件和附带 DLL 的大小,只要不使用反射就是安全的。

  2. Strip ByteCode 级别:所有 .NET DLL(存储在 Data 文件夹中)都会被剥离为仅剩下元数据。之所以可以这样做,是因为所有代码都已在 AOT 阶段预编译并链接到主二进制文件中。

  3. Use micro mscorlib 级别:使用特殊的较小版本的 mscorlib。某些组件将从此库中删除,例如 Security、Reflection.Emit、Remoting、非 Gregorian 日历等。此外,内部组件之间的相互依赖关系将最小化。此优化可以减小主二进制文件和 mscorlib.dll 大小,但与某些 System 和 System.Xml 程序集类不兼容,因此请谨慎使用。

这些级别是累积的,因此级别 3 优化隐含地包括级别 2 和 1,而级别 2 优化包括级别 1。

请注意,Micro mscorlib 是核心库的大幅度精简版本。只保留 Unity 中 Mono 运行时所需的项。使用 micro mscorlib 的最佳做法是不要使用应用程序不需要的任何类或其他 .NET 功能。GUID 就是一个可以省略的典型示例;很容易将它们替换为定制的伪 GUID,这样做可以带来更好的性能和更小的应用程序大小。

使用 IL2CPP 进行剥离

请参阅有关使用 IL2CPP 进行托管字节码剥离的文档以了解更多信息

注意:有时候很难确定哪些类被错误剥离(虽然应用程序需要这些类)。通常,通过在模拟器上运行剥离后的应用程序并检查 Xcode 控制台是否有错误消息,可以获得有用的信息。

关于使分发大小尽可能小的简单核对表

  1. 使资源最小化:启用纹理压缩并尽可能降低其分辨率。此外,最大限度减小未压缩声音的数量。此处有一些减小文件大小的额外技巧。
  2. 在 Mono 上将 iOS Stripping Level 设置为 Use micro mscorlib,或在 IL2CPP 上启用 Strip Engine Code
  3. 将脚本调用优化 (Script Call Optimization) 级别设置为 Fast but no exceptions
  4. 不要在代码中使用 System.dll 或 System.Xml.dll 中的任何内容。这些库与 micro mscorlib 兼容。
  5. 删除不必要的代码依赖项。
  6. 将 API 兼容性级别 (API Compatibility Level) 设置为 .Net 2.0 subset。请注意,.Net 2.0 子集与其他库的兼容性有限。
  7. 避免将通用容器与值类型(包括结构)结合使用。

使用 Unity 制作的应用程序最小为多大?

如果关闭所有大小优化,则空项目在 App Store 中将小于 22 MB。进行代码剥离后,只包含主摄像机的空场景可以在 App Store 中减少到小于 12 MB(经过压缩并附加 DRM)。

为什么我的应用程序在发布到 App Store 后会增大?

发布应用程序时,Apple App Store 服务首先加密二进制文件,然后通过 zip 对其进行压缩。加密会增加代码段的“随机性”,从而使压缩效果变差。请查看上面的“为分发进行构建”一章,了解如何在提交前估计 App Store 大小。


  • 2018–06–14 页面已修订

  • 2017–14–06 - 更新了“使用 IL2CPP 进行剥离”部分

使用内置性能分析器来衡量性能
优化物理性能