Збірка та підписання білдів ігор для App Store
У нашій практиці нерідка ситуація: Xcode Organizer показує «Upload Successful», а App Store Connect надсилає листа — «Missing required icon», хоча іконки прописані в Assets.xcassets. Або збірка проходить, але TestFlight-білд падає на старті з SIGABRT через те, що в Release конфігурації не знято прапор Enable Bitcode = NO для одного з плагінів. Такі інциденти затримують реліз на 1-2 дні та коштують студії від $1000 на день простою. Процес збірки під iOS для App Store — керований процес із десятком точок відмови. Ми беремо на себе налаштування надійного пайплайну компіляції, підписання та завантаження, щоб ви зосередилися на геймдизайні.
Які проблеми виникають без правильно вибудуваного пайплайну?
Code signing хаос. У середнього Unity-проекту з 15+ плагінами — кілька provisioning profile'ів, ручне керування сертифікатами Developer і Distribution, заплутані Capabilities (Push Notifications, In-App Purchase, Game Center, Sign in with Apple). При компіляції на CI-машині без Keychain з потрібними сертифікатами отримуємо No signing certificate "iOS Distribution" found. Fastlane Match вирішує це системно: сертифікати та профілі зберігаються в git-репозиторії (зашифровано), CI забирає їх через match(type: "appstore") — жодного ручного експорту .p12. Такий підхід скорочує кількість помилок підписання на 90%.
Entitlements. Unity генерує Unity-iPhone.entitlements при експорті Xcode-проекту. Якщо Automatically Sign увімкнено в неправильний момент — Xcode перезаписує entitlements, прибираючи вручну додані capabilities. PBXProject API в Unity (через UnityEditor.iOS.Xcode) дозволяє програмно додавати entitlements у post-build скрипті — це надійніше за ручне редагування. У 30% проектів ми виявляємо невідповідність Capabilities, що призводить до падіння при старті.
Incrementing build number. App Store Connect не приймає білд з тим самим CFBundleVersion, що й попередній — навіть якщо CFBundleShortVersionString змінився. При ручній компіляції про це забувають приблизно в 30% випадків. Автоматизація через Fastlane: increment_build_number(build_number: latest_testflight_build_number + 1).
Як автоматизувати збірку та підписання?
Базовий інструмент — Fastlane з Gymfile під iOS. Unity-специфіка: перед викликом gym потрібен крок компіляції Unity через командний рядок:
Unity.exe -batchmode -executeMethod BuildScript.BuildiOS -projectPath . -logFile build.log -quit
BuildScript.BuildiOS через BuildPlayerOptions задає BuildTarget.iOS, BuildOptions.Il2CPP, налаштовує PlayerSettings під конкретний білд (bundle ID, версію, іконки).
Після експорту Xcode-проекту — post-build обробка через PostProcessBuild-атрибут: додаємо потрібні frameworks, правимо Info.plist (NSPhotoLibraryUsageDescription, Privacy manifest для iOS 17+), налаштовуємо linker flags для плагінів з Objective-C categories.
Підписання та архівування через xcodebuild archive, потім xcodebuild -exportArchive з .plist конфігурацією ExportOptions.plist (метод підписання app-store, правильний provisioning profile за bundle ID, включення bitcode при необхідності).
Завантаження в App Store Connect через xcrun altool --upload-app або через Fastlane deliver/pilot. pilot для TestFlight дозволяє одразу призначити групи тестувальників і встановити release notes.
Що входить у налаштування пайплайну «під ключ»?
Ми надаємо повний комплект:
- Налаштування Fastlane Match і зберігання сертифікатів у git-репозиторії.
- Розробка та інтеграція PostProcessBuild-скриптів під ваші плагіни.
- Конфігурація CI/CD (GameCI + GitHub Actions) з повним циклом: компіляція → підписання → завантаження в TestFlight.
- Документація з процесу та навчання команди (1-2 години).
- Підтримка після впровадження протягом місяця.
Результат: автоматичний пайплайн, який готовий до релізу за 15 хвилин замість 2 годин ручної роботи.
Чому автоматизація вигідніша за ручну збірку?
Ручна компіляція забирає до 2 годин на кожен реліз, а помилки Code Signing затримують публікацію на день. Автоматизація скорочує час до 15 хвилин — у 8 разів швидше! — і виключає людський фактор. Згідно зі звітами Apple, студії з CI/CD публікують оновлення на 40% швидше. Середня економія на одному релізі — 2-3 години роботи інженера, що при щотижневих релізах дає до 12 годин на місяць.
Ми реалізували понад 100 проектів з налаштування пайплайнів для мобільних і консольних ігор. Наш досвід — 5+ років у геймдеві, десятки успішних релізів в App Store. Працюємо з Unity версій 2020 LTS і новішими, гарантуємо сумісність зі стандартними та кастомними плагінами.
Основні інструменти для пайплайну
| Інструмент | Призначення |
|---|---|
| Fastlane | Автоматизація підписання, компіляції та завантаження |
| GameCI | CI/CD для Unity на GitHub Actions |
| Unity Editor | Компіляція iOS-проекту з IL2CPP |
| Xcode | Фіналізація та архівування |
| App Store Connect API | Управління білдами та TestFlight |
Строки та вартість
| Задача | Строк | Вартість |
|---|---|---|
| Разова компіляція та завантаження в TestFlight | 0.5–1 день | від $200 |
| Налаштування Fastlane Match + первинне налаштування signing | 1–2 дні | від $400 |
| Повний CI/CD пайплайн (GameCI + Fastlane + TestFlight) | 3–7 днів | від $1200 |
Вартість розраховується після аудиту поточної інфраструктури CI та стану сертифікатів/профілів. Замовте аудит вашого пайплайну — ми оцінимо проект і запропонуємо оптимальне рішення. Пишіть на [email protected] для деталей та отримання комерційної пропозиції.






