Izici zokwakha nokuletha izinhlelo zokusebenza ze-iOS

Kulesi sihloko, sabelana ngesipiliyoni sokuhlanganisa nokuletha izinhlelo zokusebenza ze-iOS kubasebenzisi, isitudiyo se-Plarium Krasnodar esiqoqwe ohlelweni lokulungisa iphutha le-CI/CD.

Izici zokwakha nokuletha izinhlelo zokusebenza ze-iOS

Training

Wonke umuntu obambe iqhaza ngandlela thize ekwakhiweni kwezicelo zamadivayisi we-Apple usevele uyakwazisa ukusebenziseka okuyimpikiswano kwengqalasizinda. Ubunzima butholakala yonke indawo: kusukela kumenyu yephrofayela kanjiniyela ukuya ekususeni iphutha namathuluzi okwakha.

Kunenqwaba yezihloko mayelana "nezisekelo" ku-inthanethi, ngakho-ke sizozama ukugqamisa into esemqoka. Nakhu okudingayo ukuze wakhe isicelo sakho ngempumelelo:

  • i-akhawunti kanjiniyela;
  • idivayisi esekelwe ku-macOS esebenza njengeseva yokwakha;
  • kukhiqizwa isitifiketi sikanjiniyela, esizophinde sisetshenziselwe ukusayina isicelo;
  • isicelo wakhiwe nge unique ID (ukubaluleka Kwesihlonzi Senqwaba kufanele kuqashelwe, ngoba ukusetshenziswa kwe-ID ye-wildcard kwenza kungenzeki ukusebenzisa imisebenzi eminingi yohlelo lokusebenza, isibonelo: Izizinda Ezihlotshaniswayo, Izaziso Zokusunduza, Ukungena Ngemvume kwe-Apple nokunye);
  • iphrofayili amasiginesha ezicelo.

Isitifiketi sikanjiniyela kufanele senziwe nge-Keychain kunoma iyiphi idivayisi ye-macOS. Uhlobo lwesitifiketi lubaluleke kakhulu. Ngokuya ngendawo yohlelo lokusebenza (i-Dev, QA, Staging, Production) izohluka (Ukuthuthukiswa noma Ukusabalalisa), njengoba kuzoba nohlobo lwephrofayela yesiginesha yohlelo lokusebenza.

Izinhlobo eziyinhloko zamaphrofayela:

  • Ukuthuthukiswa - okuhloselwe ukusayina isicelo sethimba lokuthuthukisa, kusetshenziswa isitifiketi Sokuthuthukiswa (uhlobo lwegama elithi iPhone Developer: XXXXX);
  • I-Ad Hoc - ehloselwe ukusayina isicelo sokuhlolwa nokuqinisekiswa kwangaphakathi umnyango we-QA, isitifiketi sikanjiniyela Sokusabalalisa siyasetshenziswa (uhlobo lwegama elithi iPhone Distribution: XXXXX);
  • Isitolo Sohlelo Lokusebenza - ukukhishwa kokwakhiwa kokuhlolwa kwangaphandle nge-TestFlight futhi kulayishwe ku-App Store, isitifiketi sikanjiniyela Sokusabalalisa siyasetshenziswa.

Uma kukhiqizwa amaphrofayili Okuthuthukisa kanye ne-Ad Hoc, kuyaboniswa futhi uhlu lwedivayisi, lapho ungafaka khona ibhilidi, elikuvumela ukuthi uqhubeke nokukhawulela ukufinyelela kubasebenzisi. Alukho uhlu lwamadivayisi kuphrofayela ye-App Store, njengoba ukulawula ukufinyelela ngesikhathi sokuhlolwa kwe-beta evaliwe kuphathwa i-TestFlight, okuzoxoxwa ngayo kamuva.

Ukuze uthole ukucaciseleka, ungakwazi ukwethula iphrofayela yonjiniyela ngendlela yethebula elingezansi. Lokhu kwenza kube lula ukuqonda ukuthi yimaphi amapharamitha esiwadingayo ukuze sihlanganise nokuthi singawatholaphi.

Izici zokwakha nokuletha izinhlelo zokusebenza ze-iOS

Umhlangano

Ukwenza kube lula ukuhlukanisa ama-assemblies ngephrojekthi nendawo, sisebenzisa amagama wephrofayela afana ${ProjectName}_${Instance}, okungukuthi, igama lephrojekthi + isibonelo (kuncike endaweni yesicelo: Dev, QA, GD, Staging, Live, njalonjalo).

Uma ingeniswe kuseva yokwakha, iphrofayela ishintsha igama layo libe yi-ID ehlukile futhi ithuthelwa kufolda /Users/$Username/Library/MobileDevice/Provisioning Profiles (lapho $Username ihambisana negama le-akhawunti yomsebenzisi yeseva yokwakha).

