Автоматизируем сборку iOS приложений с помощью Fastlane / Хабр

Что это?

Fastlane  -  это инструмент для автоматизации процессов сборки и выкладки мобильных iOS и Android приложений, которая включает в себя также генерирование скриншотов, запуск Unit/UI тестов, отправка сообщений в Slack, подключение к Crashlytics и многие другие полезные вещи, которые упрощают жизнь.

Fastfile

Папка fastlane содержит в себе Fastfile и Appfile. В Appfile мы будем прописывать необходимые для сборки и публикации значения: Bundle IDs, App ID, Team ID и другие. В Fastfile мы будем описывать наши скрипты. После первоначальной установки он выглядит так:

Автоматизируем выгрузку на testflight

Начнем с задания понятного имени нашему lane’у. Переименуем custom_lane в testflight_lane. Теперь понятно, что результатом выполнения этого скрипта будет загруженная свежая сборка в TestFlight.

default_platform(:ios)

platform :ios do
  desc "Builds, achieves and uploads ipa to TestFlight"
  lane :testflight_lane do
    # Actions
  end
end

Билд – прочие аксессуары

Выгрузка на testflight

Для загрузки ipa в TestFlight будем использовать Pilot:

Автоматизируем сборку iOS приложений с помощью Fastlane / Хабр

С помощью Pilot можно:

Мы будем использовать основную его функцию: отправка сборок в Apple Store Connect.

Добавим в testflight_lane вызов upload_to_testflight с параметрами skip_submission (будем использовать только для загрузки ipa файла) и skip_waiting_for_build_processing (не дожидаемся окончания processing’a):

default_platform(:ios)

platform :ios do
  desc "Builds, achieves and uploads ipa to TestFlight"
  lane :testflight_lane do
      cert
      sigh
      increment_build_number
      gym
      upload_to_testflight(
           skip_submission: true,
           skip_waiting_for_build_processing: true
      )
  end
end

Добавляем в проект

В корневой директории проекта запускаем:

$ sudo fastlane init

Fastlane предложит нам варианты предустановленных скриптов в зависимости от того, что мы хотим:

Мы выберем 4 вариант, т.к. будем прописывать все необходимые команды под свою ситуацию:

Готово! Папка fastlane и файл gemfile успешно установлена к нам в проект.

Как это работает

Для начала выясним, что делает fastlane: основные его команды и как мы описываем то, что нужно сделать.

Какой профит?

На первоначальную настройку базовых команд для автоматизации выкладки приложения, например, для публикации в App Store или на TestFlight, уйдет не более двух часов, однако в будущем это сэкономит уйму времени, т.к. весь процесс будет запускаться одним вызовом из командной строки.

ВНИМАНИЕ: Для выполнения всех шагов необходима подписка Apple Developer, так как доступ в App Store Connect отсутствует для бесплатных аккаунтов.

Команды (actions)

В fastlane входит много полезных команд, упрощающих жизнь разработчику:

Про сертификаты:  Тендеры АО "КМК "ТЭМПО". Закупки, поставки на торговой площадке B2B-Center

Конфигурируем appfile

Для того, чтобы каждый раз при запуске скрипта не вводить bundle приложения и Apple ID, выпишем их в Appfile:

Настройка клиента

Запускаем ранее скаченный установщик

openvpn-install-2.3.8-I001-x86_64

, выбор компонентов оставляем по умолчанию, путь сохраняется прежний.

После успешной установки переходим в каталог “C:Program FilesOpenVPNconfig” и создаем файл конфигурации клиента “test.ovpn” со следующим содержимым:

Настройка сервера


Для начала качаем дистрибутив с

. Запускаем установщик openvpn-install-2.3.8-I001-x86_64. В компонентах включаем следующее:

Указываем путь установки (Все дальнейшие действия будут ориентироваться на данный путь указанный в примере):

В процессе установке потребуется установить виртуальный сетевой адаптер, соглашаемся с установкой.

После успешной установки переходим в каталог “C:Programm FilesOpenVPN” где создаем директорию “SSL” (каталог может называться как угодно, в последующих настройках будет использоваться именно этот каталог), в данном каталоге будут располагаться сертификаты сервера, алгоритмы шифрования и проверка подлинности клиента.

Переходим в каталог “C:Programm FilesOpenVPNeasy-rsa”, открываем с помощью notepad или notepad (более правильный вариант) “vars.bat” (скрипт, содержащий в себе параметры ответов для создания и генерации клиентских/серверных сертификатов и последующих настроек сервера).

В самом низу файла есть следующие параметры, которые нужно настроить под себя:

set KEY_COUNTRY=RUset KEY_PROVINCE=MOset KEY_CITY=MOSCOWset KEY_ORG=OpenVPNset KEY_EMAIL=local@mos.localset KEY_CN=serverset KEY_NAME=serverset KEY_OU=OUset PKCS11_MODULE_PATH=changeme rem Параметр по умолчаниюset PKCS11_PIN=1234 rem Параметр по умолчанию

