
Как GitLab с fastlane събира и подписывает приложения за iOS в App Store.
Наскоро имаме с GitLab и . Тук ще видим как да съберем и стартираме iOS приложение и да го публикуваме в TestFlight. Вижте колко яко , взимам събраното и получавам обновление на тестовата версия на приложението на същия iPad Pro, на който го разработих.
Тук ще вземем , с което записвах видео.
Няколко думи за конфигурацията на Apple Store
Нуждаем се от приложение в App Store, сертификати за разпространение и профил за инициализация, за да свържем всичко заедно.
Най-трудното тук е да настроите правата за подписване в App Store. Надявам се, че с това ще се справите сами. Ако сте начинаещ, ще посоча нужната посока, но тук няма да говорим за нюансите на управлението на сертификатите на Apple, особено, тъй като те постоянно се променят. Този пост ще помогне да се започне.
Моите приложения
Нужно е приложение в App Store Connect, за да имате ID за конфигурация .xcodebuild. Профилът и ID на приложението свързват събрания код, цени и наличност, а също така конфигурацията на TestFlight за разпространение на тестови приложения сред потребители. Не правете публично тестване, достатъчно е и частното, ако имате малка група, лесна настройка и не се нуждаете от допълнителни разрешения от Apple.
Профил за инициализация
Освен настройката на приложението, ви трябват ключове за разпространение и разработка на iOS, създадени в секцията Certificates, Identifiers & Profiles (Сертификати, идентификатори и профили) в консолата на Apple Developer. Всички тези сертификати могат да бъдат обединени в профила за инициализация.
На потребителите, които ще минават аутентификация, им е необходима възможност за създаване на сертификати, иначе на етапите ще видите грешка.
Други опции
Освен този прост метод, има и други начини за настройка на сертификати и профили. Така че, ако работите различно, може да се наложи преосмисляне. Най-важното е, че ще ви е нужна конфигурация .xcodebuild, която ще упоменава нужните файлове, а свързаните ключове трябва да са достъпни на компютъра за строителството за потребителя, под чие име работи раннера. За цифровото подписване използваме fastlane, и ако има проблеми или искате да научите повече, проучете техните детайли. .
В този пример използвам подхода , но за реално приложение, вероятно, ще е по-подходящо .
Подготовка на GitLab и fastlane
Подготовка на CI Runner
След събиране на всички тези данни, преминаваме към конфигурация на GitLab runner на устройството MacOS. За съжаление, приложенията за iOS могат да се правят само в MacOS. Но всичко може да се промени, и ако очаквате развитие в тази област, — следете проекти, като и , и нашата вътрешна задача .
Настройката на runner е много проста. Следвайте актуалните .
Забележка. 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. Просто следвайте , особено в раздела за , тъй като ни е необходим бърз и предсказуем старт чрез автоматичния конвейер CI.
В директорията на проекта стартирайте тези команди:
xcode-select --install
sudo gem install fastlane -NV
# В алтернатива с Homebrew
# brew cask install fastlane
fastlane initfastlane ще поиска основна конфигурация, след което ще създаде в проекта папка fastlane с три файла:
1. fastlane/Appfile
Тук няма нищо сложно. Просто проверете, че Apple ID и ID на приложението са посочени правилно.
app_identifier("com.vontrance.flappybird") # Идентификатор пакета вашего приложения
apple_id("your-email@your-domain.com") # Ваш адрес электронной почты Apple2. fastlane/Fastfile
Fastfile определяет шаги сборки. Из-за многих встроенных возможностей fastlane, здесь все понятно. Создаем одну задачу, которая получает сертификаты, выполняет сборку и загружает её в TestFlight. Вы можете разделить этот процесс на разные задания, если необходимо. Все эти операции (get_certificates, get_provisioning_profile, gym и upload_to_testflight) уже включены в fastlane.
Действия get_certificates и get_provisioning_profile связаны с подходом к подписанию . Если вы используете или что-то еще, внесите изменения.
default_platform(:ios)
platform :ios do
desc "Собрать приложение"
lane :flappybuild do
get_certificates
get_provisioning_profile
gym
upload_to_testflight
end
end3. 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Все отлично! , используем стратегию 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
За да вызывали профиль инициализации и сертификаты по запросу, нужно задать переменные FASTLANE_USER и FASTLANE_PASSWORD. Подробности . Это не нужно, если вы используете другой метод подписания.
В заключение
Вижте как всичко това работи .
Надявам се, че това е било полезно и съм успял да ви вдъхновя да работите със сборките на iOS в проекта GitLab. Ето още за fastlane, в случай че искате да използвате CI_BUILD_ID (за инкрементни сборки), за да .
Още една страхотна възможност на fastlane — за App Store, които е много лесно да настроите.
Споделете в коментарите вашия опит и идеи за подобряване на GitLab за разработка на приложения iOS.
Източник: habr.com
