Karakteristikat e ndërtimit dhe shpërndarjes së aplikacioneve iOS

Në këtë artikull, ne ndajmë përvojën e montimit dhe dërgimit të aplikacioneve iOS për përdoruesit, të cilat studio Plarium Krasnodar ka grumbulluar në procesin e korrigjimit të CI/CD.

Karakteristikat e ndërtimit dhe shpërndarjes së aplikacioneve iOS

Trajnimi

Çdo person qĂ« nĂ« njĂ« mĂ«nyrĂ« ose nĂ« njĂ« tjetĂ«r Ă«shtĂ« i pĂ«rfshirĂ« nĂ« zhvillimin e aplikacioneve pĂ«r pajisjet Apple e ka vlerĂ«suar tashmĂ« komoditetin e diskutueshĂ«m tĂ« infrastrukturĂ«s. VĂ«shtirĂ«sitĂ« gjenden kudo: nga menyja e profilit tĂ« zhvilluesit deri te mjetet e korrigjimit dhe ndĂ«rtimit.

Ka shumë artikuj në lidhje me "bazat" në internet, kështu që ne do të përpiqemi të nxjerrim në pah gjënë kryesore. Ja çfarë ju nevojitet për të ndërtuar me sukses aplikacionin tuaj:

  • llogaria e zhvilluesit;
  • bazuar nĂ« pajisje macOS, duke vepruar si njĂ« server ndĂ«rtimi;
  • gjeneruar certifikatĂ«n e zhvilluesit, e cila do tĂ« pĂ«rdoret mĂ« tej pĂ«r nĂ«nshkrimin e aplikacionit;
  • aplikacion i krijuar me unik ID (RĂ«ndĂ«sia e Identifikuesit tĂ« PaketĂ«s duhet tĂ« theksohet, sepse pĂ«rdorimi i ID-sĂ« sĂ« karakterit wild e bĂ«n tĂ« pamundur pĂ«rdorimin e shumĂ« funksioneve tĂ« aplikacionit, pĂ«r shembull: Domenet e lidhura, Njoftimet Push, Hyrja nĂ« Apple dhe tĂ« tjera);
  • profil nĂ«nshkrimet e aplikacionit.

Certifikata e zhvilluesit duhet të gjenerohet nëpërmjet Keychain në çdo pajisje bazuar në macOSLloji i certifikatës është shumë i rëndësishëm. Në varësi të mjedisit të aplikacionit (Zhvillimi, QA, Staging, Prodhimi), ai do të ndryshojë (Zhvillimi ose Shpërndarja), ashtu si edhe lloji i profilit të nënshkrimit të aplikacionit.

Llojet kryesore të profileve:

  • Zhvillimi — Ă«shtĂ« menduar pĂ«r nĂ«nshkrimin e aplikacionit tĂ« ekipit tĂ« zhvillimit, pĂ«rdoret njĂ« certifikatĂ« Zhvillimi (emri i llojit iPhone Zhvilluesi: XXXXX);
  • Ad Hoc - i projektuar pĂ«r nĂ«nshkrimin e njĂ« aplikacioni testimi dhe verifikimin e brendshĂ«m nga departamenti i QA-sĂ«, pĂ«rdoret certifikata e ShpĂ«rndarjes sĂ« zhvilluesit (emri i llojit iPhone ShpĂ«rndarja: XXXXX);
  • App Store - versioni i lĂ«shimit pĂ«r testim tĂ« jashtĂ«m nĂ«pĂ«rmjet TestFlight dhe ngarkimi nĂ« App Store, pĂ«rdoret certifikata e shpĂ«rndarjes sĂ« zhvilluesit.

Gjatë gjenerimit të profileve të Zhvillimit dhe Ad Hoc, tregohet gjithashtu listën e pajisjeve, mbi të cilin mund të instaloni një ndërtim, i cili ju lejon të kufizoni më tej aksesin për përdoruesit. Nuk ka asnjë listë të pajisjeve në profilin e App Store, pasi kontrolli i aksesit gjatë testimit të mbyllur beta trajtohet nga TestFlight, i cili do të diskutohet më vonë.

Për qartësi, mund të paraqisni profilin e zhvilluesit në formën e një tabele më poshtë. Kjo e bën më të lehtë të kuptojmë se cilat parametra na duhen për montim dhe nga t'i marrim ato.

Karakteristikat e ndërtimit dhe shpërndarjes së aplikacioneve iOS

asamble

Për ta bërë më të lehtë ndarjen e asambleve sipas projektit dhe mjedisit, ne përdorim emrat e profileve si p.sh ${ProjectName}_${Instance}, domethënë emri i projektit + shembulli (varet nga mjedisi i aplikacionit: Dev, QA, GD, Staging, Live, e kështu me radhë).

Kur importohet në serverin e ndërtimit, profili ndryshon emrin e tij në një ID unike dhe zhvendoset në dosje /Users/$Username/Library/MobileDevice/Provisioning Profiles (ku $Username korrespondon me emrin e llogarisë së përdoruesit të serverit të ndërtimit).