Kunezindlela ezimbili zokwakha ifayela *.ipa - ifa (PackageApplication) kanye nesimanje (ngokudala nokuthekelisa kwe-XcAchive). Indlela yokuqala ithathwa njengengasebenzi, njengoba inguqulo 8.3 imojula yokupakishwa kwefayela lohlelo lokusebenza isusiwe ekusabalaliseni kwe-Xcode. Ukuze uyisebenzise, ​​udinga ukukopisha imojula ukusuka ku-Xcode endala (inguqulo engu-8.2 nangaphambili) uyifake kufolda:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Bese ugijima umyalo:

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

Okulandelayo udinga ukuqoqa ifayela *.app lohlelo lokusebenza:

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

Kuphi:

-workspace - indlela eya kufayela lephrojekthi.

-scheme - uhlelo olusetshenzisiwe, olushiwo kuphrojekthi.

-derivedDataPath — indlela yokulanda uhlelo oluhlanganisiwe (*.app).

CODE_SIGN_IDENTITY — igama le-akhawunti kanjiniyela, elingaqinisekiswa ku-Keychain (I-iPhone Developer: XXXX XXXXXXX, ngaphandle kwe-TeamID kubakaki).

Izici zokwakha nokuletha izinhlelo zokusebenza ze-iOS

PROVISIONING_PROFILE - I-ID yephrofayili yokusayina isicelo, engatholwa ngomyalo:

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

Uma uhlelo lokusebenza lusebenzisa iphrofayili eyengeziwe (ngokwesibonelo, Izaziso Zokusunduza), kunalokho PROVISIONING_PROFILE khombisa:

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

Okulandelayo, ifayela elingumphumela *.app kufanele lipakishwe kokuthi *.ipa. Ukuze wenze lokhu, ungasebenzisa umyalo onjengokuthi:

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

Kodwa-ke, le ndlela ibhekwa njengengasebenzi ngokombono we-Apple. Kuyafaneleka ukuthola *.ipa ngokuthumela kusuka kungobo yomlando yohlelo lokusebenza.

Okokuqala udinga ukuqoqa ingobo yomlando ngomyalo:

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

Umehluko ulele endleleni yokuhlanganisa kanye nezinketho SYNCHRONOUS_SYMBOL_PROCESSING, evimbela ukulayishwa kophawu ngesikhathi sokwakha.

Okulandelayo sidinga ukukhiqiza ifayela elinezilungiselelo zokuthekelisa:

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

Kuphi:

$Method — indlela yokulethwa, ihambisana nohlobo lwephrofayela yesiginesha yohlelo lokusebenza, okungukuthi, Kwezokuthuthukiswa inani lizoba ukuthuthukiswa, kwe-Ad Hoc - ad-hoc, kanye ne-App Store - isitolo sohlelo lokusebenza.

$BundleID - I-ID yohlelo lokusebenza, eshiwo kuzilungiselelo zohlelo lokusebenza. Ungahlola ngomyalo:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId - Igama likanjiniyela kanye nezilungiselelo ze-ID yephrofayili yesiginesha ezike zasetshenziswa ngaphambilini futhi kufanele zifane namanani kuzilungiselelo zokuthekelisa.

$TeamID — I-ID enezinhlamvu eziyishumi kubakaki ngemva kwegama likanjiniyela, isibonelo: I-iPhone Developer: …… (XXXXXXXXXXXX); ingahlolwa ku-Keychain.

Okulandelayo, sisebenzisa umyalo wokuthekelisa, sithola ifayela elidingekayo *.ipa:

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

Ulwazi lokuthumela

Manje ifayela eliqoqiwe lidinga ukulethwa kumsebenzisi wokugcina, okungukuthi, lifakwe kudivayisi.

Kunezinsizakalo eziningi zokusabalalisa ukwakhiwa kwe-Development kanye ne-Ad Hoc, njenge-HockeyApp, i-AppBlade nezinye, kodwa kulesi sihloko sizokhuluma ngeseva ezimele yokusabalalisa izinhlelo zokusebenza.

Ukufaka isicelo se-iOS kwenzeka ngezigaba ezi-2:

  1. Ukwamukela i-manifest yokufaka yohlelo lokusebenza Ngesevisi Yezinto.
  2. Ukufakwa kwefayela *.ipa ngokolwazi olucaciswe ku-manifest nge-HTTPS.

Ngakho, sidinga kuqala ukukhiqiza i-manifest yokufaka (uhlobo lwefayela *.plist) ngomyalo:

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

Njengoba ubona, i-manifest iqukethe cishe yonke imingcele ehilelekile ekwakheni uhlelo lokusebenza.

Inguqulo yohlelo lokusebenza ($AppVersion) ingahlolwa ngomyalo:

defaults read $ProjectDir/Info CFBundleVersion

Ipharamitha $ipaUrl iqukethe isixhumanisi esiqondile sokulanda ifayela *.ipa. Kusukela kunguqulo yesikhombisa ye-iOS, uhlelo lokusebenza kufanele lufakwe nge-HTTPS. Enguqulweni yesishiyagalombili, ifomethi ye-manifest ishintshe kancane: amabhlogo anezilungiselelo zezithonjana zohlelo lokusebenza ezifana

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

