Iimpawu zokwakha kunye nokuhanjiswa kwezicelo ze-iOS

Kule nqaku, sabelana ngamava okudibanisa kunye nokuhambisa izicelo ze-iOS kubasebenzisi, apho i-studio ye-Plarium Krasnodar iqokelele kwinkqubo yokuguqula i-CI / CD.

Iimpawu zokwakha kunye nokuhanjiswa kwezicelo ze-iOS

Ukulungiselela

Wonke umntu obandakanyekayo ngandlela thile kuphuhliso lwezicelo zezixhobo ze-Apple sele eyixabisile impikiswano yeziseko ezingundoqo. Ubunzima bufumaneka kuyo yonke indawo: ukusuka kwimenyu yeprofayile yomphuhlisi ukuya kwi-debug kunye nezixhobo zokwakha.

Kukho amanqaku amaninzi malunga "neziseko" kwi-Intanethi, ngoko siya kuzama ukugxininisa into ephambili. Nantsi into oyifunayo ukuze wakhe isicelo sakho ngempumelelo:

  • iakhawunti yomphuhlisi;
  • isixhobo esisekwe kwi-macOS esisebenza njengomncedisi wokwakha;
  • yenziwe isatifikethi somphuhlisi, eza kusetyenziswa kwakhona ukusayina isicelo;
  • usetyenziso olwenziweyo olukhethekileyo ID (ukubaluleka kwe-Identifier ye-Bundle kufuneka kuqatshelwe, kuba ukusetyenziswa kwe-ID ye-wildcard kwenza kube nzima ukusebenzisa imisebenzi emininzi yesicelo, umzekelo: i-Domains edibeneyo, i-Push Notifications, i-Apple Sign In kunye nabanye);
  • iprofayili izicelo zokutyikitya.

Isatifikethi somphuhlisi kufuneka senziwe nge-Keychain kuso nasiphi na isixhobo se-macOS. Uhlobo lwesatifikethi lubaluleke kakhulu. Ngokuxhomekeke kwimeko yesicelo (i-Dev, i-QA, i-Staging, iMveliso) iya kwahluka (uPhuhliso okanye ukusabalalisa), njengoko kuya kuba nohlobo lweprofayili yesiginesha yesicelo.

Iintlobo eziphambili zeeprofayile:

  • Uphuhliso - olujoliswe ekutyikityeni isicelo seqela lophuhliso, isatifikethi soPhuhliso sisetyenziswa (uhlobo lwegama elithi iPhone Developer: XXXXX);
  • I-Ad Hoc-yenzelwe ukusayina isicelo sovavanyo kunye nokuqinisekiswa kwangaphakathi lisebe le-QA, isatifikethi soSabelo somphuhlisi sisetyenziswa (uhlobo lwegama loSasazo lwe-iPhone: XXXXX);
  • I-App Store - ukukhutshwa kokwakhiwa kovavanyo lwangaphandle ngeTestFlight kunye nokulayisha kwi-App Store, isatifiketi soSabelo somphuhlisi sisetyenziswa.

Xa uvelisa iiprofayili zoPhuhliso kunye ne-Ad Hoc, kuyaboniswa kwakhona uluhlu lwezixhobo, apho unokufakela khona ukwakha, okukuvumela ukuba uthintele ngakumbi ukufikelela kubasebenzisi. Akukho luhlu lwezixhobo kwiprofayili ye-App Store, ekubeni ulawulo lokufikelela ngexesha lovavanyo oluvaliweyo lwe-beta luphathwa yi-TestFlight, eya kuxutyushwa kamva.

Ukucaca, ungabonisa iprofayile yomphuhlisi ngendlela yetheyibhile engezantsi. Oku kwenza kube lula ukuqonda ukuba zeziphi iiparamitha esizidingayo ukuze sidityaniswe kwaye sizithathe phi.

Iimpawu zokwakha kunye nokuhanjiswa kwezicelo ze-iOS

Ndibano

Ukwenza kube lula ukwahlula iindibano ngeprojekthi kunye nokusingqongileyo, sisebenzisa amagama eprofayile afana ${ProjectName}_${Instance}, oko kukuthi, igama leprojekthi + umzekelo (kuxhomekeke kwimeko yesicelo: Dev, QA, GD, Staging, Live, njalo njalo).

Xa ithathwa ngaphandle kumncedisi wokwakha, iprofayile itshintsha igama layo kwi-ID eyodwa kwaye ihanjiswe kwifolda /Users/$Username/Library/MobileDevice/Provisioning Profiles (Apho $Username ihambelana negama leakhawunti yomsebenzisi yomncedisi wokwakha).

