iOS тиркемелерин түзүү жана жеткирүү өзгөчөлүктөрү

Бул макалада биз Plarium Краснодар студиясы CI/CDди оңдоо процессинде топтогон iOS тиркемелерин чогултуу жана колдонуучуларга жеткирүү тажрыйбасы менен бөлүшөбүз.

iOS тиркемелерин түзүү жана жеткирүү өзгөчөлүктөрү

үйрөтүү

Apple түзмөктөрү үчүн тиркемелерди иштеп чыгууга тигил же бул жол менен катышкан ар бир адам инфраструктуранын талаштуу ыңгайлуулугун буга чейин эле баалашкан. Кыйынчылыктар бардык жерде кездешет: иштеп чыгуучунун профилинин менюсунан мүчүлүштүктөрдү оңдоо жана куруу куралдарына чейин.

Интернетте "негиздери" жөнүндө көптөгөн макалалар бар, ошондуктан биз негизги нерсени баса белгилегенге аракет кылабыз. Колдонмоңузду ийгиликтүү түзүү үчүн сизге эмне керек:

  • иштеп чыгуучу каттоо эсеби;
  • куруу серверинин ролун аткарган macOS негизиндеги түзмөк;
  • түзүлгөн иштеп чыгуучунун сертификаты, андан ары арызга кол коюу үчүн колдонулат;
  • уникалдуу колдонмо түзүлгөн ID (Таңгактын идентификаторунун маанилүүлүгүн белгилей кетүү керек, анткени идентификаторду колдонуу тиркеменин көптөгөн функцияларын колдонууга мүмкүнчүлүк бербейт, мисалы: Associated Domains, Push Notifications, Apple Sign In жана башкалар);
  • Перейти арыз кол коюулар.

Иштеп чыгуучунун сертификаты каалаган macOS түзмөгүндө Keychain аркылуу түзүлүшү керек. Күбөлүктүн түрү абдан маанилүү. Колдонмонун чөйрөсүнө жараша (Иштеп чыгуу, QA, Этапташтыруу, Өндүрүш) ал ар кандай болот (Иштеп чыгуу же Тартуу), ошондой эле колдонмонун кол коюу профилинин түрү.

Профильдердин негизги түрлөрү:

  • Иштеп чыгуу - иштеп чыгуу тобунун тиркемесине кол коюу үчүн арналган, Өнүгүү сертификаты колдонулат (түрүнүн аталышы iPhone Developer: XXXXX);
  • Ad Hoc - тесттик өтүнмөгө кол коюу жана QA бөлүмү тарабынан ички текшерүү үчүн арналган, иштеп чыгуучунун Distribution сертификаты колдонулат (түрүнүн аталышы iPhone Distribution: XXXXX);
  • App Store - TestFlight аркылуу тышкы тестирлөө жана App Store'го жүктөө үчүн релиздин түзүлүшү, иштеп чыгуучунун Distribution сертификаты колдонулат.

Өнүгүү жана атайын профилдерди түзүүдө ал да көрсөтүлөт түзмөк тизмеси, ага сиз курууну орното аласыз, бул сизге колдонуучулар үчүн кирүү мүмкүнчүлүгүн андан ары чектөөгө мүмкүндүк берет. App Store профилинде түзмөктөрдүн тизмеси жок, анткени жабык бета тестирлөө учурунда кирүү мүмкүнчүлүгүн башкаруу TestFlight тарабынан ишке ашырылат, ал кийинчерээк талкууланат.

Тактык үчүн, сиз төмөнкү таблица түрүндө иштеп чыгуучунун профилин көрсөтө аласыз. Бул чогултуу үчүн кандай параметрлер керек экенин жана аларды кайдан алуу керектигин түшүнүүнү жеңилдетет.

iOS тиркемелерин түзүү жана жеткирүү өзгөчөлүктөрү

жыйналыш

Ассамблеяларды долбоор жана чөйрө боюнча бөлүүнү жеңилдетүү үчүн, биз сыяктуу профилдик аталыштарды колдонобуз ${ProjectName}_${Instance}, башкача айтканда, долбоордун аталышы + инстанция (колдонмо чөйрөсүнө жараша болот: Dev, QA, GD, Staging, Live, жана башкалар).

