版本:Unity 6 (6000.0)
语言:英语
Unity 如何构建 iOS 应用程序
iOS 入门

Unity Xcode 项目结构

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

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

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

Unity iOS Xcode project structure
Unity iOS Xcode 项目结构

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

项目目标

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

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

Classes 文件夹

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

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

Unity 的内部性能分析器速度快且不显眼,并提供有关以下方面的基本信息:

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

Data 文件夹

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

默认情况下,Data 文件夹的 目标成员身份Unity-iPhone 目标,Unity 运行时在 mainBundle 中搜索它。要更改 Unity 运行时查找 Data 文件夹的默认捆绑包,请在调用任何运行函数之前,在 UnityFramework 实例上调用 setDataBundleId: "com.my.product"。例如,如果您希望 Data 与 UnityFramework 调用一起使用,请使用 setDataBundleId: "com.unity3d.framework" 并将 目标成员身份 设置为 UnityFramework

注意:仅当 Data 文件夹是应用程序目标的一部分,而不是 UnityFramework 目标的一部分时,才支持按需资源。

Libraries 文件夹

Libraries 文件夹包含用于 IL2CPP 的 libil2cpp.alibiPhone-lib.a 文件是 Unity 运行时静态库,RegisterMonoModules.cpp 将 Unity 原生代码与 .NET 绑定。Xcode 会在每次构建时刷新此文件夹的内容。您不应对此进行任何更改。

图形文件

图标和启动屏幕 (.png 文件) 位于 Unity-iPhone 文件夹中的资产目录中。Unity 会自动管理这些文件。启动屏幕、它们的 XML 界面构建器 (.xib 文件) 和故事板文件存储在项目的根文件夹中。您可以在 播放器设置 窗口 (菜单:编辑 > 项目设置 > 播放器设置) 中配置这些文件。确保您创建的自定义启动图像符合 Apple 的 人机界面指南

属性列表 (.plist) 文件

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

/UnityFramework/Info.plist 文件 (通过 bundleWithIdentifier:@"com.unity3d.framework" 访问) 是 UnityFramework 的一部分。您可以将此文件中的值保留在 mainBundleInfo.plist 文件中。这确保了即使将 UnityFramework 移动到另一个应用程序(例如,使用 Unity 作为库 时),您仍然可以获取这些值。

其他资源

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