У гэтым артыкуле мы дзелімся досведам зборкі і дастаўкі карыстачам прыкладанняў для iOS, які назапасіўся ў студыі Plarium Krasnodar падчас адладкі CI/CD.
Падрыхтоўка
Кожны чалавек, так ці інакш звязаны з распрацоўкай прыкладанняў для прылад Apple, ужо паспеў ацаніць спрэчнае зручнасць інфраструктуры. Складанасці сустракаюцца паўсюль: пачынальна з меню профіля распрацоўніка і сканчаючы прыладамі адладкі і зборкі.
Артыкулаў аб «азах» звышдастаткова ў сетцы, таму пастараемся вылучыць галоўнае. Вось што трэба для паспяховай зборкі прыкладання:
створанае прыкладанне з унікальным ID (варта адзначыць важнасць Bundle Identifier, таму што ўжыванне wildcard ID робіць немагчымым выкарыстанне шматлікіх функцый прыкладання, напрыклад: Associated Domains, Push Notifications, Apple Sign In і іншых);
Сертыфікат распрацоўніка варта згенераваць праз Keychain на любой прыладзе на базе macOS. Вельмі важным з'яўляецца тып сертыфіката. У залежнасці ад асяроддзя прыкладання (Dev, QA, Staging, Production) ён будзе адрознівацца (Development ці Distribution), гэтак жа як і тып профіля подпісу прыкладання.
Асноўныя тыпы профіляў:
Development — прызначаны для подпісу дадатку каманды распрацоўшчыкаў, выкарыстоўваецца Development-сертыфікат (імя віду iPhone Developer: XXXXX);
Ad Hoc — прызначаны для подпісу тэставага дадатку і ўнутранай праверкі QA-аддзелам, выкарыстоўваецца Distribution-сертыфікат распрацоўшчыка (імя віду iPhone Distribution: XXXXX);
App Store - рэлізны білд для знешняга тэсціравання праз TestFlight і выгрузкі ў App Store, выкарыстоўваецца Distribution-сертыфікат распрацоўніка.
Пры генерацыі профіляў Development і Ad Hoc таксама паказваецца спіс прылад, на якія можна ўсталяваць білд, што дазваляе дадаткова размежаваць доступ для карыстальнікаў. У профілі App Store няма спісу прылад, бо размежаваннем доступу пры зачыненым бэта-тэставанні займаецца TestFlight, аб якім будзе расказана пазней.
Для навочнасці можна прадставіць профіль распрацоўніка ў выглядзе таблічкі ніжэй. Так прасцей зразумець, якія параметры для зборкі нам патрэбны і адкуль іх браць.
зборка
Каб было прасцей падзяляць зборкі па праекце і асяроддзі, выкарыстоўваем імёны профіляў выгляду ${ProjectName}_${Instance}, гэта значыць імя праекта + інстанс (залежыць ад асяроддзя прыкладання: Dev, QA, GD, Staging, Live і гэтак далей).
Пры імпарце на білд-сервер профіль змяняе назву на ўнікальны ID і перамяшчаецца ў тэчку /Users/$Username/Library/MobileDevice/Provisioning Profiles (дзе $Username адпавядае імя ўліковага запісу карыстальніка білд-сервера).
Існуе два спосабу зборкі файла *.ipa - састарэлы (PackageApplication) і сучасны (праз стварэнне XcAchive і экспарт). Першы спосаб лічыцца састарэлым, бо з версіі 8.3 модуль пакавання app-файла прыбраны з дыстрыбутыва Xcode. Для яго выкарыстання трэба скапіяваць модуль са старога Xcode (версіі 8.2 і больш ранніх) у тэчку: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
$Method - метад дастаўкі, адпавядае тыпу профілю подпісы прыкладання, гэта значыць для Development значэнне будзе development, для Ad Hoc - ad-hoc, а для App Store - app-store.
$BundleID - ID прыкладання, які паказаны ў наладах прыкладання. Праверыць можна камандай:
defaults read $ProjectDir/Info CFBundleIdentifier
$DevAccName и $ProfileId — настройкі імя распрацоўшчыка і ID профілю подпісы, якія выкарыстоўваліся раней і павінны супадаць са значэннямі ў настройках экспарту.
$TeamID - дзесяцізначны ID у дужках пасля імя распрацоўніка, прыклад: iPhone Developer: …… (XXXXXXXXXX); можна праверыць у Keychain.
Далей з дапамогай каманды экспарту атрымліваем неабходны файл *.ipa:
Зараз сабраны файл трэба даставіць канчатковаму карыстачу, гэта значыць усталяваць на прыладу.
Для распаўсюджвання білдаў Development і Ad Hoc існуе мноства сэрвісаў накшталт HockeyApp, AppBlade і іншых, аднак у рамках дадзенага артыкула прамова пайдзе аб аўтаномным серверы для раздачы прыкладанняў.
Устаноўка прыкладання для iOS праходзіць у 2 этапы:
Атрыманне маніфесту ўстаноўкі прыкладання праз Items Service.
Усталёўка файла *.ipa паводле інфармацыі, паказанай у маніфесце, праз HTTPS.
Такім чынам, нам для пачатку трэба згенераваць маніфест усталёўкі (тып файла *.plist) камандай:
Як бачым, маніфест змяшчае практычна ўсе параметры, якія ўдзельнічаюць у зборцы дадатку.
Версію прыкладання ($AppVersion) можна праверыць камандай:
defaults read $ProjectDir/Info CFBundleVersion
Параметр $ipaUrl змяшчае прамую спасылку на запампоўку файла *.ipa. З сёмы версіі iOS прыкладанне павінна быць устаноўлена праз HTTPS. У восьмай версіі крыху змяніўся фармат маніфесту: былі выдалены блокі з наладамі абразкоў прыкладання віду
<images>
<image>...</image>
</images>
Такім чынам, для ўстаноўкі прыкладання дастаткова просты html-старонкі са спасылкай выгляду:
Для патрэб аддзелаў распрацоўкі і тэсціравання кампанія Plarium стварыла сваё прыкладанне ўстаноўкі білдаў, якое дае нам:
аўтаномнасць і незалежнасць,
цэнтралізацыю кіравання доступам і бяспечную ўстаноўку прыкладанняў праз «часовыя», якія дынамічна ствараюцца спасылкі,
пашыраецца функцыянал (гэта значыць каманда распрацоўкі пры неабходнасці можа інтэграваць адсутнічаюць функцыі ва ўжо існуючы дадатак).
Тэставанне
Цяпер гаворка пойдзе аб предрелизном тэсціраванні прыкладання з дапамогай TestFlight.
Абавязковымі ўмовамі для загрузкі з'яўляюцца тып профіля подпісы App Store і наяўнасць згенераваных API-ключоў.
Ёсць некалькі спосабаў загрузкі прыкладання:
праз Xcode (Organizer),
праз altool,
праз Application Loader для старых версій Xcode (зараз Transporter).
Для аўтаматычнай загрузкі выкарыстоўваецца altool, у якім таксама ёсць два спосабу аўтарызацыі:
App-Specific Password,
API Key.
Больш пераважнай з'яўляецца загрузка прыкладання з дапамогай API Key.
Для атрымання API Key пераходзім па спасылцы і які генеруецца ключ. Акрамя самога ключа ў фармаце *.p8, нам спатрэбяцца два параметры: IssuerID і KeyID.
Дзе apiKey и apiIssuer маюць значэнні палёў са старонкі генерацыі API-ключа.
Далей пры паспяховай валідацыі выконваем загрузку прыкладання камандай --upload-app з тымі ж параметрамі.
Прыкладанне будзе праверана Apple на працягу аднаго-двух дзён і пасля стане даступным вонкавым тэсціроўшчыкам: ім дашлюць на пошту спасылкі для ўсталёўкі.
Іншым спосабам загрузкі прыкладання праз altool з'яўляецца выкарыстанне App-Specific Password.
Для атрымання App-Specific Password трэба перайсці па спасылцы і згенераваць яго ў раздзеле Security.
Далей варта стварыць у Keychain запіс білд-сервера з гэтым паролем. З 11 версіі Xcode гэта можна зрабіць камандай:
У якасці значэнне параметра -p можна ўзяць значэнне $AppPswd у незашыфраваным (відавочным) выглядзе.
Аднак, як ужо было сказанае, з пункта гледжання працаздольнасці для аўтарызацыі altool лепш абраць API Key, бо ў розных версіях Xcode сустракаюцца тыя ці іншыя праблемы ("не бачыць" Keychain, памылкі аўтарызацыі пры выгрузцы і іншае).
На гэтым, уласна, усё. Жадаю ўсім датычным паспяховых зборак і беспраблемных рэлізаў у App Store.