Сохраняем.

В этом же каталоге “C:Programm FilesOpenVPNeasy-rsa”, есть конфигурационный файл “openssl-1.0.0.cnf”, открываем его с помощью notepad или notepad (более правильный вариант) и изменяем настройку, отвечающую за срок жизни сертификатов, по умолчанию 365 дней, продлим срок жизни до 3650 дней.

default_days = 3650 # how long to certify for

Сохраняем.

Далее будем генерировать следующее:

ca.crt — Собственный доверенный сертификат (Certificate Authority — далее CA) для подписи клиентских сертификатов и для их проверки при авторизации клиента.dh1024.pem — ключ Диффи Хельмана позволяющий двум и более сторонам получить общий секретный ключserver.crt — сертификат сервераserver.key — ключ сервераta.key — дополнительный ключ для tls-аутентификации (повышение безопасности соединения), сервер и каждый клиент должны иметь копию этого ключа

Открываем командную строку и переходим в каталог “C:Program FilesOpenVPNeasy-rsa”

cd C:Program FilesOpenVPNeasy-rsa

Вводим команду “vars” нажимаем Enter (инициируем работу со скриптами, в случае закрытия командной строки, команду “vars” придется вводить заного)

Вводим команду “clean-all” (Очищаем каталог “C:Program FilesOpenVPNeasy-rsakeys” c последующим созданием файла“index.txt” (база клиентов, она же database) и “serial” (ключ))

Не закрывая командную строку, проверяем содержимое каталога “ C:Program FilesOpenVPNeasy-rsakeys”, должны создаться файлы “index.txt и serial”.

Вводим команду “openvpn –genkey –secret %KEY_DIR%ta.key”

Не закрывая командную строку, проверяем содержимое каталога “ C:Program FilesOpenVPNeasy-rsakeys”, должен создаться файл “ta.key”.

Вводим команду “build-dh” — генерация ключа Диффи Хельмана.

Про сертификаты:  Классический массаж обучение в Брянске - Школа массажа Панфилова

Не закрывая командную строку, проверяем содержимое каталога “ C:Program FilesOpenVPNeasy-rsakeys”, должен создаться файл “dh1024.pem”.

Вводим команду “build-ca” — генерация ключа центра сертификации (CA)На все вопросы отвечаем по умолчанию нажатием клавиши Enter, эти параметры мы прописали в “vars.bat”

Не закрывая командную строку, проверяем содержимое каталога “ C:Program FilesOpenVPNeasy-rsakeys”, должны создаться файлы “ca.crt и ca.key”.

Вводим команду “build-key-server server” — генерация сертификата сервера.На вопросы Country Name, State Name, Locality Name и т.д. отвечаем по умолчанию нажатием клавиши Enter до самого конца, эти параметры мы прописали в “vars.bat”, далее будет предложено создание сертификата сроком на 3650 дней (данный параметр мы указывали в openssl-1.0.0.cnf) нажимаем “Y”, будет предложено записать сертификат сервера в базу, нажимаем “Y”.

Не закрывая командную строку, проверяем содержимое каталога “ C:Program FilesOpenVPNeasy-rsakeys”, должены создаться файлы “server.crt, server.key, server.csr”.

Вводим команду “build-key revokecrt” — команда для создания пользовательского сертификата, но в данном случае мы создаем произвольный сертификат “revokecrt” для последующей генерации файла “crl.pem”, который отвечает за проверку и последующий отзыв сертификатов.

На вопросы Country Name, State Name, Locality Name и т.д. отвечаем по умолчанию нажатием клавиши Enter до вопросов Common Name и Name, на эти вопросы нужно отвечать согласно названию создаваемого сертификата пользователя, в нашем случае это произвольный сертификат “revokecrt” на оставшиеся вопросы нажимаем Enter, далее будет предложено создание сертификата сроком на 3650 дней (данный параметр мы указывали в openssl-1.0.0.cnf) нажимаем “Y”, будет предложено записать сертификат сервера в базу, нажимаем “Y”.

Не закрывая командную строку, проверяем содержимое каталога “ C:Program FilesOpenVPNeasy-rsakeys”, должны создаться файлы “revokecrt.crt, revokecrt.key, revokecrt.csr”

Вводим команду “revoke-full revokecrt” – команда отвечает за отзыв сертификата и последующего создания файла “crl.pem”

Не закрывая командную строку, проверяем содержимое каталога “ C:Program FilesOpenVPNeasy-rsakeys”, должен создаться файл “crl.pem”

Перед тем, как продолжим

Если в shell профайле locale не UTF-8, то будут возникать проблемы со сборкой и загрузкой билдов. Заходим в файл вашего shell profile (~/.bashrc, ~/.bash_profile, ~/.profile или ~/.zshrc) и добавляем следующие строчки:

