iOS ilovalarini yaratish va yetkazib berish xususiyatlari

Ushbu maqolada biz Plarium Krasnodar studiyasi CI/CD diskini tuzatish jarayonida to'plagan iOS ilovalarini yig'ish va foydalanuvchilarga yetkazib berish tajribasi bilan o'rtoqlashamiz.

iOS ilovalarini yaratish va yetkazib berish xususiyatlari

o'quv

Apple qurilmalari uchun ilovalarni ishlab chiqishda u yoki bu tarzda ishtirok etgan har bir kishi allaqachon infratuzilmaning bahsli qulayligini qadrlagan. Qiyinchiliklar hamma joyda uchraydi: dasturchi profili menyusidan disk raskadrovka va qurish vositalarigacha.

Internetda "asoslar" haqida juda ko'p maqolalar mavjud, shuning uchun biz asosiy narsani ta'kidlashga harakat qilamiz. Ilovangizni muvaffaqiyatli yaratish uchun sizga quyidagilar kerak:

  • dasturchi hisobi;
  • quruvchi server vazifasini bajaradigan macOS-ga asoslangan qurilma;
  • yaratilgan ishlab chiquvchi sertifikati, bundan keyin arizani imzolash uchun foydalaniladi;
  • noyob bilan yaratilgan dastur ID (To'plam identifikatorining ahamiyatini ta'kidlash kerak, chunki joker identifikatordan foydalanish ilovaning ko'plab funktsiyalaridan foydalanishni imkonsiz qiladi, masalan: Associated Domains, Push Notifications, Apple Sign In va boshqalar);
  • profil ariza imzolari.

Ishlab chiqaruvchi sertifikati istalgan macOS qurilmasida Keychain orqali yaratilishi kerak. Sertifikat turi juda muhim. Ilova muhitiga (ishlab chiqish, QA, bosqichma-bosqich, ishlab chiqarish) qarab, u (ishlab chiqish yoki tarqatish) va ilova imzo profili turiga qarab farqlanadi.

Profillarning asosiy turlari:

  • Rivojlanish - ishlab chiqish guruhining ilovasini imzolash uchun mo'ljallangan, Rivojlanish sertifikati ishlatiladi (iPhone Developer turi: XXXXXX);
  • Ad Hoc - test ilovasini imzolash va QA bo'limi tomonidan ichki tekshirish uchun mo'ljallangan, ishlab chiqaruvchining tarqatish sertifikati ishlatiladi (iPhone Distribution turi: XXXXX);
  • App Store - TestFlight orqali tashqi sinovdan o'tkazish va App Store'ga yuklash uchun ishlab chiqaruvchining Distribution sertifikatidan foydalaniladi.

Rivojlanish va maxsus profillarni yaratishda u ham ko'rsatiladi qurilmalar ro'yxati, unda siz foydalanuvchilar uchun kirishni yanada cheklash imkonini beruvchi qurilishni o'rnatishingiz mumkin. App Store profilida qurilmalar roʻyxati yoʻq, chunki yopiq beta-sinov paytida kirish nazorati TestFlight tomonidan boshqariladi, bu haqda keyinroq muhokama qilinadi.

Aniqlik uchun siz ishlab chiquvchining profilini quyidagi jadval shaklida taqdim etishingiz mumkin. Bu yig'ish uchun qanday parametrlar kerakligini va ularni qaerdan olishni tushunishni osonlashtiradi.

iOS ilovalarini yaratish va yetkazib berish xususiyatlari

O'rnatish

Assambleyalarni loyiha va muhit bo'yicha ajratishni osonlashtirish uchun biz kabi profil nomlaridan foydalanamiz ${ProjectName}_${Instance}, ya'ni loyiha nomi + misol (ilova muhitiga bog'liq: Dev, QA, GD, Staging, Live va boshqalar).

Qurilish serveriga import qilinganida, profil o'z nomini noyob identifikatorga o'zgartiradi va jildga ko'chiriladi /Users/$Username/Library/MobileDevice/Provisioning Profiles (qaerda $Username qurish serverining foydalanuvchi hisobi nomiga mos keladi).

*.ipa faylini yaratishning ikki yo'li mavjud - eski (PackageApplication) va zamonaviy (XcAchive yaratish va eksport qilish orqali). Birinchi usul eskirgan deb hisoblanadi, chunki 8.3 versiyasidan boshlab ilova fayllarini qadoqlash moduli Xcode tarqatilishidan olib tashlangan. Uni ishlatish uchun modulni eski Xcode (8.2 va undan oldingi versiyalar) papkasiga nusxalash kerak:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Va keyin buyruqni bajaring:

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

Keyin ilovaning *.app faylini to'plashingiz kerak:

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

Qaerda:

-workspace — loyiha fayliga yoʻl.

-scheme — loyihada ko‘rsatilgan foydalanilgan sxema.

-derivedDataPath — yig‘ilgan ilovani yuklab olish yo‘li (*.app).

CODE_SIGN_IDENTITY — Keychain-da tekshirilishi mumkin bo'lgan ishlab chiquvchi hisobining nomi (iPhone Developer: XXXX XXXXXXX, qavs ichida TeamID ko'rsatilmagan).

iOS ilovalarini yaratish va yetkazib berish xususiyatlari

PROVISIONING_PROFILE — Ilovani imzolash uchun profil identifikatori, uni buyruq bilan olish mumkin:

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

Agar ilova qo'shimcha profildan foydalansa (masalan, Push bildirishnomalari uchun), uning o'rniga PROVISIONING_PROFILE ko'rsating:

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

Keyin olingan *.app fayli *.ipa ichiga paketlanishi kerak. Buning uchun siz quyidagi kabi buyruqdan foydalanishingiz mumkin:

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

Biroq, bu usul Apple nuqtai nazaridan eskirgan deb hisoblanadi. Ilova arxividan eksport qilish orqali *.ipa ni olish muhim.

Avval siz arxivni buyruq bilan to'plashingiz kerak:

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

Farqlar yig'ish usuli va variantlarida yotadi SYNCHRONOUS_SYMBOL_PROCESSING, bu qurilish vaqtida ramzni tushirishni o'chirib qo'yadi.

Keyinchalik, eksport sozlamalari bilan faylni yaratishimiz kerak:

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

Qaerda:

$Method — yetkazib berish usuli, ilova imzosi profili turiga mos keladi, yaʼni Rivojlanish uchun qiymat ishlab chiqish, Ad Hoc uchun — ad-hoc va App Store uchun — ilovalar doʻkoni boʻladi.

$BundleID — Ilova sozlamalarida ko'rsatilgan ilova identifikatori. Buyruq bilan tekshirishingiz mumkin:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId — ilgari ishlatilgan va eksport sozlamalaridagi qiymatlarga mos kelishi kerak boʻlgan ishlab chiquvchi nomi va imzo profili identifikatori sozlamalari.

$TeamID — ishlab chiquvchi nomidan keyin qavs ichida o‘n xonali identifikator, misol: iPhone Developer: …… (XXXXXXXXXX); Keychain-da tekshirilishi mumkin.

Keyinchalik, eksport buyrug'idan foydalanib, biz kerakli *.ipa faylini olamiz:

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

Yuk tashish haqida ma'lumot

Endi to'plangan fayl oxirgi foydalanuvchiga etkazilishi kerak, ya'ni qurilmaga o'rnatiladi.

HockeyApp, AppBlade va boshqalar kabi Development va Ad Hoc tuzilmalarini tarqatish bo'yicha ko'plab xizmatlar mavjud, ammo bu maqolada biz ilovalarni tarqatish uchun mustaqil server haqida gapiramiz.

IOS uchun ilovani o'rnatish 2 bosqichda amalga oshiriladi:

  1. Ilovani o'rnatish manifestini Items Service orqali qabul qilish.
  2. HTTPS orqali manifestda ko'rsatilgan ma'lumotlarga muvofiq *.ipa faylini o'rnatish.

Shunday qilib, biz birinchi navbatda buyruq bilan o'rnatish manifestini (fayl turi *.plist) yaratishimiz kerak:

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

Ko'rib turganingizdek, manifest ilovani yaratishda ishtirok etadigan deyarli barcha parametrlarni o'z ichiga oladi.

Ilova versiyasi ($AppVersion) buyrug'i bilan tekshirilishi mumkin:

defaults read $ProjectDir/Info CFBundleVersion

Parametr $ipaUrl *.ipa faylini yuklab olish uchun to'g'ridan-to'g'ri havolani o'z ichiga oladi. IOS’ning yettinchi versiyasidan ilova HTTPS orqali o‘rnatilishi kerak. Sakkizinchi versiyada manifestning formati biroz o'zgardi: kabi dastur piktogramma sozlamalari bilan bloklar

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

Shunday qilib, ilovani o'rnatish uchun quyidagi havolaga ega oddiy HTML sahifasi kifoya qiladi:

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

Ishlab chiqish va sinov bo'limlari ehtiyojlari uchun Plarium o'zining o'rnatish dasturini yaratdi, bu bizga quyidagilarni beradi:

  • avtonomiya va mustaqillik,
  • kirishni boshqarishni markazlashtirish va "vaqtinchalik" dinamik ravishda yaratilgan havolalar orqali ilovalarni xavfsiz o'rnatish;
  • kengaytiriladigan funksionallik (ya'ni, ishlab chiqish guruhi, agar kerak bo'lsa, etishmayotgan funktsiyalarni mavjud ilovaga birlashtirishi mumkin).

Viktorina

Endi biz ilovani ishlatishdan oldin relizdan oldin sinovdan o'tkazish haqida gaplashamiz TestFlight.

Yuklab olish uchun talab qilinadigan shartlar - App Store imzo profilining turi va yaratilgan API kalitlarining mavjudligi.

Ilovani yuklab olishning bir necha yo'li mavjud:

  • Xcode (tashkilotchi) orqali
  • altool orqali,
  • Xcode (hozirgi Transporter) ning eski versiyalari uchun Application Loader orqali.

Avtomatik yuklab olish uchun ikkita avtorizatsiya usuli mavjud bo'lgan altool ishlatiladi:

  • Ilovaga xos parol,
  • API kaliti.

Ilovani API kaliti yordamida yuklab olish afzalroqdir.

API kalitini olish uchun quyidagi manzilga o'ting aloqa va kalit yarating. *.p8 formatidagi kalitning o'ziga qo'shimcha ravishda bizga ikkita parametr kerak bo'ladi: IssuerID va KeyID.

iOS ilovalarini yaratish va yetkazib berish xususiyatlari

Keyin yuklab olingan kalitni qurish serveriga import qiling:

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

Ilovani TestFlight-ga yuklashdan oldin dasturni tekshirishingiz kerak, biz buni buyruq bilan qilamiz:

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

Qaerda apiKey и apiIssuer API kalitlarini yaratish sahifasidan maydon qiymatlariga ega.

Keyinchalik, muvaffaqiyatli tekshiruvdan so'ng biz dasturni buyruq bilan yuklaymiz --upload-app bir xil parametrlar bilan.

Ilova Apple tomonidan bir yoki ikki kun ichida sinovdan o'tkaziladi va keyin tashqi testerlar uchun mavjud bo'ladi: ularga elektron pochta orqali o'rnatish uchun havolalar yuboriladi.

Altool orqali ilovani yuklab olishning yana bir usuli - Ilovaga xos paroldan foydalanish.

Ilovaga xos parolni olish uchun siz borishingiz kerak aloqa va uni Xavfsizlik bo'limida yarating.

iOS ilovalarini yaratish va yetkazib berish xususiyatlari

Keyinchalik, ushbu parol bilan Keychain-da server yaratish yozuvini yaratishingiz kerak. Xcode-ning 11-versiyasidan bu buyruq bilan amalga oshirilishi mumkin:

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

Qaerda:

$DeveloperName — Apple xizmatlariga kirish uchun foydalaniladigan iOS dasturchi hisobining nomi.

$AppPswd — Ilovaga xos parol yaratildi.

Keyinchalik, biz asc-provayder parametrining qiymatini olamiz va parolni import qilish muvaffaqiyatini buyruq bilan tekshiramiz:

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

Biz natijani olamiz:

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

Ko'rib turganingizdek, talab qilinadigan Short Name qiymati (asc-provayder) biz ilovani yaratishda foydalangan $TeamID parametriga to'g'ri keladi.

Ilovani tekshirish va TestFlight-ga yuklash uchun quyidagi buyruqdan foydalaning:

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

Parametr qiymati sifatida -p qiymatini olishingiz mumkin $AppPswd shifrlanmagan (aniq) shaklda.

Biroq, yuqorida aytib o'tilganidek, ishlash nuqtai nazaridan, avtorizatsiya qilish uchun API kalitini tanlash yaxshidir, chunki Xcode-ning turli versiyalarida ma'lum muammolar mavjud ("Kilitchani ko'rmaydi", yuklash paytida avtorizatsiya xatolari va boshqalar).

Hammasi shu, aslida. Ishtirok etgan har bir kishiga App Store do'konida muvaffaqiyatli qurish va muammosiz nashrlarni tilayman.

Manba: www.habr.com

a Izoh qo'shish