Taybetmendiyên avakirin û radestkirina sepanên iOS

Di vê gotarê de, em ezmûna civandin û radestkirina serîlêdanên iOS-ê ji bikarhêneran re parve dikin, ku studyoya Plarium Krasnodar di pêvajoya debugkirina CI/CD-ê de berhev kiriye.

Taybetmendiyên avakirin û radestkirina sepanên iOS

Amadekirin

Her kesê ku bi rengek an yekî din beşdarî pêşkeftina serîlêdanên ji bo cîhazên Apple-ê ye, jixwe rehetiya nakokî ya binesaziyê teqdîr kiriye. Zehmetî li her derê têne dîtin: ji pêşeka profîla pêşdebiran bigire heya amûran û amûrên çêkirinê.

Li ser Înternetê di derbarê "bingehîn" de gelek gotar hene, ji ber vê yekê em ê hewl bidin ku tiştê sereke ronî bikin. Ya ku hûn hewce ne ku hûn serîlêdana xwe bi serfirazî ava bikin ev e:

  • hesabê pêşdebiran;
  • amûrek macOS-ê ku wekî serverek çêkirinê tevdigere;
  • çêkirin sertîfîkaya pêşdebiran, ku dê ji bo îmzekirina serîlêdanê bêtir were bikar anîn;
  • serîlêdana bi yekta hatî afirandin ID (Divê girîngiya Nasnameya Bundle-ê were zanîn, ji ber ku karanîna ID-ya guhêrbar nepêkan e ku meriv gelek fonksiyonên serîlêdanê bikar bîne, mînakî: Domên Têkildar, Agahiyên Push, Têkeve Apple û yên din);
  • profîl îmzeyên sepanê.

Pêdivî ye ku sertîfîkayek pêşdebir bi navgîniya Keychain-ê li ser her amûrek macOS-ê were afirandin. Cureyê sertîfîkayê pir girîng e. Li gorî hawîrdora serîlêdanê (Dev, QA, Staging, Hilberîn) ew ê cûda bibe (Pêşveçûn an Belavkirin), wekî celebê profîla îmzeya serîlêdanê.

Cûreyên sereke yên profîlan:

  • Pêşveçûn - ji bo îmzekirina serîlêdana tîmê pêşkeftinê tête armanc kirin, sertîfîkaya Pêşkeftinê tête bikar anîn (navê binivîsin Pêşvebir iPhone: XXXX);
  • Ad Hoc - ji bo îmzekirina serîlêdana ceribandinê û verastkirina hundurîn ji hêla beşa QA ve hatî armanc kirin, sertîfîkaya Belavkirina pêşdebiran tê bikar anîn (navê binivîsin Belavkirina iPhone: XXXX);
  • App Store - ji bo ceribandina derveyî bi navgîniya TestFlight û barkirina li App Store-ê avakirina berdanê, sertîfîkaya Belavkirina pêşdebiran tê bikar anîn.

Dema ku profîlên Pêşveçûn û Ad Hoc têne çêkirin, ew jî tê destnîşan kirin lîsteya cîhazên, li ser ku hûn dikarin avahiyek saz bikin, ku destûrê dide we ku hûn gihîştina bikarhêneran bêtir sînordar bikin. Di profîla App Store-ê de navnîşek cîhazan tune, ji ber ku kontrola gihîştinê di dema ceribandina beta ya girtî de ji hêla TestFlight ve tê rêve kirin, ku dê paşê were nîqaş kirin.

Ji bo zelaliyê, hûn dikarin profîla pêşdebiran di forma tabloyek jêrîn de pêşkêş bikin. Ev hêsantir dike ku em fêm bikin ka kîjan pîvanên ji bo meclîsê hewce ne û ji ku derê wan bigirin.

Taybetmendiyên avakirin û radestkirina sepanên iOS

Meclîsa

Ji bo ku veqetandina meclîsan ji hêla proje û hawîrdorê ve hêsantir bikin, em navên profîlan ên mîna bikar tînin ${ProjectName}_${Instance}, ango, navê projeyê + mînak (girêdayî hawîrdora serîlêdanê ye: Dev, QA, GD, Staging, Live, û hwd.).

Dema ku ji servera avakirinê re tê şandin, profîl navê xwe diguhezîne nasnameyek bêhempa û di peldankê de tê veguheztin /Users/$Username/Library/MobileDevice/Provisioning Profiles (ko $Username bi navê hesabê bikarhêner a servera çêkirinê re têkildar e).

