减少播放器大小的两种主要方式是更改 Xcode 中的活动生成配置 (Active Build Configuration) 以及更改 Unity 的剥离级别 (Stripping Level)
您可以在 Xcode 活动生成配置 (Active Build Configuration) 下拉菜单中选择调试 (Debug) 和发布 (Release) 之间的一项操作。根据游戏自身的大小,选择发布 (Release) 模式生成的播放器将比调试 (Debug) 小 2-3MB。
在发布 (Release) 模式下,播放器会去掉任何的调试信息进行构建,所以如果您的游戏崩溃或有其他问题,将没有可用的、可输出的堆栈跟踪信息。这适合部署已完成的游戏,但在开发期间您可能更希望使用调试模式。
剥离机制可通过以下几种方式激活尺寸优化工作:
这些级别可以累积,因此,级别 3 优化隐式地包含了级别 2 和级别 1,级别 2 优化包含级别 1。
请注意: Micro mscorlib 是核心库的最低级版本,它只保留了 Unity Mono 运行时间必要的项目。使用 micro mscorlib 的最佳做法是不要使用应用程序不需要的任何 .NET 类或其他功能。GUID 就是一个应该省略的例子;它们可以轻松地被自定义的伪 GUID 所替代,这样做将产生更好的性能和更小的应用程序。
剥离很大程度上取决于静态代码分析,如果使用反射等动态功能,有时候将不能有效使用剥离。在这些情况下,有必要给出一些提示指出哪些类是不应该触动的。Unity 为每个工程都建立了自定义剥离文件夹黑名单。使用黑名单是创建 link.xml 文件并将它放入资源 (Assets)文件夹的一个简单方法。以下是 link.xml 文件的内容示例。标记为预留的类将不受剥离影响:-
<linker> <assembly fullname="System.Web.Services"> <type fullname="System.Web.Services.Protocols.SoapTypeStubInfo" preserve="all"/> <type fullname="System.Web.Services.Configuration.WebServicesConfigurationSectionHandler" preserve="all"/> </assembly> <assembly fullname="System"> <type fullname="System.Net.Configuration.WebRequestModuleHandler" preserve="all"/> <type fullname="System.Net.HttpRequestCreator" preserve="all"/> <type fullname="System.Net.FileWebRequestCreator" preserve="all"/> </assembly> </linker>
请注意: 有时候可能难以确定哪些类会被进行错误的剥离,而应用程序可能需要这些类。您可以在模拟器上运行剥离应用程序,检查 Xcode 控制台中的错误信息,从而获取有用的信息。
可以,如果所有大小优化被都关掉,一个空项目在 AppStore 中大小大致为 13 MB左右。这为游戏提供 了大约 7MB 的压缩资源预算。如果您拥有高级许可证(并因此可以访问剥离选项),那么只含有主相机的空场景在 AppStore 中可压缩到大约 6 MB(zipped 和 DRM 连接),这样,您就可以有大约 14 MB 的可用空间用于压缩资源。
在发布您的应用程序时,Apple 将首先加密二进制文件,然后通过 zip 压缩。大部分情况下,Apple 的 DRM 将增加约 4MB 的二进制大小。一般说来,您应该预计文件最终大小约等于所有文件(可执行文件除外)的 zip 压缩存档,再加上未压缩的可执行文件的大小。
Page last updated: 2013-06-29