Continuous Integration для iOS приложений

На наших проектах мы для сборки, как правило, используем Travis. Для backend’ов это отличное решение. Большое community, куча ответов на SO, прогон правильно написанных тестов занимает от нескольких секунд, если зависимостей мало или они подтягиваются быстро, до нескольких минут.

Совсем другое дело, когда нужно собрать iOS приложение. Сборка не очень большого проекта занимает полчаса. Полчаса, Карл! На моем не самом современном макбуке он собирается за пару минут. Параллельной сборки target’ов, например, под симулятор, для прогона тестов, и под девайс, а также сборки нескольких приложений — нет.

Если я работаю в feature-branch’е над одним из target’ов в репозитории, при каждом коммите все равно собираются все. Последовательно. Если у меня четыре приложения, то это будет час! Поэтому приходится вырубать сборку приложений в .travis, а затем не забывать включать обратно.

Загрузка сертификатов для подписи iOS-приложений–танцы с бубном над скриптами. На настройку всего этого дела уходит несколько часов, учитывая сколько занимает каждая итерация.

В общем, Travis’ом я слегка недоволен. При этом ценник он держит достаточно конский. В поисках лучшей жизни я набрел на этот ответ на Quora.

Greenhouse CI разочаровал довольно быстро. Сверстанный без любви frontend еще можно было бы простить, но не просьбу загрузить сертификат или вбить логин/пароль для доступа к GitHub. Они что там, серьезно?

А вот buddybuild прям порадовал! Ребята автоматизировали все, что можно было автоматизировать. Принцип “пусть потеет машина” реализован в полной мере. Указываешь репу в GitHub, они ее вытягивают, просят выбрать приложение и сразу собирают сборку под симулятор. Разумеется, CocoaPods работает из коробки.

Для сборки под девайс можно заюзать их one-liner, который скачивает скрипт с сайта, экспортирует нужный сертификат с приватным ключом и закидывает его в buddybuild. Но, он у меня отработал с ошибкой, поэтому я воспользовался менее безопасной опцией и вбил логин/пароль к моему аккаунту в member center. Похоже, что они лезут туда через spaceship или cupertino. На этом все. Следующая сборка будет под девайс.

Если в проекте несколько приложений, то можно указать для коммитов в какие ветки будет собираться каждое из них. К слову, сборка моего приложения занимает 10 минут против 25 на Travis’е. И приложения собираются параллельно.

Distribution реализован через свой аналог Fabric/TestFlight. Но есть офигенная фишка, которой мне сильно не хватает в Fabric. Я даже думал реализовать её самостоятельно. Когда открываешь письмо с приглашением на новом устройстве, то Fabric ждет, когда ты пересоберешь, переподпишешь и загрузишь новую сборку. Fabric стесняется попросить приватный ключ, чтобы переподписать сборку самостоятельно. А у buddybuild он есть, поэтому при добавлении нового устройства можно практически моментально скачать новую сборку. Это настолько офигительно, что поражаешься, почему мы до сих пор кипятим.

Отдельные слова благодарности стоит адресовать поддержке. Да, они еще маленькие, открылись для публичного тестирования всего несколько месяцев назад, поэтому у них в чате поддержки сидит founder. Но, во-первых, очень удобно сделан чат. А, во-вторых, на пару моих нетривиальных (хотя и не очень сложных) запросов ответили практически моментально и подсказали решение.

И да, похоже, что с ценовой политикой они еще не определились. Поэтому, пока — халява, сэр. В общем, всем, кому актуальна тема — очень рекомендую.