Ngakho-ke, ukufaka uhlelo lokusebenza, ikhasi le-HTML elilula elinesixhumanisi esinjengalesi kwanele:

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

Ngezidingo zeminyango yezokuthuthukiswa nokuhlola, i-Plarium idale eyayo isicelo sokufakwa kokwakha, esisinika:

  • ukuzimela nokuzimela,
  • ukufakwa endaweni eyodwa kokulawula ukufinyelela kanye nokufakwa okuvikelekile kwezinhlelo zokusebenza ngokusebenzisa izixhumanisi "zesikhashana" ezidalwe ngamandla,
  • ukusebenza okunwebekayo (okungukuthi, ithimba lokuthuthukisa, uma kunesidingo, lingahlanganisa imisebenzi engekho kuhlelo lokusebenza olukhona).

Ukuhlola

Manje sizokhuluma ngokuhlolwa kwangaphambi kokukhishwa kohlelo lokusebenza kusetshenziswa I-TestFlight.

Izimo ezidingekayo zokulandwa ziwuhlobo lwephrofayela yesiginesha ye-App Store kanye nokuba khona kokhiye abakhiqiziwe be-API.

Kunezindlela eziningana zokulanda uhlelo lokusebenza:

  • nge-Xcode (Umhleli),
  • ngokusebenzisa i-altool,
  • nge-Application Loader yezinguqulo ezindala ze-Xcode (manje i-Transporter).

Ukulanda okuzenzakalelayo, i-altool isetshenziswa, enezindlela ezimbili zokugunyazwa:

  • Iphasiwedi eqondene nohlelo lokusebenza,
  • Ukhiye we-API.

Kungcono ukulanda uhlelo lokusebenza usebenzisa ukhiye we-API.

Ukuze uthole ukhiye we-API, yiya ku isixhumanisi futhi ukhiqize ukhiye. Ngokungeziwe kukhiye ngokwawo ngefomethi *.p8, sizodinga amapharamitha amabili: IssuerID ne-KeyID.

Izici zokwakha nokuletha izinhlelo zokusebenza ze-iOS

Okulandelayo, ngenisa ukhiye olandiwe kuseva yokwakha:

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

Ngaphambi kokulayisha uhlelo lokusebenza ku-TestFlight, udinga ukuqinisekisa uhlelo lokusebenza, sikwenza lokhu ngomyalo:

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

Kuphi apiKey и apiIssuer babe namanani enkambu asuka ekhasini lokukhiqiza ukhiye we-API.

Okulandelayo, lapho siqinisekisa ngempumelelo, silayisha uhlelo lokusebenza ngomyalo --upload-app namapharamitha afanayo.

Uhlelo lokusebenza luzohlolwa yi-Apple zingakapheli usuku olulodwa noma ezimbili bese lutholakala kubahloli bangaphandle: bazothunyelwa izixhumanisi nge-imeyili ukuze bafakwe.

Enye indlela yokulanda uhlelo nge-altool ukusebenzisa Iphasiwedi Ecacisiwe Yohlelo Lokusebenza.

Ukuze uthole Iphasiwedi Eqondile Yohlelo Lokusebenza udinga ukuya kulo isixhumanisi futhi uyikhiqize esigabeni Sezokuphepha.

Izici zokwakha nokuletha izinhlelo zokusebenza ze-iOS

Okulandelayo, kufanele udale irekhodi leseva yokwakha ku-Keychain ngale phasiwedi. Kusuka kunguqulo 11 ye-Xcode lokhu kungenziwa ngomyalo:

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

Kuphi:

$DeveloperName — igama le-akhawunti yonjiniyela we-iOS esetshenziswa ukungena kumasevisi e-Apple.

$AppPswd - Kukhiqizwe Iphasiwedi Eqondile Yohlelo Lokusebenza.

Okulandelayo, sithola inani lepharamitha yomhlinzeki we-asc futhi sihlole impumelelo yokungenisa iphasiwedi ngomyalo:

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

Sithola okukhiphayo:

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

Njengoba ubona, inani elidingekayo Legama Elifushane (umhlinzeki we-asc) lihambisana nepharamitha ye-$TeamID esiyisebenzise lapho kwakhiwa uhlelo lokusebenza.

Ukuze uqinisekise futhi ulayishe uhlelo lokusebenza ku-TestFlight, sebenzisa umyalo:

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

Njengevelu yepharamitha -p ungathatha inani $AppPswd ngefomu elingabetheliwe (elicacile).

Kodwa-ke, njengoba sekushiwo kakade, ngokombono wokusebenza, kungcono ukukhetha i-API Key yokugunyazwa kwe-altool, ngoba izinguqulo ezahlukene ze-Xcode zinezinkinga ezithile ("ayiboni" i-Keychain, amaphutha okugunyaza ngesikhathi sokulayisha, njll.).

Yilokho kuphela, empeleni. Ngifisa wonke umuntu obambe iqhaza ekwakheni ngempumelelo nokukhishwa okungenazinkinga ku-App Store.

Source: www.habr.com

Engeza amazwana