Запуск Unity-проекта на iOS-устройстве — критически важный этап для любого разработчика мобильных игр. Даже если ваш проект идеально работает в редакторе, сборка под iPhone или iPad может столкнуться с десятками нюансов: от ошибок сертификатов до проблем с архитектурой процессора. Эта статья покрывает все актуальные шаги для Unity 2022–2026 и iOS 15–17, включая настройку окружения, экспорт проекта, работу с Xcode и тестирование на реальном устройстве.
Многие начинающие разработчики теряют часы на поиск решений типичных ошибок вроде ITMS-90087 (неверная архитектура) или Provisioning profile not found. Мы разберём не только базовые шаги, но и скрытые настройки Unity, которые влияют на производительность игры на Apple Silicon (M1/M2), а также дадим чек-лист для диагностики самых распространённых проблем. Если вы никогда раньше не собирали проект под iOS — эта инструкция станет вашим гидом от нуля до работающего .ipa-файла.
1. Подготовка окружения: что нужно установить до сборки
Прежде чем приступать к сборке, убедитесь, что ваш компьютер соответствует минимальным требованиям Apple для разработки под iOS. Вот обязательный набор инструментов:
- 🖥️ Mac с macOS 12 Monterey или новее (для поддержки последних версий Xcode и iOS SDK). Виртуальные машины на Windows не подходят!
- 📱 iPhone/iPad с iOS 15+ (для тестирования). Устройство должно быть разблокировано для разработки (см. раздел про
UDID). - 🛠️ Xcode 14.3+ (скачать бесплатно в Mac App Store). Включает iOS SDK, симулятор и инструменты командной строки.
- 🔑 Apple Developer Account (99$/год для публикации в App Store, бесплатно для тестирования на 3 устройствах).
- 🎮 Unity 2022.3 LTS или 2023.2+ (рекомендуемые версии с поддержкой Metal API и Apple Silicon).
Особое внимание уделите версии Unity: например, в Unity 2021.3 есть баги с ARKit на iOS 16, а в Unity 2023.1 добавлена поддержка Dynamic Islands для iPhone 14 Pro. Проверьте официальные заметки о релизах, если используете специфические функции.
Критическая ошибка новичков: многие забывают обновить Xcode Command Line Tools после установки новой версии Xcode. Это приводит к ошибкам сборки вроде clang: error: no such file or directory. Чтобы обновить инструменты, выполните в Terminal:
xcode-select --install
sudo xcodebuild -reset
2. Настройка Unity-проекта для iOS
Переключите платформу сборки в Unity на iOS через меню File → Build Settings. Здесь есть несколько ключевых параметров, которые часто упускают:
- 📱 Target Device: выберите
iPhone + iPad, если ваша игра универсальна, илиiPhone onlyдля экономии места (важно для игр с тяжелой графикой). - 🔧 Architecture:
ARM64— обязательный параметр для iOS 11+. Отметьте такжеARMv7, если поддерживаете старые устройства (например, iPhone 5s). - 🎨 Graphics APIs: оставьте только
Metal(устаревшийOpenGLESне поддерживается в новых версиях iOS). - 🔒 Signing Team ID: укажите ваш Apple Developer Team ID (найти можно в Apple Developer Account →
Membership).
☑️ Проверка настроек Unity перед сборкой
Обратите внимание на Bundle Identifier (например, com.yourcompany.gamename). Он должен быть уникальным и совпадать с тем, что указан в Apple Developer Account. Если вы тестируете на реальном устройстве, добавьте его UDID в профиль провижининга (Provisioning Profile). Узнать UDID можно через iTunes или специальные сервисы вроде UDID.io.
⚠️ Внимание: Если вы используете плагины (например, Firebase или Unity IAP), убедитесь, что они совместимы с выбранной версией Unity и iOS. Например, Unity IAP 4.0+ требует iOS 12+ и может конфликтовать с StoreKit 2 в iOS 16.
3. Экспорт проекта из Unity в Xcode
После настройки параметров нажмите Build в Build Settings и выберите папку для экспорта (например, /Builds/iOS). Unity сгенерирует .xcodeproj-файл, который нужно открыть в Xcode. Этот процесс может занять несколько минут — не прерывайте его!
Вот что происходит "под капотом" во время экспорта:
- Unity компилирует скрипты в
.dll-файлы (для IL2CPP или Mono). - Генерируются нативные библиотеки для iOS (например,
libil2cpp.aдля IL2CPP). - Создаются ресурсы для Asset Catalog (иконки, сплайш-скрины).
- Формируется структура проекта Xcode с настройками сборки.
Если экспорт заканчивается ошибкой, проверьте:
- 📁 Достаточно ли места на диске (требуется минимум 5–10 ГБ для временных файлов).
- 🔄 Права доступа к папке (иногда macOS блокирует запись в
/Applications). - 🐞 Логи ошибок в
Console(в Unity включитеOpen Editor Logв менюConsole).
4. Работа в Xcode: сертификаты, провижининг и сборка
Откройте сгенерированный .xcodeproj в Xcode. Здесь вам предстоит настроить:
- Signing & Capabilities:
- Выберите ваш Apple Developer Account в поле
Team. - Убедитесь, что
Bundle Identifierсовпадает с тем, что в Unity. - Если используете Game Center или In-App Purchases, добавьте соответствующие
Capabilities.
- Выберите ваш Apple Developer Account в поле
- Проверьте, что
Enable Bitcodeвыключен (Unity не поддерживает Bitcode). - Для IL2CPP установите
C++ Standard Library = libc++ (LLVM). - Если целевое устройство — iPhone 15 Pro, включите
ARM64_32для поддержки Dynamic Island.
Самая частая ошибка на этом этапе — Provisioning profile not found. Решается так:
- Перейдите в Apple Developer Account →
Certificates, Identifiers & Profiles. - Создайте новый App ID с вашим
Bundle Identifier. - Сгенерируйте Development Provisioning Profile и скачайте его.
- В Xcode нажмите
Download All ProfilesвPreferences → Accounts. - 🎮 Целевая частота кадров: Для большинства игр достаточно
60 FPS, но на iPhone 15 Pro можно тестировать120 FPS(требуетProMotionподдержки). - 🖼️ Разрешение текстур: Используйте
ASTCкомпрессию для текстур (поддерживается всеми устройствами на Apple A9 и новее). - 🔋 Thermal Throttling: На iPhone с Apple A12 и старше ограничьте нагрузку на CPU/GPU, чтобы избежать перегрева (используйте
Application.targetFrameRate = 30для тяжелых сцен). - 📡 Metal API: Отключите
Multithreaded RenderingвPlayer Settings, если наблюдаете артефакты графики.
После настройки подключите iPhone к Mac через USB-C (или Lightning для старых моделей) и выберите его в качестве целевого устройства в Xcode. Нажмите Build (или ⌘ + B). Если всё настроено правильно, проект скомпилируется и установится на устройство.
Что делать если Xcode не видит подключённый iPhone?
1. Проверьте кабель — используйте оригинальный от Apple (дешёвые кабели часто не передают данные).
2. Разблокируйте телефон и подтвердите доверие компьютеру ("Trust This Computer").
3. Перезапустите usbmuxd в Terminal:
sudo killall -9 usbmuxd
4. Обновите iTunes (да, даже если вы им не пользуетесь — он содержит драйвера для устройств).
5. Решение типичных ошибок сборки
Даже опытные разработчики сталкиваются с ошибками при первой сборке. Вот таблица самых распространённых проблем и их решений:
| Ошибка | Причина | Решение |
|---|---|---|
ITMS-90087: Unsupported Architectures |
Включена архитектура i386 или x86_64 для симулятора. |
В Unity отключите Simulator Architectures в Player Settings → Other Settings. |
Library not found for -lGoogleMobileAds |
Отсутствует фреймворк Google Mobile Ads. | Скачайте последнюю версию GoogleMobileAds и добавьте в Frameworks в Xcode. |
Failed to load 'Data/Managed/Metadata/global-metadata.dat' |
Проблема с IL2CPP при сборке для Apple Silicon. | Установите Rosetta 2 для Unity Editor или обновите до Unity 2023.1+. |
Signing for "Unity-iPhone" requires a development team |
Не выбран Team ID в Xcode. |
Перейдите в Signing & Capabilities и выберите ваш Apple Developer Team. |
Thread 1: EXC_BAD_ACCESS (code=1) |
Проблема с памятью в нативном коде (часто после обновления Unity). | Отключите Burst Compiler и пересоберите проект. |
Если вы видите ошибку, которой нет в таблице, проверьте логи в Xcode (View → Debug Area → Activate Console) и поищите решение на официальном форуме Unity или Apple Developer Forums. Часто помогает очистка кэша Unity и Xcode:
# Очистка кэша Unity (в Terminal)
rm -rf ~/Library/Caches/Unity/
rm -rf ~/Library/Logs/Unity/
Очистка derived data Xcode
rm -rf ~/Library/Developer/Xcode/DerivedData/
6. Оптимизация производительности для iOS-устройств
Запуск игры на iPhone — это только половина дела. Чтобы игра работала плавно, нужно оптимизировать её под железо Apple. Вот ключевые рекомендации:
Для тестирования производительности используйте Xcode Instruments:
- Подключите устройство и запустите игру через Xcode.
- Выберите
Product → Profile(или нажмите⌘ + I). - Запустите Time Profiler для анализа нагрузки на CPU или Metal System Trace для GPU.
Особое внимание уделите устройствам с Apple Silicon (M1/M2): они эмулируют ARM64 через Rosetta 2, что может искажать результаты тестов. Для точных замеров используйте реальные iPhone с чипами A15 Bionic и новее.
7. Тестирование на реальном устройстве vs симулятор
Многие разработчики тестируют игры только в Xcode Simulator, но это грубая ошибка. Симулятор не учитывает:
- 🔋 Реальное потребление батареи (в симуляторе всегда "100%").
- 📶 Работу сенсоров (Gyroscope, Accelerometer).
- 🎵 Производительность Audio (в симуляторе нет аппаратного ускорения звука).
- 📡 Сетевые запросы (симулятор использует Wi-Fi Mac, а не мобильную сеть).
Минимальный набор устройств для тестирования:
| Устройство | Чип | Зачем нужно |
|---|---|---|
| iPhone SE (2nd gen) | Apple A13 | Тестирование на слабом железе (минимальные требования). |
| iPhone 12 | Apple A14 | Средний сегмент (60% пользователей). |
| iPhone 15 Pro | Apple A17 Pro | Максимальная производительность и поддержка новых фич (Dynamic Island, Ray Tracing). |
| iPad Pro (M2) | Apple M2 | Тестирование масштабирования интерфейса и многозадачности. |
Если у вас нет всех этих устройств, используйте TestFlight для удалённого тестирования. Это бесплатный сервис от Apple, который позволяет раздавать билды до 10 000 тестеров. Чтобы загрузить билд в TestFlight:
- В Xcode выберите
Generic iOS Deviceкак цель. - Нажмите
Product → Archive. - В открывшемся окне нажмите
Distribute App → TestFlight. - Заполните метаданные (скриншоты, описание) и загрузите.
8. Публикация в App Store: финальные шаги
Когда игра готова, остаётся опубликовать её в App Store. Вот краткий чек-лист:
- Подготовка метаданных:
- Создайте запись в App Store Connect.
- Загрузите скриншоты для всех поддерживаемых разрешений (от iPhone SE до iPhone 15 Pro Max).
- Напишите описание на всех целевых языках (используйте Google Translate осторожно — модераторы Apple проверяют качество переводов).
- Сборка для релиза:
- В Unity переключитесь на
Releaseсборку вBuild Settings. - В Xcode установите
Build Configuration = Release. - Отключите отладочные логи (
Debug.Log) с помощью директивы#if UNITY_EDITOR.
- В Unity переключитесь на
- Архивируйте проект в Xcode (
Product → Archive). - Выберите
Distribute App → App Store Connect. - Заполните информацию о версии и отправьте на ревью.
Срок модерации в App Store — от 24 часов до 3 дней. Частые причины отклонения:
- 📄 Отсутствие политики конфиденциальности (обязательна даже для бесплатных игр).
- 🎮 Баги, которые проявляются только на устройствах Apple (например, падения при переключении на фоновый режим).
- 💰 Неправильная настройка In-App Purchases (цены должны совпадать с указанными в App Store Connect).
После одобрения вы можете выпустить игру вручную или настроить автоматический релиз. Не забывайте обновлять сборку каждые 2–3 месяца — Apple требует поддержки последних версий iOS для актуальности в магазине.
FAQ: Частые вопросы по сборке Unity под iOS
❓ Почему Unity не видит Xcode при сборке?
Это происходит, если путь к Xcode не настроен в командной строке. Исправляется командой:
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
После этого перезапустите Unity.
❓ Можно ли собирать iOS-проекты на Windows?
Нет, Apple требует macOS для разработки под iOS. Альтернативы:
- Использовать Mac mini в аренде (сервисы вроде MacinCloud).
- Установить macOS на VMware или Parallels (неофициально, могут быть проблемы с лицензией).
- Купить подержанный MacBook (например, MacBook Pro 2017 вполне подходит для сборки).
❓ Как уменьшить размер .ipa-файла?
Оптимизируйте сборку так:
- Включите
CompressionвPlayer Settings → Publishing Settings. - Используйте
Addressablesдля загрузки тяжелых ассетов по требованию. - Отключите ненужные модули в
Player Settings → Other Settings → Scripting Define Symbols. - Сожмите текстуры в
ASTC(вместоPNGилиJPG).
Целевой размер для казуальной игры — до 150 МБ, для AAA-проектов — до 1 ГБ (но учитывайте ограничения App Store на загрузку по мобильной сети).
❓ Почему игра лагает на iPhone, но нормально работает в Unity Editor?
Возможные причины:
- Отсутствует оптимизация под Metal: В редакторе по умолчанию используется
OpenGLCore, а на iOS —Metal. Проверьте шейдеры на совместимость. - Слишком много
GameObject: На мобильных устройствах рекомендуется не более 500 активных объектов на сцену. - Не оптимизированные скрипты: Используйте
Object PoolingвместоInstantiate/Destroy. - Перегрев процессора: Ограничьте FPS до 30 или 60 в
Application.targetFrameRate.
Для диагностики используйте Xcode Instruments (раздел Time Profiler).
❓ Как тестировать In-App Purchases без публикации в App Store?
Apple предоставляет Sandbox-режим для тестирования покупок:
- Создайте In-App Purchase в App Store Connect (статус
Ready to Submit). - В Xcode используйте TestFlight или сборку через
Development Provisioning Profile. - Создайте тестового пользователя в App Store Connect (
Users and Access → Sandbox Testers). - Войдите под тестовым аккаунтом на устройстве и протестируйте покупки (они не списывают реальные деньги).
Обратите внимание: Sandbox-покупки обрабатываются медленнее, чем реальные (это нормально).