Version: 6000.3
语言: 中文
Unity 如何构建 iOS 应用程序
iOS 入门

Unity Xcode 项目的结构

当您为 iOS 平台构建 Unity 项目时,Unity 会创建一个包含 Xcode 项目的文件夹。您需要先构建并签署此项目,然后才能将其部署到设备上或在 App Store 上分发。

注意:您可以使用 Xcode.PBXProject 修改生成的 Xcode 项目。

每个生成的 Unity iOS Xcode 项目都有以下结构和目标:

Unity iOS Xcode 项目结构
Unity iOS Xcode 项目结构

Xcode 项目包括 Xcode 项目文件xcodeproj,以及仅出现在 Xcode 项目导航器中的框架链接。除了默认文件夹之外,您还可以创建自定义文件夹来添加自定义文件。

项目目标

  • Unity-iPhone:运行 UnityFramework 的精简启动器部件。它包括MainApp文件夹和应用程序表示数据,例如启动屏幕、.xib文件、图标、数据和Info.plist文件。 Unity-iPhone 目标对 UnityFramework 目标具有单一依赖项。
  • UnityFramework:生成UnityFramework.framework捆。 它包括 Unity 运行时Classes,UnityFrameworkLibraries文件夹以及依赖框架。UnityFramework文件夹中包含隐私清单文件 (PrivacyInfo.xcprivacy),这是 Unity 运行时的合并隐私清单文件,Unity插件在 Unity 外部创建的一组代码,用于在 Unity 中创建功能。可以在 Unity 中使用两种插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和本机插件(特定于平台的本机代码库)。更多信息
    请参阅术语表
    、包和您的项目。
  • 游戏汇编:转换为 C++ 代码的 C# 代码的容器。为了构建它,Xcode 使用 Unity 包含在每个生成的 Xcode 项目中的 IL2CPP 工具。构建生成:
    • libGameAssembly.a:一个静态库,包含项目的所有托管代码,交叉编译为 C++,并为 iOS 构建。
    • il2cpp.a:包含IL2CPP Unity 开发的脚本后端,在为某些平台构建项目时,可以将其用作 Mono 的替代方案。更多信息
      请参阅术语表
      运行时代码来支持托管代码。

注意:使用 PBXProject.GetUnityFrameworkTargetGuid() 获取 UnityFramework 目标 GUID,使用 PBXProject.GetUnityMainTargetGuid() 获取 Unity-iPhone 目标 GUID。

Classes 文件夹

Classes文件夹包含集成 Unity 运行时和 Objective-C 的代码。Unity 将应用程序的入口点存储在main.mmUnityAppController.mm/h文件。您可以创建自己的AppDelegate来自UnityAppController,或者,如果您的任何插件包括AppController.h,您可以包括UnityAppController.h相反。 如果您的Plugins/iOS文件夹包括AppController.mm/h,您可以合并和重命名它们。

InternalProfiler.hfile 定义了一个编译器,有条件地启用内部探查器帮助您优化游戏的窗口。它显示在游戏的各个区域花费了多少时间。例如,它可以报告渲染、动画或游戏逻辑所花费的时间百分比。更多信息
请参阅术语表
. 此文件夹中的代码不会经常更改,您可以在此处放置自定义类。如果您选择 Append 模式,Xcode 会在构建之间保留对此文件夹的更改。但是,此函数不支持多个构建目标,并且需要Libraries文件夹。

Unity 的内部分析器快速且不引人注目,并提供以下基本信息:

  • 哪个子系统占用了大部分帧时间。
  • .NET 堆大小。
  • GC 事件计数和持续时间。

数据文件夹

此文件夹包含应用程序的序列化资产和 .NET 程序集 (.dll.dat文件)作为完整代码或元数据,具体取决于代码剥离设置。 这machine.configfile 设置各种 .NET 服务,例如安全性和 WebRequest。Xcode 在每次生成时刷新此文件夹的内容。您不应对其进行任何更改。

默认情况下,Data文件夹的 Target MembershipUnity-iPhone 目标,Unity 运行时会在mainBundle. 要更改 Unity 运行时查找Data文件夹,调用setDataBundleId: "com.my.product"在调用其中一个运行函数之前,在 UnityFramework 实例上。例如,如果想要Data与 UnityFramework 调用一起使用,使用setDataBundleId: "com.unity3d.framework"并将目标成员身份设置为 UnityFramework

Data 文件夹,其中 Target Membership 设置为 UnityFramework。
Data 文件夹,其中 Target Membership 设置为 UnityFramework。

注意:仅当Data文件夹是应用程序目标的一部分,而不是UnityFramework目标。

Libraries 文件夹

Libraries文件夹包含libil2cpp.a对于 IL2CPP。这libiPhone-lib.afile 是 Unity 运行时静态库,并且RegisterMonoModules.cpp将 Unity 本机代码与 .NET 绑定。Xcode 在每次构建时都会刷新此文件夹的内容。您不应该对其进行任何更改。

图形文件

图标和初始屏幕 (.png文件)位于Unity-iPhone文件夹。Unity 会自动管理这些文件。启动屏幕,其 XML 接口构建器 (.xib文件),情节提要文件存储在项目的根文件夹中。你可以在 播放器设置(Player Settings) 窗口(菜单:编辑(Edit) > 项目设置(Project Settings) > 播放器设置(Player Settings) )中配置这些文件。确保您创建的自定义启动映像符合 Apple 的人机界面指南

属性列表 (.plist) 文件

您可以管理Info.plistUnity-iPhone 目标中的文件(通过mainBundle)从 Unity 的“播放器设置”窗口(菜单:编辑>项目设置>播放器设置>其他设置>标识)。Unity 在构建播放器时更新此文件,而不是替换它。除非需要,否则不要对其进行更改。

/UnityFramework/Info.plist文件,通过bundleWithIdentifier:@"com.unity3d.framework",是UnityFramework.您可以将值保留在此文件中,而不是Info.plist文件的mainBundle.这确保在以下情况下仍然可以获得这些值UnityFramework移动到另一个应用程序中,例如,当使用 Unity 作为库时。

其他资源

Unity 如何构建 iOS 应用程序
iOS 入门