Автоматизирывать деплой, чтобы вы могли выпускать его с любой машины.

Редактировать на 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.