Du awayên avakirina pelê *.ipa hene - mîras (PackageApplication) û nûjen (bi riya XcAchive afirandin û hinardekirinê). Rêbaza yekem qedîm tê hesibandin, ji ber ku ji guhertoya 8.3 ve modula pakkirina pelê sepanê ji belavkirina Xcode hatî rakirin. Ji bo karanîna wê, hûn hewce ne ku modulê ji Xcode-ya kevn (guhertoya 8.2 û berê) li peldankê kopî bikin:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Û paşê fermanê bimeşîne:

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

Piştre hûn hewce ne ku pelê *.app ya serîlêdanê berhev bikin:

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

Çu:

-workspace - riya pelê projeyê.

-scheme - nexşeya hatî bikar anîn, di projeyê de hatî destnîşan kirin.

-derivedDataPath - riya dakêşana serîlêdana berhevkirî (*.app).

CODE_SIGN_IDENTITY - Navê hesabê pêşdebir, ku dikare di Keychain-ê de were verast kirin (Pêşvebirê iPhone: XXXX XXXXXXX, bêyî TeamID di nav kevanan de).

Taybetmendiyên avakirin û radestkirina sepanên iOS

PROVISIONING_PROFILE - Nasnameya profîlê ya ji bo îmzekirina serîlêdanê, ku dikare bi fermanê were wergirtin:

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

Ger serîlêdan profîlek zêde bikar tîne (mînak, ji bo Push Notifications), wê hingê li şûna PROVISIONING_PROFILE nîşandan:

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

Dûv re, pelê *.appê ya ku derketiye divê di *.ipa de were pak kirin. Ji bo vê yekê, hûn dikarin fermanek wekî bikar bînin:

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

Lêbelê, ev rêbaz ji hêla Apple-ê ve kevnar tête hesibandin. Girîng e ku hûn *.ipa bi hinardekirina ji arşîva serîlêdanê bistînin.

Pêşî hûn hewce ne ku arşîvê bi fermanê berhev bikin:

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

Cûdahî di rêbaz û vebijarkên kombûnê de ne SYNCHRONOUS_SYMBOL_PROCESSING, ku di dema çêkirinê de barkirina sembolê asteng dike.

Piştre em hewce ne ku pelek bi mîhengên hinardekirinê çêbikin:

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

Çu:

$Method - awayê radestkirinê, bi celebê profîla îmzeya serîlêdanê re têkildar e, ango ji bo Pêşkeftinê nirx dê pêşkeftinê be, ji bo Ad Hoc - ad-hoc, û ji bo App Store - app-store.

$BundleID - Nasnameya serîlêdanê, ku di mîhengên serîlêdanê de tête diyar kirin. Hûn dikarin bi fermanê kontrol bikin:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId - Navê pêşdebir û mîhengên ID-a profîla îmzeyê yên ku berê hatine bikar anîn û divê di mîhengên hinardekirinê de bi nirxan re li hev bikin.

$TeamID - Nasnameya deh-hejmarî di nav kevanan de piştî navê pêşdebiran, mînak: Pêşdebirê iPhone: …… (XXXXXXXXXX); dikare di Keychain de were kontrol kirin.

Dûv re, bi karanîna fermana hinardekirinê, em pelê *.ipa-ya pêwîst distînin:

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

Agahdariya kirînê

Naha pelê berhevkirî pêdivî ye ku ji bikarhênerê dawî re were radest kirin, ango li ser cîhazê were saz kirin.

Ji bo belavkirina Pêşveçûn û Avahiyên Ad Hoc, wek HockeyApp, AppBlade û yên din, gelek karûbar hene, lê di vê gotarê de em ê li ser serverek serbixwe ji bo belavkirina sepanan biaxivin.

Sazkirina serîlêdanê ji bo iOS di 2 qonaxan de pêk tê:

  1. Wergirtina manîfestoya sazkirina serîlêdanê bi navgîniya Karûbarê Tiştan.
  2. Sazkirina pelê *.ipa li gorî agahdariya ku di manîfestoyê de bi riya HTTPS hatî destnîşan kirin.

Bi vî rengî, em pêşî hewce ne ku bi fermanê manîfestoyek sazkirinê (cureya pelê *.plist) biafirînin:

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

Wekî ku hûn dibînin, manîfesto hema hema hemî pîvanên ku di avakirina serîlêdanê de têkildar in vedihewîne.

Guhertoya serîlêdanê ($AppVersion) dikare bi fermanê were kontrol kirin:

defaults read $ProjectDir/Info CFBundleVersion

Parîsê $ipaUrl girêdanek rasterast heye ku pelê *.ipa dakêşîne. Ji guhertoya heftemîn a iOS-ê, divê serîlêdan bi rêya HTTPS-ê were saz kirin. Di guhertoya heştemîn de, forma manîfestoyê hinekî guherî: blokên bi mîhengên ji bo îkonên serîlêdanê yên mîna

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

