iOS қолданбаларын құру және жеткізу ерекшеліктері

Бұл мақалада біз Plarium Краснодар студиясы CI/CD жөндеу процесінде жинақтаған iOS қолданбаларын жинау және пайдаланушыларға жеткізу тәжірибесімен бөлісеміз.

iOS қолданбаларын құру және жеткізу ерекшеліктері

Дайындау

Apple құрылғыларына арналған қосымшаларды әзірлеуге қандай да бір жолмен қатысатын әрбір адам инфрақұрылымның даулы ыңғайлылығын жоғары бағалады. Қиындықтар барлық жерде кездеседі: әзірлеуші ​​профилінің мәзірінен бастап жөндеу және құрастыру құралдарына дейін.

Интернетте «негіздер» туралы көптеген мақалалар бар, сондықтан біз ең бастысын көрсетуге тырысамыз. Қолданбаңызды сәтті құру үшін мыналар қажет:

  • әзірлеуші ​​тіркелгісі;
  • құрастыру сервері ретінде әрекет ететін macOS негізіндегі құрылғы;
  • құрылған әзірлеуші ​​сертификаты, ол әрі қарай өтінімге қол қою үшін пайдаланылады;
  • бірегей қолданбасы бар жасалған ID (бума идентификаторының маңыздылығын атап өту керек, себебі қойылмалы таңба идентификаторын пайдалану қолданбаның көптеген функцияларын пайдалануды мүмкін емес етеді, мысалы: Байланысты домендер, Push хабарландырулары, Apple Sign In және т.б.);
  • профиль өтініш қолдары.

Әзірлеуші ​​сертификатын кез келген macOS құрылғысында Keychain арқылы жасау керек. Сертификат түрі өте маңызды. Қолданба ортасына байланысты (Әзірлеу, QA, Кезең, Өндіріс) ол қолданбаның қолтаңба профилінің түрі сияқты әр түрлі болады (Әзірлеу немесе Тарату).

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

  • Әзірлеу - әзірлеу тобының қосымшасына қол қоюға арналған, Әзірлеу сертификаты пайдаланылады (түр атауы iPhone Developer: XXXXX);
  • Ad Hoc - тестілік өтінімге қол қоюға және QA бөлімімен ішкі тексеруге арналған, әзірлеушінің Тарату сертификаты пайдаланылады (түр атауы iPhone Distribution: XXXXX);
  • App Store - TestFlight арқылы сыртқы тестілеуге арналған шығарылым құрастыру және App Store дүкеніне жүктеп салу, әзірлеушінің Тарату сертификаты пайдаланылады.

Әзірлеу және арнайы профильдерді жасау кезінде ол да көрсетіледі құрылғылар тізімі, оған пайдаланушылар үшін қолжетімділікті одан әрі шектеуге мүмкіндік беретін құрастыруды орнатуға болады. Жабық бета тестілеу кезінде қол жеткізуді басқаруды кейінірек талқыланатын TestFlight басқаратындықтан, App Store профилінде құрылғылар тізімі жоқ.

Түсінікті болу үшін әзірлеушінің профилін төмендегі кесте түрінде ұсына аласыз. Бұл құрастыру үшін қандай параметрлер қажет екенін және оларды қайдан алуға болатынын түсінуді жеңілдетеді.

iOS қолданбаларын құру және жеткізу ерекшеліктері

Ассамблея

Жинақтарды жоба және орта бойынша бөлуді жеңілдету үшін біз профиль атауларын пайдаланамыз ${ProjectName}_${Instance}, яғни жоба атауы + данасы (қолданба ортасына байланысты: Dev, QA, GD, Staging, Live және т.б.).

Құрастыру серверіне импортталған кезде профиль өзінің атын бірегей идентификаторға өзгертеді және қалтаға жылжытылады /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 — бұрын қолданылған және экспорт параметрлеріндегі мәндерге сәйкес келуі керек әзірлеуші ​​аты және қолтаңба профилінің идентификаторы параметрлері.

$TeamID — әзірлеушінің атынан кейін жақшадағы он таңбалы идентификатор, мысалы: iPhone әзірлеушісі: …… (XXXXXXXXX); Keychain арқылы тексеруге болады.

Әрі қарай, экспорттау пәрменін пайдаланып, біз қажетті *.ipa файлын аламыз:

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

Жеткізу

Енді жиналған файлды соңғы пайдаланушыға жеткізу керек, яғни құрылғыға орнату.

HockeyApp, AppBlade және басқалар сияқты әзірлеу және арнайы құрастыруларды таратуға арналған көптеген қызметтер бар, бірақ бұл мақалада біз қосымшаларды таратуға арналған автономды сервер туралы айтатын боламыз.

iOS үшін қосымшаны орнату 2 кезеңде жүзеге асырылады:

  1. Элементтер қызметі арқылы қолданбаны орнату манифестін алу.
  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 өзінің құрастыру орнату қосымшасын жасады, ол бізге:

  • дербестік пен тәуелсіздік,
  • қол жеткізуді басқаруды орталықтандыру және «уақытша» динамикалық түрде құрылған сілтемелер арқылы қолданбаларды қауіпсіз орнату,
  • кеңейтілетін функционалдылық (яғни әзірлеу тобы, қажет болса, жетіспейтін функцияларды бар қолданбаға біріктіре алады).

Тестілеу

Енді біз қолданбаны қолдана отырып, шығарылым алдындағы тестілеу туралы сөйлесетін боламыз TestFlight.

Жүктеп алу үшін қажетті шарттар App Store қолтаңба профилінің түрі және жасалған API кілттерінің болуы болып табылады.

Қолданбаны жүктеп алудың бірнеше жолы бар:

  • Xcode (Ұйымдастырушы) арқылы
  • altool арқылы,
  • Xcode (қазіргі Transporter) ескі нұсқалары үшін Application Loader арқылы.

Автоматты жүктеу үшін altool пайдаланылады, оның екі авторизация әдісі бар:

  • Қолданбаға арналған құпия сөз,
  • API кілті.

Бағдарламаны API кілті арқылы жүктеп алған дұрыс.

API кілтін алу үшін өтіңіз байланыс және кілтті жасаңыз. *.p8 пішіміндегі кілттің өзінен басқа, бізге екі параметр қажет: шығарушы идентификаторы және кілт идентификаторы.

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-provider параметрінің мәнін аламыз және пәрмен арқылы құпия сөзді импорттау сәттілігін тексереміз:

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 шифрланбаған (анық) түрде.

Дегенмен, жоғарыда айтылғандай, өнімділік тұрғысынан, авторизациялау үшін API кілтін таңдаған дұрыс, өйткені Xcode әртүрлі нұсқаларында белгілі бір проблемалар бар («Кілттер тізбегін көрмейді», жүктеп салу кезінде авторизация қателері және т.б.).

Мұның бәрі, шын мәнінде. Қатысқандардың барлығына App Store дүкенінде сәтті құрастыруды және ақаусыз шығарылымдарды тілеймін.

Ақпарат көзі: www.habr.com

пікір қалдыру