Ka dy mënyra për të ndërtuar një skedar *.ipa - trashëgimi (PackageApplication) dhe moderne (përmes krijimit dhe eksportit të XcAchive). Metoda e parë konsiderohet e vjetëruar, pasi që nga versioni 8.3, moduli i paketimit të skedarëve të aplikacionit është hequr nga shpërndarja Xcode. Për ta përdorur atë, duhet të kopjoni modulin nga Xcode i vjetër (versioni 8.2 dhe më i hershëm) në dosje:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Dhe pastaj ekzekutoni komandën:

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

Më pas ju duhet të mbledhni skedarin *.app të aplikacionit:

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

Ku:

-workspace - rruga për në skedarin e projektit.

-scheme — skema e pĂ«rdorur, e specifikuar nĂ« projekt.

-derivedDataPath — rruga pĂ«r tĂ« shkarkuar aplikacionin e montuar (*.app).

CODE_SIGN_IDENTITY — emri i llogarisĂ« sĂ« zhvilluesit, i cili mund tĂ« verifikohet nĂ« Keychain (iPhone Zhvilluesi: XXXX XXXXXXX, pa ID-nĂ« e Ekipit nĂ« kllapa).

Karakteristikat e ndërtimit dhe shpërndarjes së aplikacioneve iOS

PROVISIONING_PROFILE — ID e profilit pĂ«r nĂ«nshkrimin e aplikacionit, i cili mund tĂ« merret me komandĂ«n:

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

Nëse aplikacioni përdor një profil shtesë (për shembull, për Push Notifications), atëherë në vend të PROVISIONING_PROFILE tregoni:

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

Më pas, skedari *.app që rezulton duhet të paketohet në *.ipa. Për ta bërë këtë, mund të përdorni një komandë si:

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

MegjithatĂ«, kjo metodĂ« konsiderohet e vjetĂ«ruar nga kĂ«ndvĂ«shtrimi i Apple. ËshtĂ« e rĂ«ndĂ«sishme tĂ« merrni *.ipa duke eksportuar nga arkivi i aplikacionit.

Së pari ju duhet të mbledhni arkivin me komandën:

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

Dallimet qëndrojnë në metodën e montimit dhe opsionet SYNCHRONOUS_SYMBOL_PROCESSING, i cili çaktivizon shkarkimin e simboleve në kohën e ndërtimit.

Më pas duhet të gjenerojmë një skedar me cilësimet e eksportit:

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

Ku:

$Method — mĂ«nyra e dorĂ«zimit, korrespondon me llojin e profilit tĂ« nĂ«nshkrimit tĂ« aplikacionit, domethĂ«nĂ«, pĂ«r Zhvillim vlera do tĂ« jetĂ« zhvillimi, pĂ«r Ad Hoc - ad-hoc, dhe pĂ«r App Store - App-store.

$BundleID — ID-ja e aplikacionit, e cila specifikohet nĂ« cilĂ«simet e aplikacionit. Mund tĂ« kontrolloni me komandĂ«n:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName Đž $ProfileId — CilĂ«simet e ID-sĂ« tĂ« emrit tĂ« zhvilluesit dhe tĂ« profilit tĂ« nĂ«nshkrimit qĂ« janĂ« pĂ«rdorur mĂ« parĂ« dhe duhet tĂ« pĂ«rputhen me vlerat nĂ« cilĂ«simet e eksportit.

$TeamID — njĂ« ID me dhjetĂ« shifra nĂ« kllapa pas emrit tĂ« zhvilluesit, shembull: iPhone Zhvilluesi: 

 (XXXXXXXXXX); mund tĂ« verifikohet nĂ« Keychain.

Më pas, duke përdorur komandën e eksportit, marrim skedarin e nevojshëm *.ipa:

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

Shpërndarje

Tani skedari i mbledhur duhet t'i dorëzohet përdoruesit fundor, domethënë të instalohet në pajisje.

Ka shumë shërbime për shpërndarjen e ndërtimeve të Zhvillimit dhe Ad Hoc, si HockeyApp, AppBlade dhe të tjera, por në këtë artikull do të flasim për një server të pavarur për shpërndarjen e aplikacioneve.

Instalimi i aplikacionit për iOS bëhet në 2 faza:

  1. Marrja e manifestit të instalimit të aplikacionit përmes Shërbimit të Artikujve.
  2. Instalimi i skedarit *.ipa sipas informacionit të specifikuar në manifest përmes HTTPS.

Kështu, së pari duhet të gjenerojmë një manifest instalimi (lloji i skedarit *.plist) me komandën:

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

Siç mund ta shihni, manifesti përmban pothuajse të gjithë parametrat e përfshirë në ndërtimin e aplikacionit.

Versioni i aplikacionit ($AppVersion) mund të kontrollohet me komandën:

defaults read $ProjectDir/Info CFBundleVersion

Parametër $ipaUrl përmban një lidhje të drejtpërdrejtë për të shkarkuar skedarin *.ipa. Nga versioni i shtatë i iOS, aplikacioni duhet të instalohet nëpërmjet HTTPS. Në versionin e tetë, formati i manifestit ka ndryshuar pak: blloqe me cilësime për ikonat e aplikacioneve si

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