Kukho iindlela ezimbini zokwakha ifayile * .ipa - ilifa (PackageApplication) kunye nesimanje (nge-XcAchive ukudala kunye nokuthumela ngaphandle). Indlela yokuqala ithathwa njengento ephelelwe lixesha, ekubeni inguqulo ye-8.3 imodyuli yokupakisha ifayile ye-app isusiwe kunikezelo lwe-Xcode. Ukuyisebenzisa, kufuneka ukope imodyuli kwi-Xcode endala (uguqulelo 8.2 nangaphambili) kwisiqulathi seefayili:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Emva koko sebenzisa umyalelo:

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

Okulandelayo kufuneka uqokelele *.app ifayile yesicelo:

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 kwifayile yeprojekthi.

-scheme - inkqubo esetyenzisiweyo, echazwe kwiprojekthi.

-derivedDataPath — indlela yokukhuphela usetyenziso oludityanisiweyo (*.app).

CODE_SIGN_IDENTITY - igama le-akhawunti yomphuhlisi, enokuqinisekiswa kwi-Keychain (i-iPhone Developer: XXXX XXXXXXX, ngaphandle kwe-TeamID kwizibiyeli).

Iimpawu zokwakha kunye nokuhanjiswa kwezicelo ze-iOS

PROVISIONING_PROFILE -Isazisi seprofayile yokusayina isicelo, esinokufunyanwa ngomyalelo:

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

Ukuba isicelo sisebenzisa iprofayile eyongezelelweyo (umzekelo, kwiZaziso zokutyhala), ngoko endaweni yoko PROVISIONING_PROFILE bonisa:

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

Okulandelayo, isiphumo *.ifayile yosetyenziso kufuneka ipakishwe kwi *.ipa. Ukwenza oku, ungasebenzisa umyalelo onje:

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

Nangona kunjalo, le ndlela ithathwa njengento ephelelwe lixesha ngokwembono ye-Apple. Kufanelekile ukufumana *.ipa ngokuthumela ngaphandle ukusuka kwindawo yokugcina isicelo.

Okokuqala kufuneka uqokelele indawo yokugcina ngomyalelo:

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

Umahluko ulele kwindlela yokuhlanganisa kunye neenketho SYNCHRONOUS_SYMBOL_PROCESSING, evala isimboli ukothula ngexesha lokwakha.

Okulandelayo kufuneka sivelise ifayile enemimiselo yokuthumela ngaphandle:

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 yokuhambisa, ihambelana nohlobo lweprofayili yesiginitsha yesicelo, oko kukuthi, kuPhuhliso ixabiso liya kuba luphuhliso, kwi-Ad Hoc - i-ad-hoc, kunye ne-App Store - i-app-store.

$BundleID — I-ID yesicelo, echazwe kwisethingi yesicelo. Ungajonga ngomyalelo:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId - igama lomphuhlisi kunye noseto lweprofayile yesazisi ebisetyenziswa ngaphambili kwaye kufuneka ihambelane namaxabiso kuseto lokuthumela ngaphandle.

$TeamID — Isazisi esineedijithi ezilishumi kwizibiyeli emva kwegama lomphuhlisi, umzekelo: iPhone Developer: …… (XXXXXXXXXX); inokukhangelwa kwi-Keychain.

Okulandelayo, usebenzisa umyalelo wokuthumela ngaphandle, sifumana ifayile efunekayo *.ipa:

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

Доставка

Ngoku ifayile eqokelelweyo kufuneka ihanjiswe kumsebenzisi wokugqibela, oko kukuthi, ifakwe kwisixhobo.

Kukho iinkonzo ezininzi zokusasaza uPhuhliso kunye nokwakhiwa kwe-Ad Hoc, njengeHockeyApp, i-AppBlade kunye nabanye, kodwa kweli nqaku siza kuthetha ngomncedisi ozimeleyo wokusabalalisa izicelo.

Ukufakela usetyenziso lwe-iOS kwenzeka ngezigaba ezi-2:

  1. Ukufumana umboniso wofakelo lwesicelo ngeNkonzo yeZinto.
  2. Ufakelo lwefayile *.ipa ngokolwazi oluchazwe kwimanifest ngeHTTPS.

Ngoko ke, kufuneka kuqala sivelise i-manifest yofakelo (uhlobo lwefayile *.plist) ngomyalelo:

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

Njengoko ubona, i-manifest iqulethe phantse zonke iiparameters ezibandakanyekayo ekwakheni isicelo.

Uguqulelo lwesicelo ($AppVersion) inokujongwa ngomyalelo:

defaults read $ProjectDir/Info CFBundleVersion

IParamu $ipaUrl iqulathe ikhonkco elithe ngqo lokukhuphela ifayile *.ipa. Ukususela kuguqulelo lwesixhenxe lwe-iOS, isicelo kufuneka sifakwe nge-HTTPS. Kuhlelo lwesibhozo, ifomathi ye-manifest itshintshile kancinane: iibhloko ezinoseto lweempawu zesicelo ezifana

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