export LC_ALL=en_US.UTF-8 
export LANG=en_US.UTF-8

Теперь все готово к написанию непосредственных шагов автоматизации сборки.

Сборка приложения

Добавим команду increment_build_number для увеличения номера билда. Если у вас главный .xcodeproj файл лежит не в корневой папке, то указываем для него путь в параметре xcodeproj:

default_platform(:ios)

platform :ios do
  desc "Builds, achieves and uploads ipa to TestFlight"
  lane :testflight_lane do
      cert
      sigh
      increment_build_number

      # Если главный .xcodeproj не в корневой директории проекта, то:
      #
      # increment_build_number(
      #   xcodeproj: "./path/to/MyApp.xcodeproj" 
      # )
  end
end

Для работы увеличения номера билда, необходимо зайти в Build Settings/Versioning и выставить Versioning System в Apple Generic и Current Project Version в 1:

Про сертификаты:  Рулонная гидроизоляция Рубитэкс от Оргкровля купить по цене 3562 руб. за рулон 10 кв. м.

Автоматизируем сборку iOS приложений с помощью Fastlane / Хабр

Добавим команду gym, которая собирает ipa файл нашего приложения:

Автоматизируем сборку iOS приложений с помощью Fastlane / Хабр

Среди параметров можно указать, куда будет положен ipa (output_directory), имя ipa (output_name), scheme (scheme), делать ли Clean (clean) и некоторые другие. Мы ничего не будем указывать в параметрах  —  fastlane выставит параметры по-умолчанию, соберет и подпишет ipa, но опять же: при желании и необходимости всё можно указать подробно:

default_platform(:ios)

platform :ios do
  desc "Builds, achieves and uploads ipa to TestFlight"
  lane :testflight_lane do
      cert
      sigh
      increment_build_number
      gym
      # С заданием конкретных параметров:
      #
      # gym(
      #  workspace: "TheHatGame.xcworkspace",
      #  scheme: "TheHatGame",
      #  configuration: "Release",
      #  clean: true,
      #  output_directory: "./build",
      #  output_name: "TheHatGame.ipa",
      #  codesigning_identity: "iPhone Distribution: Evgeny Shishko"
      # )
  end
end

Сертификаты и provision profiles

Добавим команды cert и sigh для установки сертификатов и provision profiles соответственно:(Внимание: если вашего приложения нет в App Store Connect, то необходимо добавить команду produce с параметром app_name)

default_platform(:ios)

platform :ios do
  desc "Builds, achieves and uploads ipa to TestFlight"
  lane :testflight_lane do
      # Если приложение не создавалось в App Store Connect: 
      # produce (
      #     app_name: "MyAppName"
      # )

      cert
      sigh
  end
end

Запустим наш скрипт с помощью команды $ fastlane testflight_lane 

При запуске Fastlane попросит у нас ввести пароль от аккаунта, вводим его. Потребуется это только один раз  -  fastlane его запомнит и при следующих запусках вводить ничего не потребуется.Вот так выглядит вывод, когда fastlane успешно завершает выполнение скрипта:

Автоматизируем сборку iOS приложений с помощью Fastlane / Хабр

Теперь сертификат и provision profiles скачены и установлены. Осталось проставить во вкладе General нужного таргета:

Автоматизируем сборку iOS приложений с помощью Fastlane / Хабр

Устанавливаем сам fastlane

Для начала установим/обновим до последней версии Xcode Command Tools: 

$ xcode-select --install

Устанавливаем gem fastlane:

$ sudo gem install fastlane -NV 
# или через brew
$ brew cask install fastlane

Запускаем итоговый скрипт

Сохраняем наши изменения и запускаем из консоли:

$ fastlane testflight_lane

На этапе отправки в testflight в консоли потребуется ввести app-specific пароль (который требуется для авторизации в Application Loader). Найти его можно в личном кабинете Apple ID, сгенерировав его по нажатию на “Generate Password”:

Автоматизируем сборку iOS приложений с помощью Fastlane / Хабр

После ввода пароля свежая сборка будет успешно загружена в TestFlight и выполнение fastlane на этом закончится:

Автоматизируем сборку iOS приложений с помощью Fastlane / Хабр

Статус новой версии можно посмотреть в App Store Connect:

Автоматизируем сборку iOS приложений с помощью Fastlane / Хабр

Заключение

На этом всё! Хотел бы обратить внимание, что в данной статье мы в самом общем случае попробовали возможности fastlane. В связи c этим прикрепляю опрос: будут ли интересны вам, хабровчане, посты про подробное использование упомянутых и других полезных команд в fastlane и продвинутых фишек в настройке скриптов?

Приложение с представленной настройкой fastlane можно найти здесь.

Оцените статью
Мой сертификат
Добавить комментарий