Настройка CI/CD для iOS-приложения через Xcode Cloud
Xcode Cloud — Apple-первый CI/CD. Он работает непосредственно внутри Xcode IDE и App Store Connect, не требует отдельного сервера или yaml-конфигов. Для команды, которая делает только iOS, это самый малонастраиваемый, но зато наименее конфликтующий с экосистемой Apple вариант.
Что Xcode Cloud делает хорошо — и где его пределы
Provisioning profile и сертификаты Xcode Cloud управляет сам через App Store Connect. Это главное преимущество: нет проблем с code signing failed на CI, нет fastlane match с отдельным Git-репо сертификатов. Apple просто имеет доступ к вашему аккаунту разработчика и сам берёт нужный профиль.
Ограничения:
- Только Apple-экосистема: Swift, Objective-C, Xcode. Никаких шаров Flutter/React Native без нативного Xcode-таргета
- Минимальная кастомизация окружения: нельзя установить произвольный
brew-пакет безci_post_clone.shскрипта - Нет поддержки self-hosted runner — только облако Apple
- Ограничение: 25 часов бесплатных вычислений в месяц (для paid developer account)
Структура workflow в Xcode Cloud
Workflow настраивается в Xcode: Product → Xcode Cloud → Manage Workflows. Основные параметры:
Start Condition — триггер: push в ветку, PR, тег, или вручную. Для main-ветки — автоматически при каждом merge. Для feature-веток — только вручную или по PR.
Environment — версия Xcode (выбирается из списка доступных), дополнительные переменные окружения (API keys и т.п.). 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
Скрипты должны быть executable (chmod +x). Если скрипт завершается с ненулевым кодом — весь workflow падает.
TestFlight-дистрибуция и ревью
Xcode Cloud напрямую интегрирован с TestFlight. После успешной архивации — сборка автоматически появляется в TestFlight. Internal tester-ы (члены команды в App Store Connect) получают доступ сразу. External tester-ы (до 10 000) — после прохождения Beta App Review (обычно 1–3 дня для первой сборки).
Важно: каждое изменение в NSUsageDescription ключах Info.plist может спровоцировать повторный Beta App Review.
Мониторинг билдов
Статус workflow виден прямо в Xcode (Product → Xcode Cloud → Builds) и в App Store Connect. Email-уведомления при сбоях — настраиваются там же. Logs скачиваются из UI, анализ конкретного шага — фильтрация по Build, Test, Archive фазам.
Сроки
Настройка Xcode Cloud workflow с Build + Test + TestFlight distribution: 3–5 дней. Настройка кастомных скриптов, multiple workflows (feature/main/release), Slack-уведомления: 1–1.5 недели. Стоимость рассчитывается индивидуально.







