Явно объявляйте и изолируйте зависимости

Редактировать на GitHub

В идеале, cборка проэкта никогда не зависит от неявно существующих, доступных всей системе пакетов. Приложение объявляет все свои зависимости полностью и точно с помощью манифеста декларации зависимостей. Это включает в себя конкретную версию Xcode, CocoaPods и fastlane.

Одним из преимуществ явного объявления зависимостей является то, что это упрощает настройку приложения для новых разработчиков. Новый разработчик может скопировать кодовую базу приложения на свою машину, необходимыми требованиями для которой являются только наличие среды выполнения языка и менеджера пакетов. Всё необходимое для запуска кода приложения может быть настроено с помощью определённой команды настройки

С помощью указание конкретных зависимостей, вы сможете воспроизвести билд который использовался 6 месяцев назад, зная что он соберется потому что билд будет использовать такую же версию Xcode, CocoaPods и Swift.

Поскольку разработка iOS не может быть заключена в контейнер, как это уже используется для веб-разработки, мы ограничены сторонними инструментами, пытающимися выполнить это требование, пока Apple не предоставит официальное решение. Существует стороннее коммерческое (закрытое) решение, называемое Veertu это позволяет вам создавать виртуальные среды MacOS на оборудовании Apple.

В настоящее время вы можете использовать различные сторонние инструменты для явного объявления этих зависимостей.

На основе Swift - менеджер зависимостей

Apple предоставляет отличное руководство по Swift Package Manager.

Указываем версию Xcode

Вы можете использовать .xcode-version файл в корне вашего проекта iOS, чтобы объявить точную версию Xcode, которая будет использоваться для данного приложения iOS.

Таким образом, вы можете настроить свою CI-систему для автоматической установки и использования заданной версии XCode. Чтобы переключить версию XCode (при условии, что она уже установлена), можно использовать такой инструмент, как chxcode.

Для автоматизации установки Xcode доступно стороннее решение xcode-install пока Apple не предоставит инструмент командной строки для установки Xcode.

На основе Ruby - менеджер зависимостей

Ruby использует bundler что бы указать конкретные зависимости нужные для билда, в файле под названием Gemfile:

source "https://rubygems.org"

gem "fastlane", ">= 2.96.1", "<= 3.0.0"
gem "cocoapods", "~> 1.5"

Gemfile и автоматически генерируемый Gemfile.lock должны хранится в системе контроля версий. Любая билд система может использовать команду bundle install что бы установить все нужные Ruby зависимости.

На основе JavaScript- менеджер зависимостей

Приложения написанные на JavaScript (React Native) использует package.json который содержит все нужные зависимости.

{
  ...
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "test": "jest"
  },
  "dependencies": {
    "react": "15.4.2",
    "react-native": "0.42.3",
    ...
  }
}

package.json должен хранится в системе контроля версий для воспроизводимых сборок.