Куруу серверине импорттолгондо, профиль өзүнүн атын уникалдуу ID болуп өзгөртөт жана папкага жылдырылат /Users/$Username/Library/MobileDevice/Provisioning Profiles (Кайда $Username куруу серверинин колдонуучу эсебинин атына туура келет).

*.ipa файлын куруунун эки жолу бар - эски (PackageApplication) жана заманбап (XcAchive түзүү жана экспорттоо аркылуу). Биринчи ыкма эскирген деп эсептелет, анткени 8.3 версиясынан бери колдонмо файлдарын таңгактоо модулу Xcode бөлүштүрүүдөн алынып салынган. Аны колдонуу үчүн модулду эски Xcodeден (8.2 жана андан мурунку версия) папкага көчүрүү керек:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Анан буйрукту иштетиңиз:

chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/*

Андан кийин колдонмонун *.app файлын чогултушуңуз керек:

xcodebuild 
-workspace $ProjectDir/$ProjectName.xcworkspace 
-scheme $SchemeName 
-sdk iphoneos 
build 
-configuration Release 
-derivedDataPath build 
CODE_SIGN_IDENTITY=”$DevAccName”
PROVISIONING_PROFILE=”$ProfileId”
DEPLOYMENT_POSTPROCESSING=YES 
SKIP_INSTALL=YES 
ENABLE_BITCODE=NO

мында:

-workspace — долбоордун файлына жол.

-scheme — долбоордо көрсөтүлгөн, колдонулган схема.

-derivedDataPath — чогултулган тиркемени жүктөө жолу (*.app).

CODE_SIGN_IDENTITY — Keychain аркылуу текшерилүүчү иштеп чыгуучунун аккаунтунун аталышы (iPhone Иштеп чыгуучусу: XXXX XXXXXXX, кашаанын ичинде TeamID жок).

iOS тиркемелерин түзүү жана жеткирүү өзгөчөлүктөрү

PROVISIONING_PROFILE — Арызга кол коюу үчүн профилдин идентификатору, аны команда менен алууга болот:

cd "/Users/$Username/Library/MobileDevice/Provisioning Profiles/" && find *.mobileprovision -type f | xargs grep -li ">${ProjectName}_${Instance}<" | sed -e 's/.mobileprovision//'

Эгер колдонмо кошумча профилди колдонсо (мисалы, Push эскертмелери үчүн), анын ордуна PROVISIONING_PROFILE көрсөтүү:

APP_PROFILE=”$AppProfile” 
EXTENSION_PROFILE=”$ExtProfile” 

Андан кийин, пайда болгон *.app файлы *.ipa пакетине салынышы керек. Бул үчүн, сиз төмөнкүдөй буйрукту колдоно аласыз:

/usr/bin/xcrun --sdk iphoneos PackageApplication 
-v $(find "$ProjectDir/build/Build/Products/Release-iphoneos" -name "*.app") 
-o "$ProjectDir/$ProjectName_$Instance.ipa"

Бирок, бул ыкма Apple көз карашы боюнча эскирген деп эсептелет. Колдонмо архивинен экспорттоо менен *.ipa алуу актуалдуу.

Алгач сиз архивди буйрук менен чогултушуңуз керек:

xcodebuild 
-workspace $ProjectDir/$ProjectName.xcworkspace 
-scheme $SchemeName 
-sdk iphoneos 
-configuration Release 
archive 
-archivePath $ProjectDir/build/$ProjectName.xcarchive 
CODE_SIGN_IDENTITY=”$DevAccName” 
PROVISIONING_PROFILE=”$ProfileId”
ENABLE_BITCODE=NO 
SYNCHRONOUS_SYMBOL_PROCESSING=FALSE

Айырмачылыктар монтаждоо ыкмасы жана варианттарында SYNCHRONOUS_SYMBOL_PROCESSING, бул куруу убагында символду түшүрүүнү өчүрөт.

Андан кийин биз экспорт орнотуулары менен файлды түзүшүбүз керек:

ExportSettings="$ProjectDir/exportOptions.plist"

cat << EOF > $ExportSettings
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>compileBitcode</key>
<false/>
<key>uploadBitcode</key>
<false/>
<key>uploadSymbols</key>
<false/>
<key>method</key>
<string>$Method</string>
<key>provisioningProfiles</key>
<dict>
<key>$BundleID</key>
<string>$ProfileId</string>
</dict>
<key>signingCertificate</key>
<string>$DevAccName</string>
<key>signingStyle</key>
<string>manual</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>$TeamID</string>
<key>thinning</key>
<string><none></string>
</dict>
</plist>
EOF

мында:

$Method — жеткирүү ыкмасы, тиркеме колтамгасынын профилинин түрүнө туура келет, башкача айтканда, Өнүгүү үчүн иштеп чыгуу, Ad Hoc үчүн - ad-hoc жана App Store үчүн - колдонмо дүкөнү болот.

$BundleID — Колдонмо идентификатору, ал тиркеменин орнотууларында көрсөтүлгөн. Сиз буйрук менен текшере аласыз:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId — иштеп чыгуучунун аты жана кол коюу профилинин ID орнотуулары мурда колдонулган жана экспорттук жөндөөлөрдөгү маанилерге дал келиши керек.

$TeamID — иштеп чыгуучунун атынан кийин кашаадагы он орундуу ID, мисалы: iPhone Иштеп чыгуучу: …… (XXXXXXXXX); Keychain менен текшерсе болот.

Андан кийин, экспорттоо буйругун колдонуп, биз керектүү *.ipa файлын алабыз:

xcodebuild 
-exportArchive 
-archivePath $ProjectDir/build/$ProjectName.xcarchive 
-exportPath $ProjectDir 
-exportOptionsPlist $ExportSettings

жеткирүү

Эми чогултулган файл акыркы колдонуучуга жеткирилиши керек, башкача айтканда, түзмөккө орнотулган.

HockeyApp, AppBlade жана башкалар сыяктуу Өнүгүү жана атайын түзүлүштөрдү жайылтуу боюнча көптөгөн кызматтар бар, бирок бул макалада биз тиркемелерди жайылтуу үчүн өзүнчө сервер жөнүндө сүйлөшөбүз.

iOS үчүн тиркемени орнотуу 2 этапта ишке ашат:

  1. Items кызматы аркылуу колдонмону орнотуу манифестин алуу.
  2. HTTPS аркылуу манифестте көрсөтүлгөн маалыматка ылайык *.ipa файлын орнотуу.

Ошентип, биз биринчи буйрук менен орнотуу манифестти (файл түрү *.plist) түзүү керек:

cat << EOF > $manifest
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>$ipaUrl</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>$BundleID</string>
<key>bundle-version</key>
<string>$AppVersion</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>$ProjectName_$Instance</string>
<key>subtitle</key>
<string>$Instance</string>
</dict>
</dict>
</array>
</dict>
</plist>
EOF

Көрүнүп тургандай, манифест тиркемени курууга катышкан дээрлик бардык параметрлерди камтыйт.

Колдонмо версиясы ($AppVersion) буйругу менен текшерилиши мүмкүн:

defaults read $ProjectDir/Info CFBundleVersion

параметр $ipaUrl *.ipa файлын жүктөп алуу үчүн түз шилтемени камтыйт. iOSтун жетинчи версиясынан баштап, колдонмо HTTPS аркылуу орнотулушу керек. Сегизинчи версияда манифесттин форматы бир аз өзгөрдү: сыяктуу тиркемелердин сөлөкөттөрү үчүн орнотуулары бар блоктор

<images>
   <image>...</image>
</images>

Ошентип, тиркемени орнотуу үчүн, бул сыяктуу шилтеме менен жөнөкөй HTML баракчасы жетиштүү:

itms-services://?action=download-manifest&url=https://$ServerUrl/$ProjectName/$Instance/iOS/$AppVersion/manifest.plist

Өнүктүрүү жана тестирлөө бөлүмдөрүнүн муктаждыктары үчүн Plarium өзүнүн курулуш орнотуу тиркемесин түздү, ал бизге:

  • автономия жана көз карандысыздык,
  • мүмкүндүк алууну башкарууну борборлоштуруу жана "убактылуу" динамикалык түзүлгөн шилтемелер аркылуу тиркемелерди коопсуз орнотуу,
  • кеңейтилүүчү функция (башкача айтканда, иштеп чыгуу тобу, зарыл болсо, жетишпеген функцияларды учурдагы тиркемеге бириктире алат).

тестирлөө

Эми биз колдонмону релизге чейинки тестирлөө жөнүндө сүйлөшөбүз сыноо учуу.

Жүктөп алуу үчүн талап кылынган шарттар App Store кол профилинин түрү жана түзүлгөн API ачкычтарынын болушу.

Колдонмону жүктөп алуунун бир нече жолу бар:

  • Xcode аркылуу (Уюштуруучу),
  • altool аркылуу,
  • Xcode (азыр Transporter) эски версиялары үчүн Application Loader аркылуу.

Автоматтык түрдө жүктөө үчүн altool колдонулат, анын дагы эки авторизация ыкмасы бар:

  • Колдонмого атайын сырсөз,
  • API ачкычы.

API ачкычын колдонуу менен тиркемени жүктөп алуу артык.

API ачкычын алуу үчүн, өтүңүз байланыш жана ачкычты жаратыңыз. *.p8 форматындагы ачкычтын өзүнөн тышкары, бизге эки параметр керек болот: IssuerID жана KeyID.

iOS тиркемелерин түзүү жана жеткирүү өзгөчөлүктөрү

Андан кийин, жүктөлүп алынган ачкычты куруу серверине импорттоо:

mkdir -p ~/.appstoreconnect/private_keys
mv ~/Downloads/AuthKey_${KeyID}.p8 ~/.appstoreconnect/private_keys/

Тиркемени TestFlightке жүктөөдөн мурун, сиз тиркемени текшеришиңиз керек, биз муну буйрук менен жасайбыз:

xcrun altool 
--validate-app 
-t ios 
-f $(find "$ProjectDir" -name "*.ipa") 
--apiKey “$KeyID” 
--apiIssuer “$IssuerID” 

кайда apiKey и apiIssuer API ачкычын түзүү барагынан талаа маанилери бар.

Андан кийин, ийгиликтүү текшерүүдөн кийин, биз колдонмону буйрук менен жүктөйбүз --upload-app ошол эле параметрлер менен.

Тиркеме Apple тарабынан бир же эки күндүн ичинде сыналат жана андан кийин тышкы сыноочулар үчүн жеткиликтүү болот: аларга орнотуу үчүн электрондук почта шилтемелери жөнөтүлөт.

Altool аркылуу тиркемени жүктөп алуунун дагы бир жолу - Колдонмого тиешелүү сырсөздү колдонуу.

Колдонмого тиешелүү сырсөздү алуу үчүн сиз барышыңыз керек байланыш жана аны Коопсуздук бөлүмүндө түзүңүз.

iOS тиркемелерин түзүү жана жеткирүү өзгөчөлүктөрү

Андан кийин, сиз бул сырсөз менен Keychain'де куруу серверинин жазуусун түзүшүңүз керек. Xcode 11 версиясынан бул буйрук менен аткарылышы мүмкүн:

xcrun altool --store-password-in-keychain-item "Altool" -u "$DeveloperName" -p $AppPswd

мында:

$DeveloperName — Apple кызматтарына кирүү үчүн колдонулган iOS иштеп чыгуучу каттоо эсебинин аты.

$AppPswd — түзүлгөн Колдонмого атайын сырсөз.

Андан кийин, биз asc-провайдер параметринин маанисин алабыз жана буйрук менен сырсөздү импорттоонун ийгиликтүүлүгүн текшеребиз:

xcrun altool --list-providers -u "$DeveloperName" -p "@keychain:Altool"

Биз чыгарууну алабыз:

Provider listing:
- Long Name - - Short Name -
XXXXXXX        XXXXXXXXX

Көрүнүп тургандай, талап кылынган Short Name мааниси (asc-провайдер) биз тиркемени курууда колдонгон $TeamID параметрине дал келет.

Колдонмону текшерүү жана TestFlightке жүктөө үчүн, буйрукту колдонуңуз:

xcrun altool 
--(validate|upload)-app   
-f $(find "$ProjectDir" -name "*.ipa") 
-u "$DeveloperName" 
-p "@keychain:Altool" 

Параметр мааниси катары -p баасын ала аласыз $AppPswd шифрленбеген (ачык) түрдө.

Бирок, жогоруда айтылгандай, аткаруунун көз карашынан алганда, ар кандай Xcode версияларында белгилүү бир көйгөйлөр бар (“Көрбөйт” Keychain, жүктөө учурунда авторизация каталары ж.

Чындыгында, баары ушул. Ар бир катышуучуга ийгиликтүү түзүүнү жана App Store дүкөнүндө көйгөйсүз чыгарууну каалайм.

Source: www.habr.com

Комментарий кошуу