Ke, ukufaka isicelo, iphepha elilula le-HTML elinekhonkco elinje lanele:

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

Ngeemfuno zophuhliso kunye novavanyo lwamasebe, iPlarium idale eyakhe isicelo sofakelo lokwakha, esisinika:

  • ukuzimela nokuzimela,
  • ukubekwa kwindawo enye yolawulo lofikelelo kunye nofakelo olukhuselekileyo lwezicelo ngokusebenzisa amakhonkco enziwe “okwexeshana” ngamandla,
  • ukusebenza okwandiswayo (oko kukuthi, iqela lophuhliso, ukuba kuyimfuneko, linokudibanisa imisebenzi engekhoyo kwisicelo esele sikhona).

Ukuvavanywa

Ngoku siza kuthetha ngovavanyo lokukhutshwa kwangaphambili kwesicelo usebenzisa UvavanyoCloud.

Iimeko ezifunekayo zokukhuphela luhlobo lweprofayile yesiginitsha ye-App Store kunye nobukho bezitshixo ze-API ezenziweyo.

Kukho iindlela ezininzi zokukhuphela isicelo:

  • ngeXcode (umququzeleli),
  • nge-altool,
  • nge-Application Loader yeenguqulelo ezindala ze-Xcode (ngoku eyi-Transporter).

Ukukhuphela ngokuzenzekelayo, i-altool isetyenziswa, eneendlela ezimbini zogunyaziso:

  • I-App-Specific Password,
  • API Key.

Kukhethwa ukukhuphela usetyenziso usebenzisa iSitshixo se-API.

Ukufumana i-API Key, yiya ku unxibelelwano kwaye wenze isitshixo. Ukongeza kwisitshixo ngokwaso kwi-*.p8 ifomathi, siya kufuna iiparamitha ezimbini: IssuerID kunye ne-KeyID.

Iimpawu zokwakha kunye nokuhanjiswa kwezicelo ze-iOS

Okulandelayo, ngenisa iqhosha elikhutshelweyo kwiseva yokwakha:

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

Ngaphambi kokulayisha isicelo kwiTestFlight, kufuneka uqinisekise isicelo, sikwenza oku ngomyalelo:

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

Kuphi apiKey и apiIssuer babe namaxabiso entsimi ukusuka API isitshixo iphepha ukuvelisa.

Okulandelayo, ekuqinisekiseni ngempumelelo, silayisha isicelo ngomyalelo --upload-app ngeeparamitha ezifanayo.

Isicelo siya kuvavanywa yi-Apple kwiintsuku enye okanye ezimbini kwaye emva koko iya kufumaneka kubavavanyi bangaphandle: baya kuthunyelwa nge-imeyile amakhonkco okufakwa.

Enye indlela yokukhuphela usetyenziso nge-altool kukusebenzisa igama eliyimfihlo le-App-Specific.

Ukufumana i-App-Specific Password kufuneka uye kuyo unxibelelwano kwaye uyivelise kwicandelo loKhuseleko.

Iimpawu zokwakha kunye nokuhanjiswa kwezicelo ze-iOS

Okulandelayo, kufuneka wenze irekhodi lomncedisi wokwakha kwi-Keychain kunye nale phasiwedi. Ukusuka kwinguqulo ye-11 ye-Xcode oku kunokwenziwa ngomyalelo:

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

Kuphi:

$DeveloperName - igama le-akhawunti yomphuhlisi we-iOS esetyenziselwa ukungena kwiinkonzo ze-Apple.

$AppPswd — yenziwe i-App-Specific Password.

Okulandelayo, sifumana ixabiso le-asc-provider parameter kwaye ukhangele impumelelo yokungenisa igama eligqithisiweyo ngomyalelo:

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

Sifumana imveliso:

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

Njengoko unokubona, ixabiso leGama eliFutshane elifunekayo (umnikezeli we-asc) lihambelana neparamitha ye-TeamID ye-$ esiyisebenzise xa sisakha isicelo.

Ukuqinisekisa kunye nokulayisha usetyenziso kwiTestFlight, sebenzisa lo myalelo:

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

Njengexabiso leparameter -p ungathatha ixabiso $AppPswd kwifomu engafihlwanga (ecacileyo).

Nangona kunjalo, njengoko sele kukhankanyiwe, ukusuka kwindawo yokujonga ukusebenza, kungcono ukhethe i-API Key yokugunyazwa kwe-altool, ekubeni iinguqulelo ezahlukeneyo ze-Xcode zineengxaki ezithile ("ayiboni" i-Keychain, iimpazamo zokugunyazwa ngexesha lokulayisha, njl.).

Yiloo nto kuphela, eneneni. Ndinqwenela wonke umntu obandakanyekayo ekwakheni ngempumelelo kunye nokukhutshwa okungenangxaki kwiVenkile yeApp.

umthombo: www.habr.com

Yongeza izimvo