Як GitLab з fastlane збирає, підписує та публікує програми для iOS в App Store.
Нещодавно у нас був
Тут ми візьмемо
Пара слів про конфігурацію 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-раннера на MacOS. На жаль, робити програми iOS реально тільки в MacOS. Але все може змінитися, і якщо чекаєте на переміщення в цій галузі, — стежте за проектами, начебто
Налаштувати раннер дуже просто. Дотримуйтесь актуальних
Примітка. Ранер повинен використовувати програму, що виконує shell
. Це обов'язково для складання iOS в macOS, щоб працювати безпосередньо як користувач, а не через контейнери. Якщо ви використовуєте shell
, Складання та тестування виконуються від імені користувача раннера, прямо на хості складання. Це не так безпечно, як контейнери, так що краще перегорнути
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 у проекті, запустіть fastlane init
. Просто слідуйте
У каталозі проекту запустіть ці команди:
xcode-select --install
sudo gem install fastlane -NV
# Alternatively using Homebrew
# brew cask install fastlane
fastlane init
fastlane запросить базову конфігурацію, а потім створить у проекті папку fastlane із трьома файлами:
1. fastlane/Appfile
Тут нічого складного. Просто перевірте, що Apple ID та ID програми вказані правильно.
app_identifier("com.vontrance.flappybird") # The bundle identifier of your app
apple_id("[email protected]") # Your Apple email address
2. 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 "Build the application"
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
Все відмінно! 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. Ось ще CI_BUILD_ID
(для інкрементних збірок), щоб
Ще одна крута можливість fastlane
Розкажіть у коментарях про свій досвід та поділіться ідеями щодо покращення GitLab для розробки додатків iOS.
Джерело: habr.com