Экспорт проекта для iOS
Проект Xcode, пакет IPA, подпись, устройство и экспериментальный C# AOT.
Выберите результат экспорта
| Задача | Результат |
|---|---|
| Собрать и запустить игру из Xcode | Включите application/export_project_only: экспорт создаёт .xcodeproj и связанные файлы. Сборку и подпись проверяете в Xcode. |
| Получить архив и пакет через экспортёр | Выключите application/export_project_only: на macOS экспортёр после генерации вызывает xcodebuild archive, затем -exportArchive для .ipa. Это требует настроенной подписи. |
Значение application/export_project_only по умолчанию — false. Для первого запуска удобнее начать с проекта Xcode, чтобы видеть ошибки сборки и подписи раздельно. Наличие .xcodeproj не означает готовый .ipa, а готовый .ipa не означает принятие в App Store.
Что подготовить
- Mac с полной установкой Xcode, нужным iOS SDK и установленной поддержкой целевого устройства. Откройте Xcode и завершите его первоначальную настройку. Одних Command Line Tools недостаточно для iPhoneOS SDK.
- Шаблоны вашей сборки Reckfell 1.0.0: экспортёр ищет
ios.zip. Для собственных шаблонов предусмотреныcustom_template/debugиcustom_template/release. Версия, модули и .NET-вариант должны соответствовать проекту; архив редактора не заменяет архив шаблонов. - Apple Account и Team для подписи. Для тестирования на своём устройстве и распространения действуют разные условия Apple; выбор Team не даёт права на любой способ доставки. Запуск через Xcode.
- Проект, который запускается в редакторе. Для C# сначала устраните ошибки обычной сборки; затем отдельно проверьте мобильную AOT-публикацию.
Для описанного полного маршрута используйте macOS. В текущем .NET-редакторе экспорт на Apple Embedded с другого хоста отклоняется проверкой конфигурации. Вариант редактора без .NET может оставить только проект Xcode с предупреждением вместо .ipa; это не сборка приложения на Windows/Linux.
Настройте пресет iOS
- Добавьте iOS в окне экспорта проекта.
- Укажите
application/app_store_team_id: Team ID, а не отображаемое имя разработчика. Поле требуется даже при экспорте только проекта. Задайте стабильныйapplication/bundle_identifier, напримерcom.yourstudio.yourgame, соответствующий настройкам подписи. - Проверьте
application/targeted_device_family: iPhone, iPad либо оба.application/min_ios_versionпо умолчанию —15.0; итоговые требования зависят также от SDK, рендера и библиотек. Число в пресете не доказывает запуск на этой версии iOS. - Для первого запуска включите
application/export_project_only. Создайте отдельный каталог вывода вне проекта и экспортируйте под простым именем, напримерGame. Не смешивайте результат с исходным проектом и ручными файлами Xcode: повторный экспорт очищает части предыдущего результата. - Откройте
Game.xcodeproj, сохранив рядом созданные.pck, каталоги приложения и XCFramework. Не переносите один.xcodeprojбез его зависимостей.
На Mac проверьте выбранный Xcode и доступность SDK:
xcode-select -p
xcrun --sdk iphoneos --show-sdk-path
xcrun --sdk iphonesimulator --show-sdk-pathЕсли путь указывает на /Library/Developer/CommandLineTools, выберите полную установку Xcode в его настройке Command Line Tools и повторите проверку. Успешный вывод этих команд ещё не проверяет подпись, шаблоны или C#.
Запустите на устройстве
В Xcode выберите схему приложения и подключённое устройство. В Signing & Capabilities назначьте нужную Team и проверьте Bundle Identifier. Если используете автоматическую подпись Xcode, разрешите ему подготовить необходимые signing assets. Затем выполните Product > Run. При запросе устройства включите Developer Mode по инструкции Apple.
Проверьте главный уровень, сенсорный ввод, звук, паузу/возврат из фона и сохранения в user://. Для камеры и микрофона укажите осмысленные privacy/camera_usage_description и privacy/microphone_usage_description; разрешение ОС не заменяет включение нужного модуля. Для сторонних SDK проверьте их разрешения, privacy manifest и нативные зависимости отдельно.
Device и Simulator — разные платформы даже при одинаковом arm64. Нужны соответствующие варианты XCFramework. В текущих исходниках сборка iOS Simulator отключает Metal и Vulkan; для неё предусмотрен Compatibility/OpenGL-путь при наличии такого шаблона. Запуск в симуляторе не подтверждает рендер, производительность или функции реального устройства. Не считайте возможность запуска iOS-приложений на Apple silicon универсальным обходом этих требований.
C#: отдельная проверка AOT
Поддержка iOS в текущем .NET-экспортёре помечена экспериментальной. SDK включает PublishAot, PublishAotUsingRuntimePack и UseNativeAOTRuntime. Экспортный плагин публикует вариант устройства и варианты симулятора, затем формирует <assembly>_aot.xcframework. Это отличается от запуска C# в настольном редакторе.
Проверьте зависимости NuGet и расширения на AOT/trimming и поддержку iOS. Динамическую генерацию кода нельзя считать доступной как в desktop JIT. Ошибки dotnet publish, Failed to 'lipo' simulator binaries и Failed to generate xcframework разбирайте до подписи: смена Team не исправит отсутствующую библиотеку или ошибку AOT.
Режим «только проект» не пропускает генерацию C#-зависимостей. Сохраняйте необходимые publish-файлы; создание .xcodeproj не делает их необязательными.
Релиз и повторный экспорт
После проверки устройства сделайте отдельный release-экспорт с выключенным Export With Debug. Для встроенного архивирования сверяйте debug/release настройки: application/export_method_debug по умолчанию Development, application/export_method_release — App Store. Профили и identity должны соответствовать выбранному способу и Bundle Identifier. Не кладите реальные signing credentials в примеры или репозиторий.
В журнале встроенной сборки различайте ARCHIVE SUCCEEDED и EXPORT SUCCEEDED. Проверяйте фактический свежий .xcarchive/.ipa, дату результата и весь журнал: один старый файл или итоговый код процесса не доказывает успех каждой стадии. Публикация/TestFlight выполняются через отдельный процесс распространения Apple.
Изменения игровых ресурсов требуют повторного экспорта. Сохраните нужные ручные изменения Xcode отдельно: генерируемые каталоги не являются постоянным местом для исходников. Интеграция нативных плагинов описана в плагинах iOS, сборка шаблонов — в сборке для iOS.
Граница проверки: инструкция сверена с экспортёром, iOS-конфигурацией, C#-плагином и SDK Reckfell 1.0.0. На текущем Windows-хосте не выполнялись iOS-export, AOT для iOS, Xcode, подпись, установка или рендер на устройстве/симуляторе. Эти действия остаются проверками вашей сборки.