Kështu, për të instaluar aplikacionin, mjafton një faqe e thjeshtë HTML me një lidhje si kjo:

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

Për nevojat e departamenteve të zhvillimit dhe testimit, Plarium ka krijuar aplikacionin e vet të instalimit të ndërtimit, i cili na jep:

  • autonominĂ« dhe pavarĂ«sinĂ«,
  • centralizimi i kontrollit tĂ« aksesit dhe instalimi i sigurt i aplikacioneve pĂ«rmes lidhjeve "tĂ« pĂ«rkohshme" tĂ« krijuara nĂ« mĂ«nyrĂ« dinamike,
  • funksionalitet i zgjerueshĂ«m (d.m.th., ekipi i zhvillimit, nĂ«se Ă«shtĂ« e nevojshme, mund tĂ« integrojĂ« funksionet qĂ« mungojnĂ« nĂ« njĂ« aplikacion ekzistues).

Testimi

Tani do të flasim për testimin para publikimit të aplikacionit duke përdorur TestFlight.

Kushtet e kërkuara për shkarkim janë lloji i profilit të nënshkrimit të App Store dhe prania e çelësave të gjeneruar API.

Ka disa mënyra për të shkarkuar aplikacionin:

  • nĂ«pĂ«rmjet Xcode (Organizator),
  • me anĂ« tĂ« mjetit,
  • nĂ«pĂ«rmjet Application Loader pĂ«r versionet mĂ« tĂ« vjetra tĂ« Xcode (tani Transporter).

Për shkarkimin automatik, përdoret altool, i cili gjithashtu ka dy metoda autorizimi:

  • FjalĂ«kalimi specifik pĂ«r aplikacionin,
  • ÇelĂ«si API.

Preferohet të shkarkoni aplikacionin duke përdorur çelësin API.

Për të marrë çelësin API, shkoni te lidhje dhe gjeneroni një çelës. Përveç vetë çelësit në formatin *.p8, do të na duhen dy parametra: IssuerID dhe KeyID.

Karakteristikat e ndërtimit dhe shpërndarjes së aplikacioneve iOS

Tjetra, importoni çelësin e shkarkuar në serverin e ndërtimit:

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

Para se të ngarkoni aplikacionin në TestFlight, duhet të vërtetoni aplikacionin, ne e bëjmë këtë me komandën:

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

ku apiKey О apiIssuer keni vlerat e fushës nga faqja e gjenerimit të çelësave API.

Më pas, pas vërtetimit të suksesshëm, ne ngarkojmë aplikacionin me komandën --upload-app me të njëjtat parametra.

Aplikacioni do të testohet nga Apple brenda një ose dy ditësh dhe më pas do të bëhet i disponueshëm për testuesit e jashtëm: atyre do t'u dërgohen lidhje me email për instalim.

Një mënyrë tjetër për të shkarkuar një aplikacion përmes altool është përdorimi i Fjalëkalimit specifik të aplikacionit.

Për të marrë fjalëkalimin specifik të aplikacionit, duhet të shkoni te lidhje dhe gjeneroni atë në seksionin e Sigurisë.

Karakteristikat e ndërtimit dhe shpërndarjes së aplikacioneve iOS

Më pas, duhet të krijoni një rekord të serverit të ndërtuar në Keychain me këtë fjalëkalim. Nga versioni 11 i Xcode kjo mund të bëhet me komandën:

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

Ku:

$DeveloperName — emri i llogarisĂ« sĂ« zhvilluesit iOS qĂ« pĂ«rdoret pĂ«r tĂ« hyrĂ« nĂ« shĂ«rbimet e Apple.

$AppPswd — FjalĂ«kalimi specifik i krijuar pĂ«r aplikacionin.

Më pas, marrim vlerën e parametrit të ofruesit asc dhe kontrollojmë suksesin e importimit të fjalëkalimit me komandën:

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

Ne marrim rezultatin:

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

Siç mund ta shihni, vlera e kërkuar e Short Name (asc-provider) përkon me parametrin $TeamID që kemi përdorur gjatë ndërtimit të aplikacionit.

Për të vërtetuar dhe ngarkuar aplikacionin në TestFlight, përdorni komandën:

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

Si vlerë parametri -p ju mund të merrni vlerën $AppPswd në formë të pakriptuar (të qartë).

Sidoqoftë, siç u përmend tashmë, nga pikëpamja e performancës, është më mirë të zgjidhni çelësin API për autorizimin altool, pasi versione të ndryshme të Xcode kanë probleme të caktuara ("nuk e sheh" Keychain, gabime autorizimi gjatë ngarkimit, etj.).

Kjo është e gjitha, në fakt. I uroj të gjithëve të përfshirë në ndërtime të suksesshme dhe lëshime pa probleme në App Store.

Burimi: www.habr.com

Bleni njĂ« host tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, serverĂ« VPS VDS đŸ”„ Bleni hosting tĂ« besueshĂ«m tĂ« faqeve tĂ« internetit me mbrojtje DDoS, servera VPS VDS | ProHoster