Публикуваме приложения за iOS в App Store с GitLab и fastlane

Публикуваме приложения за iOS в App Store с GitLab и fastlane

Как GitLab с fastlane събира и подписывает приложения за iOS в App Store.

Наскоро имаме пост за това как бързо да съберем и стартираме Android приложение с GitLab и fastlane. Тук ще видим как да съберем и стартираме iOS приложение и да го публикуваме в TestFlight. Вижте колко яко аз внасям промяна на iPad Pro с GitLab Web IDE, взимам събраното и получавам обновление на тестовата версия на приложението на същия iPad Pro, на който го разработих.

Тук ще вземем простичко приложение за iOS на Swift, с което записвах видео.

Няколко думи за конфигурацията на Apple Store

Нуждаем се от приложение в App Store, сертификати за разпространение и профил за инициализация, за да свържем всичко заедно.

Най-трудното тук е да настроите правата за подписване в App Store. Надявам се, че с това ще се справите сами. Ако сте начинаещ, ще посоча нужната посока, но тук няма да говорим за нюансите на управлението на сертификатите на Apple, особено, тъй като те постоянно се променят. Този пост ще помогне да се започне.

Моите приложения

Нужно е приложение в App Store Connect, за да имате ID за конфигурация .xcodebuild. Профилът и ID на приложението свързват събрания код, цени и наличност, а също така конфигурацията на TestFlight за разпространение на тестови приложения сред потребители. Не правете публично тестване, достатъчно е и частното, ако имате малка група, лесна настройка и не се нуждаете от допълнителни разрешения от Apple.

Профил за инициализация

Освен настройката на приложението, ви трябват ключове за разпространение и разработка на iOS, създадени в секцията Certificates, Identifiers & Profiles (Сертификати, идентификатори и профили) в консолата на Apple Developer. Всички тези сертификати могат да бъдат обединени в профила за инициализация.

На потребителите, които ще минават аутентификация, им е необходима възможност за създаване на сертификати, иначе на етапите cert и sigh ще видите грешка.

Други опции

Освен този прост метод, има и други начини за настройка на сертификати и профили. Така че, ако работите различно, може да се наложи преосмисляне. Най-важното е, че ще ви е нужна конфигурация .xcodebuild, която ще упоменава нужните файлове, а свързаните ключове трябва да са достъпни на компютъра за строителството за потребителя, под чие име работи раннера. За цифровото подписване използваме fastlane, и ако има проблеми или искате да научите повече, проучете техните детайли. документация за цифрови подписи.

В този пример използвам подхода cert и sigh, но за реално приложение, вероятно, ще е по-подходящо match.

Подготовка на GitLab и fastlane

Подготовка на CI Runner

След събиране на всички тези данни, преминаваме към конфигурация на GitLab runner на устройството MacOS. За съжаление, приложенията за iOS могат да се правят само в MacOS. Но всичко може да се промени, и ако очаквате развитие в тази област, — следете проекти, като xcbuild и isign, и нашата вътрешна задача gitlab-ce#57576.

Настройката на runner е много проста. Следвайте актуалните инструкции за настройка на GitLab Runner в macOS.

Забележка. Runner трябва да използва изпълняваща програма shell. Това е задължително за изграждането на iOS в macOS, за да работи директно като потребител, а не през контейнери. Ако използвате shell, изграждането и тестването се извършват от името на потребителя на runner-а, директно на хоста за изграждане. Това не е толкова безопасно, колкото контейнери, затова е добре да прегледате документацията за безопасност, за да не пропуснете нищо.

sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
cd ~
gitlab-runner install
gitlab-runner start

Ключовете на Apple трябва да бъдат настроени на този хост с достъп до ключовете, които Xcode изисква за изграждане. Най-лесният начин да тествате това е да влезете като потребител, който ще стартира изграждането, и да опитате да извършите изграждане ръчно. Ако системата поиска достъп до ключовата сводка, изберете "Винаги разрешавам", за да работи CI. Може би е добре да влезете и да наблюдавате първите няколко пайплайна, — да се уверите, че повече не искат ключовата сводка. Проблемът е, че Apple не улеснява работата с автоматичен режим, но щом го настроите, всичко ще бъде наред.

fastlane init