Ji ber vê yekê, ji bo sazkirina serîlêdanê, rûpelek HTML-a hêsan a bi girêdanek bi vî rengî bes e:

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

Ji bo hewcedariyên beşên pêşkeftin û ceribandinê, Plarium serîlêdana sazkirina avakirina xweya xwe çêkir, ku dide me:

  • otonomî û serxwebûn,
  • navendîkirina kontrolkirina gihîştinê û sazkirina ewledar a sepanan bi navgîniya girêdanên dînamîkî yên "demkî" hatine afirandin,
  • fonksiyona berbelavkirî (ango, tîmê pêşkeftinê, ger hewce be, dikare fonksiyonên winda di serîlêdanek heyî de yek bike).

Îmtîhanê

Naha em ê li ser ceribandina pêşdibistanê ya karanîna serîlêdanê biaxivin firîna ceribandinê.

Şertên pêwîst ji bo dakêşandinê celebê profîla îmzeya App Store û hebûna bişkojkên API-yê yên çêkirî ne.

Gelek awayên dakêşana serîlêdanê hene:

  • bi rêya Xcode (Organizer),
  • bi rêya altool,
  • bi rêya Application Loader ji bo guhertoyên kevntir ên Xcode (niha Transporter).

Ji bo dakêşana otomatîk, altool tê bikar anîn, ku di heman demê de du awayên destûrnameyê jî hene:

  • Şîfreya Taybet-App,
  • Mifteya API.

Pêşkêş e ku hûn serîlêdanê bi karanîna Mifteya API-ê dakêşin.

Ji bo ku bişkojka API-ê bistînin, biçin link û mifteyek çêbikin. Ji bilî mifteya xwe ya di forma *.p8 de, em ê hewceyê du parameteran bikin: IssuerID û KeyID.

Taybetmendiyên avakirin û radestkirina sepanên iOS

Dûv re, mifteya dakêşandî têxe servera çêkirinê:

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

Berî barkirina serîlêdanê li TestFlight, hûn hewce ne ku serîlêdanê rast bikin, em vê yekê bi fermanê dikin:

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

Derê apiKey и apiIssuer ji rûpela hilberîna mifteya API-ê nirxên zeviyê hene.

Dûv re, piştî pejirandina serketî, em serîlêdanê bi fermanê bar dikin --upload-app bi heman pîvanan.

Serlêdan dê di nav yek an du rojan de ji hêla Apple ve were ceribandin û dûv re dê ji ceribandinên derveyî re peyda bibe: ji bo sazkirinê dê ji wan re lînkên e-nameyê werin şandin.

Rêyek din ku meriv serîlêdanek bi altool dakêşîne ev e ku hûn şîfreya App-taybet bikar bînin.

Ji bo ku hûn şîfreya App-taybet bistînin hûn hewce ne ku biçin link û wê di beşa Ewlekariyê de biafirînin.

Taybetmendiyên avakirin û radestkirina sepanên iOS

Dûv re, divê hûn bi vê şîfreyê di Keychain-ê de tomarek serverek çêkirî biafirînin. Ji guhertoya 11 ya Xcode ev dikare bi fermanê were kirin:

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

Çu:

$DeveloperName - Navê hesabê pêşdebirê iOS-ê ku ji bo têketina karûbarên Apple-ê tê bikar anîn.

$AppPswd - Ji hêla şîfreya App-Specific ve hatî çêkirin.

Dûv re, em nirxa parametreya asc-provider werdigirin û bi fermanê serkeftina importa şîfreyê kontrol dikin:

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

Em encam digirin:

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

Wekî ku hûn dibînin, nirxa Navê Kurte ya pêwîst (asc-provider) bi parametreya $TeamID ya ku me dema çêkirina serîlêdanê bikar anî hev re dike.

Ji bo pejirandin û barkirina serîlêdanê li TestFlight, emrê bikar bînin:

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

Wek nirxek parametre -p hûn dikarin nirxê bigirin $AppPswd bi forma neşîfrekirî (eşkere).

Lêbelê, wekî ku berê jî behs kir, ji hêla performansê ve, çêtir e ku meriv Key API-ê ji bo destûrnameya altool hilbijêrin, ji ber ku guhertoyên cihêreng ên Xcode hin pirsgirêk hene ("Nabîne" Keychain, xeletiyên destûrnameyê di dema barkirinê de, hwd.).

Bi rastî ev hemû ye. Ez ji her kesê ku di App Store-ê de avahîsaziyên serfiraz û serbestberdanên bê pirsgirêk beşdar bibin dixwazim.

Source: www.habr.com

Add a comment