Налаштування CI/CD для iOS-додатків через Xcode Cloud
Xcode Cloud — це перша CI/CD від Apple. Він працює безпосередньо в IDE Xcode та App Store Connect, не вимагаючи окремого сервера чи yaml-конфігурацій. Для команд, що розробляють тільки iOS, це найменш конфліктна, хоча й найменш настроюється в екосистемі Apple.
Що Xcode Cloud робить добре—та його обмеження
Xcode Cloud сам керує provisioning profiles та сертифікатами через App Store Connect. Це головна перевага: немає проблем із кодуванням підписей у CI, немає окремого Git-репозиторія для сертифікатів fastlane match. Apple просто має доступ до вашого облікового запису розробника та сам бере потрібний профіль.
Обмеження:
- Тільки екосистема Apple: Swift, Objective-C, Xcode. Без Flutter/React Native без нативного Xcode-таргета
- Мінімальна настройка оточення: не можна встановлювати довільні brew-пакети без ci_post_clone.sh скрипту
- Немає підтримки self-hosted раннера—тільки хмара Apple
- Обмеження: 25 годин безплатних обчислень на місяць (для платного облікового запису розробника)
Структура workflow у Xcode Cloud
Workflow настроюється в Xcode: Product → Xcode Cloud → Manage Workflows. Основні параметри:
Start Condition — тригер: push у гілку, PR, тег, або вручну. Для main-гілки—автоматично при кожному merge. Для feature-гілок—тільки вручну або по PR.
Environment — версія Xcode (вибирається зі списку доступних), додаткові змінні оточення (API-ключі тощо). Secret-змінні додаються в App Store Connect → Xcode Cloud → Secrets, не в репозиторій.
Actions — ланцюг кроків:
- Build — компіляція з вибраною схемою та конфігурацією
- Test — запуск XCTest/XCUITest на симуляторі або реальному пристрої
- Archive — створення .xcarchive для дистрибуції
- Distribution — TestFlight internal/external або App Store
Post-Actions — повідомлення в Slack, email.
Користувацькі скрипти
Xcode Cloud дозволяє додавати bash-скрипти у спеціальні директорії:
ci_scripts/
ci_post_clone.sh # після клонування репозиторія
ci_pre_xcodebuild.sh # перед сборкою
ci_post_xcodebuild.sh # після сборки
Приклад ci_post_clone.sh для встановлення залежностей через mint:
#!/bin/sh
set -e
# Встановлюємо mint якщо його немає
if ! command -v mint &> /dev/null; then
brew install mint
fi
mint bootstrap
Скрипти повинні бути виконуваними (chmod +x). Ненульовий код виходу зупиняє весь workflow.
Дистрибуція TestFlight та огляд
Xcode Cloud напряму інтегрований з TestFlight. Після успішної архівації—сборки автоматично з'являються в TestFlight. Внутрішні тестувальники (члени команди в App Store Connect) отримують доступ одразу. Зовнішні тестувальники (до 10 000)—після Beta App Review (зазвичай 1–3 дні для першої сборки).
Важливо: зміни в ключах NSUsageDescription у Info.plist можуть спровокувати повторний Beta App Review.
Моніторинг сборок
Статус workflow видно прямо в Xcode (Product → Xcode Cloud → Builds) та в App Store Connect. Email-повідомлення при збоях—настроюються там же. Логи завантажуються з UI, аналіз конкретного кроку—фільтрація за фазами Build, Test, Archive.
Часова шкала
Налаштування Xcode Cloud workflow з Build + Test + TestFlight дистрибуцією: 3–5 днів. Настройка користувацьких скриптів, кілька workflows (feature/main/release), Slack-повідомлення: 1–1.5 тижня. Стоимість рассчитывается индивидуально.







