为 iOS 平台构建 Unity 项目时,Unity 将创建一个包含 Xcode 项目的文件夹。在将项目部署到设备或分发到 App Store 之前,您需要构建并签署该项目。
注意:您可以使用 Xcode.PBXProject 来修改生成的 Xcode 项目。
每个生成的 Unity iOS Xcode 项目都具有以下结构和目标:
Xcode 项目包括 Xcode 项目文件 xcodeproj 以及仅在 Xcode 项目导航器中显示的框架链接。除了默认文件夹外,您还可以创建自定义文件夹以添加自定义文件。
MainApp 文件夹和应用程序显示数据,例如启动屏幕、.xib 文件、图标、数据和 Info.plist 文件。Unity-iPhone 目标对 UnityFramework 目标具有单一依赖关系。UnityFramework.framework 捆绑包的目标。它包括 Unity 运行时、Classes、UnityFramework 和 Libraries 文件夹以及相关的框架。UnityFramework 文件夹包括隐私清单文件 (PrivacyInfo.xcprivacy),这是 Unity 运行时、Unity 插件、程序包和项目的合并隐私清单文件。libGameAssembly.a:一个静态库,其中包含项目的所有托管代码,交叉编译为 C++,并构建用于 iOS。il2cpp.a:一个静态库,其中包含 IL2CPP 运行时代码,用于支持托管代码。注意:使用 PBXProject.GetUnityFrameworkTargetGuid() 获取 UnityFramework 目标 GUID,使用 PBXProject.GetUnityMainTargetGuid() 获取 Unity-iPhone 目标 GUID。
Classes 文件夹包含用于集成 Unity 运行时和 Objective-C 的代码。Unity 将应用程序的入口点存储在此文件夹内的 main.mm 和 UnityAppController.mm/h 文件中。您可以创建自己的派生自 UnityAppController 的AppDelegate,或者如果您的任何插件包含 AppController.h,也可以改为包含 UnityAppController.h。如果 Plugins/iOS 文件夹包含 AppController.mm/h,则可以对其进行合并与重命名。
此外,InternalProfiler.h 文件定义了一个条件编译器来启用内部性能分析器。此文件夹中的代码不会经常更改,您可以在此处放置自定义类。如果您选择附加 (Append) 模式,Xcode 会在不同构建中保留对此文件夹的更改。但是,此功能不支持多个构建目标,并且需要固定结构的 Libraries 文件夹。
Unity 的内部分析器运行快速且不干扰,并提供以下基本信息:
此文件夹包含应用程序的序列化资源以及 .NET 程序集(.dll 或 .dat 文件),其形式为完整代码或元数据(取决于代码剥离设置)。machine.config 文件可以设置各种 .NET 服务(例如安全性和 WebRequest)。Xcode 在每次构建时都会刷新此文件夹中的内容。您不应对其进行任何更改。
默认情况下,Data 文件夹的目标成员 (Target Membership) 是 Unity-iPhone 目标,Unity 运行时会在 mainBundle 中搜索该目标。要更改 Unity 运行时查找 Data 文件夹的默认捆绑包,请在调用其中一个运行函数之前调用 UnityFramework 实例上的 setDataBundleId: "com.my.product"。例如,如果要将 Data 与 UnityFramework 调用放在一起,请使用 setDataBundleId: "com.unity3d.framework" 并将目标成员 (Target Membership) 设置为 UnityFramework。
注意:仅当 Data 文件夹是应用程序目标的一部分而不是 UnityFramework 目标的一部分时,才支持按需加载资源 (On-Demand Resources)。
Libraries 文件夹包含 IL2CPP 的 libil2cpp.a。libiPhone-lib.a 文件是 Unity 运行时静态库,RegisterMonoModules.cpp 则将 Unity 原生代码与 .NET 绑定。Xcode 在每次构建时都会刷新此文件夹中的内容。您不应对其进行任何更改。
图标和启动屏幕(.png 文件)位于 Unity-iPhone 文件夹中的资源目录中。Unity 自动管理这些文件。启动屏幕、它们的 XML 接口构建器(.xib 文件)和 Storyboard 文件存储在项目的根文件夹中。您可以在播放器设置 (Player Settings) 窗口中配置这些文件(菜单:编辑 (Edit) > 项目设置 (Project Settings) > 播放器设置 (Player Settings))。确保您创建的自定义启动图像符合 Apple 的人机界面指南。
您可以从 Unity 的播放器设置 (Player Settings) 窗口管理 Unity-iPhone 目标内的 Info.plist 文件(通过 mainBundle 访问)(菜单:编辑 (Edit) > 项目设置 (Project Settings) > 播放器设置 (Player Settings) > 其他设置 (Other Settings) > 标识 (Identification))。Unity 在构建播放器时会更新此文件,而不是进行替换。除非有所需要,否则不要对其进行更改。
通过 bundleWithIdentifier:@"com.unity3d.framework" 访问的 /UnityFramework/Info.plist 文件是 UnityFramework 的一部分。您可以将值保留在此文件中,而不是保留在 mainBundle 的 Info.plist 文件中。这样可以确保在将 UnityFramework 移动到另一个应用程序中时(例如,将 Unity 用作库时),仍然可以获取这些值。