IV. Развертывания
Автоматизирывать деплой, чтобы вы могли выпускать его с любой машины.
Редактировать на GitHubКак описанно в факторе Зависимости, репозиторий кода должен включать все зависимости, необходимые для создания, тестирования и развертывания iOS приложения.
Как только ваше приложение выполнит это требование, вы сможете выпускать новые обновления приложений с любого компьютера на базе MacOS.
В идеальном мире, чтобы выпустить обновление приложения, нужно:
- создать совершенно пустой временный контейнер
- автоматически установить все зависимости (Xcode и CocoaPods)
- запустить скрипт деплоя (fastlane)
К сожалению, из-за того, что Xcode должен работать на MacOS, мы не можем использовать этот подход. Запуск macOS в виртуальной среде сопряжен с техническими и юридическими проблемами. Существует стороннее коммерческое (закрытый исходный код) решение, называемое Veertu это позволяет создавать виртуальные среды MacOS на оборудовании Apple.
В последние годы одноразовые контейнеры приобрели популярность по ряду причин:
- полностью воспроизводимые сборки с нулевыми зависимостями от операционной системы
- работать на любом компьютере (на локальном компьютере или на любом сервере в облаке)
- чистая сборка только с самыми необходимыми зависимостями
Прямо сейчас лучший подход, который мы, разработчики iOS, можем использовать:
- Автоматизировать установку Xcode с помощью xcode-install
- Использовать .xcode-version file указать точный релиз Xcode
- Определите все зависимости в конфигурационных файлах (смотрите Зависимости фактор)
- Автоматизировать весь процесс развертывания, используя fastlane
- Автоматизировать подпись приложения (codesigning.guide)
- Релизить часто, в идеале по недельному графику
Многие компании используют концепцию Release trains
: расписание, в котором выходит новая версия вашего приложения. Весь код, который был объединен с вашей основной веткой (master
или release
) в тот момент, когда релизный поезд «уходит» будет отправлен в App Store. Этот подход реализуется большинством крупных приложений для iOS.