Публікуем прыкладанні iOS у App Store з GitLab і fastlane

Публікуем прыкладанні iOS у App Store з GitLab і fastlane

Як GitLab з fastlane збірае, падпісвае і публікуе прыкладанні для iOS у App Store.

Нядаўна ў нас быў пост аб тым, як хутка сабраць і запусціць прыкладанне Android з GitLab і фастлейн. Тут мы ўбачым, як сабраць і запусціць прыкладанне 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, але для рэальнага прымянення, напэўна, лепш падыдзе адпавядаць.

Падрыхтоўка GitLab і fastlane

Падрыхтоўка CI Runner

Сабраўшы ўсе гэтыя дадзеныя, пераходзім да канфігурацыі GitLab-Раннер на прыладзе MacOS. Да няшчасця, рабіць прыкладанні iOS рэальна толькі ў MacOS. Але ўсё можа змяніцца, і калі чакаеце зрухаў у гэтай галіне, - сачыце за праектамі, накшталт xcbuild и isign, і нашай унутранай задачай gitlab-ce#57576.

Наладзіць раннэр вельмі проста. Выконвайце актуальным інструкцыі па наладзе GitLab Runner у 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 init

Каб выкарыстоўваць fastlane у праекце, запусціце fastlane init. Проста выконвайце інструкцыі па ўстаноўцы і запуску fastlane, асабліва ў раздзеле пра Gemfile, бо нам патрэбен хуткі і прадказальны запуск праз аўтаматычны канвеер CI.

У каталогу праекта запусціце гэтыя каманды:

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 звязаныя з падыходам падпісання cert і sigh. Калі вы карыстаецеся адпавядаць ці нешта яшчэ, унясіце змены.

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

Усе выдатна! Мы задаём фармат 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

Дадаць каментар