За да използвате fastlane в проекта, стартирайте fastlane init. Просто следвайте инструкциите за инсталиране и стартиране на fastlane, особено в раздела за Gemfile, тъй като ни е необходим бърз и предсказуем старт чрез автоматичния конвейер CI.

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

xcode-select --install
sudo gem install fastlane -NV
# В алтернатива с Homebrew
# brew cask install fastlane
fastlane init

fastlane ще поиска основна конфигурация, след което ще създаде в проекта папка fastlane с три файла:

1. fastlane/Appfile

Тук няма нищо сложно. Просто проверете, че Apple ID и ID на приложението са посочени правилно.

app_identifier("com.vontrance.flappybird") # Идентификатор пакета вашего приложения
apple_id("your-email@your-domain.com") # Ваш адрес электронной почты Apple

2. fastlane/Fastfile

Fastfile определяет шаги сборки. Из-за многих встроенных возможностей fastlane, здесь все понятно. Создаем одну задачу, которая получает сертификаты, выполняет сборку и загружает её в TestFlight. Вы можете разделить этот процесс на разные задания, если необходимо. Все эти операции (get_certificates, get_provisioning_profile, gym и upload_to_testflight) уже включены в fastlane.

Действия get_certificates и get_provisioning_profile связаны с подходом к подписанию cert и sigh. Если вы используете match или что-то еще, внесите изменения.

default_platform(:ios)

platform :ios do
  desc "Собрать приложение"
  lane :flappybuild do
    get_certificates
    get_provisioning_profile
    gym
    upload_to_testflight
  end
end

3. fastlane/Gymfile

Этот файл необязателен, но я создал его вручную, чтобы изменить каталог вывода по умолчанию и помещать выходные данные в текущую папку. Это упрощает CI. Если интересно, читайте о gym и его параметрах в документацията.

https://docs.fastlane.tools/actions/gym/

Нашият .gitlab-ci.yml

Итак, у нас есть CI-раннер для проекта и мы готовы протестировать пайплайн. Давайте посмотрим, что у нас в .gitlab-ci.yml:

stages:
  - build

variables:
  LC_ALL: "en_US.UTF-8"
  LANG: "en_US.UTF-8"
  GIT_STRATEGY: clone

build:
  stage: build
  script:
    - bundle install
    - bundle exec fastlane flappybuild
  artifacts:
    paths:
    - ./FlappyBird.ipa

Все отлично! Мы устанавливаем формат UTF-8 для fastlane, как и требуется, используем стратегию clone с исполняющей программой shell, чтобы иметь чистое рабочее пространство для каждой сборки, и просто вызываем flappybuild fastlane, как видно выше. В итоге мы получаем сборку, подпись и деплой последней сборки в TestFlight.

Также получаем артефакт и сохраняем его со сборкой. Обратите внимание, что формат .ipa — это подписанный исполняемый файл ARM, который не запускается в симуляторе. Если хотите выходные данные для симулятора, просто добавьте таргет сборки, который его производит, а затем включите его в путь к артефакту.

Другие переменные среды

Здесь есть пара переменных среды, которые управляют всем.

FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD и FASTLANE_SESSION

Для аутентификации в App Store и загрузки в TestFlight требуется аутентификация для fastlane. Для этого создайте пароль для приложения, который будет использоваться в CI. Подробности тук..

Если у вас включена двухфакторная аутентификация, создайте переменную FASTLANE_SESSION (инструкции там же).

FASTLANE_USER и FASTLANE_PASSWORD

За да cert и sigh вызывали профиль инициализации и сертификаты по запросу, нужно задать переменные FASTLANE_USER и FASTLANE_PASSWORD. Подробности тук.. Это не нужно, если вы используете другой метод подписания.

В заключение

Вижте как всичко това работи в моят прост пример.

Надявам се, че това е било полезно и съм успял да ви вдъхновя да работите със сборките на iOS в проекта GitLab. Ето още съвети за CI за fastlane, в случай че искате да използвате CI_BUILD_ID (за инкрементни сборки), за да автоматично инкрементирате версията.

Още една страхотна възможност на fastlane — автоматични скрийншотове за App Store, които е много лесно да настроите.

Споделете в коментарите вашия опит и идеи за подобряване на GitLab за разработка на приложения iOS.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster