Структура проекта Unity Xcode
Когда вы создаете проект Unity для платформы iOS, Unity создает папку, содержащую проект Xcode. Вы должны создать и подписать этот проект, прежде чем развернуть его на устройстве или распространить его в App Store.
Примечание: Вы можете изменить созданный проект Xcode, используя Xcode.PBXProject.
Каждый созданный Unity iOS Xcode проект имеет следующую структуру и цели:
Проект Xcode включает файл проекта Xcode xcodeprojи ссылки на фреймворки, которые появляются только в навигаторе проекта Xcode. Помимо папок по умолчанию, вы можете создавать собственные папки для добавления своих собственных файлов.
Цели Project
- Unity-iPhone: Тонкая часть запуска, которая запускает UnityFramework. Она включает папку
MainAppи данные представления приложения, такие как экраны запуска,.xibфайлы, значки, данные иInfo.plistфайлы. Цель Unity-iPhone имеет одну зависимость от цели UnityFramework. - UnityFramework: Цель, которая создает пакет
UnityFramework.framework. Он включает время выполнения Unity, папкиClasses,UnityFrameworkиLibraries, а также зависимые фреймворки. ПапкаUnityFrameworkсодержит файл манифеста конфиденциальности (PrivacyInfo.xcprivacy), сводный файл манифеста конфиденциальности для времени выполнения Unity, плагины Unity, пакеты и ваш проект. -
GameAssembly: Контейнер для вашего кода C#, переведенного в код C++. Для сборки Xcode использует инструмент IL2CPP, который Unity включает в каждый генерируемый проект Xcode. Сборка производит:
-
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 внутри этой папки. Вы можете создать свой собственный AppDelegate, полученный из UnityAppController, или, если любой из ваших плагинов включает AppController.h, вы можете включить вместо этого UnityAppController.h. Если ваша папка Plugins/iOS включает AppController.mm/h, вы можете объединить и переименовать их.
InternalProfiler.h файл задаёт условную директиву компилятора, включающую внутренний профайлер. Код в этой папке меняется нечасто, и сюда можно помещать собственные классы. Если вы выберете Режим добавления, Xcode сохраняет изменения в этой папке между сборками. Однако, эта функция не поддерживает несколько целей сборки и требует фиксированной структуры Libraries папка.
Внутренний профайлер Unity работает быстро и незаметно и выдаёт базовые сведения о:
- Какая подсистема занимает наибольшую часть времени кадра.
- Размер кучи .NET.
- GC количество и продолжительность событий.
Папки данных
Эта папка содержит серийные ассеты вашего приложения и сборки .NET (файлы.dll или .dat) как полный код или метаданные, в зависимости от настроек удаления кода. Файл machine.config устанавливает различные услуги .NET, такие как безопасность и WebRequest. Xcode обновляет содержимое этой папки при каждой сборке. Вы не должны вносить в нее никаких изменений.
По умолчанию, Data папки Целевой членский состав является Unity-iPhone целевой показатель, и Unity время выполнения ищет его в mainBundleЧтобы изменить пакет по умолчанию, где Unity время выполнения ищет Data папка, вызов setDataBundleId: "com.my.product" по вопросу UnityFramework Например, если вы хотите, чтобы в вашем приложении была доступна только одна функция, Data совместно с UnityFramework вызов, использование setDataBundleId: "com.unity3d.framework" и установить Целевой членский состав до UnityFramework.
Обратите внимание: Ресурсы по запросу поддерживаются только в том случае, если папка Data является частью цели Приложения, а не частью цели UnityFramework.
Папка библиотек
Libraries папка содержит libil2cpp.a для IL2CPP. libiPhone-lib.a файл — это статическая библиотека среды выполнения Unity, а RegisterMonoModules.cpp связывает Unity нативный код с .NET. Xcode обновляет содержимое этой папки с каждой сборкой. Вы не должны делать никаких изменений в ней.
Графические файлы
Значки и стартовые экраны ( файлы.png) находятся в каталогах ассетов в папке Unity-iPhone. Unity автоматически управляет этими файлами. Экраны запуска, их XML Interface Builders ( файлы.xib) и файлы Storyboard хранятся в корневой папке проекта. Вы можете настроить эти файлы в окне Настройки Игрока (меню: Изменить > Project Настройки > Настройки Игрока). Убедитесь, что пользовательские образы запуска, которые вы создаете, соответствуют Apple Human Interface Guidelines.
Файл списка свойств (.plist)
Файлом Info.plist в целевом объекте Unity-iPhone, доступ к которому выполняется через mainBundle, можно управлять из окна Настройки Игрока редактора Unity: Изменить > Project Настройки > Настройки Игрока > Другие настройки > Идентификация. При сборке Player Unity обновляет этот файл, а не заменяет его. Не изменяйте файл без необходимости.
Файл /UnityFramework/Info.plist, доступ к которому осуществляется через bundleWithIdentifier:@"com.unity3d.framework", является частью UnityFramework. Вы можете хранить значения в этом файле вместо файла Info.plist из mainBundle. Это гарантирует, что вы все еще сможете получить эти значения, если UnityFramework будет перемещен в другое приложение, например, при использовании Unity в качестве Библиотеки.