Zvimiro zvekuvaka uye kuendesa iOS zvikumbiro

Muchinyorwa chino, tinogovana ruzivo rwekuunganidza uye kuendesa iOS zvikumbiro kune vashandisi, iyo iyo Plarium Krasnodar studio yakaunganidza mukugadzirisa CI/CD.

Zvimiro zvekuvaka uye kuendesa iOS zvikumbiro

Kugadzirira kwe

Wese munhu ari mune imwe nzira kana imwe akabatanidzwa mukuvandudzwa kwezvikumbiro zveApple zvishandiso akatotenda iko kukakavara kugadzikana kwezvivakwa. Matambudziko anowanikwa kwese kwese: kubva kune yekuvandudza chimiro menyu kune debug uye kuvaka maturusi.

Pane zvakawanda zvezvinyorwa zve "basics" paInternet, saka isu tichaedza kuratidza chinhu chikuru. Hezvino izvo zvaunoda kuti uvake application yako zvinobudirira:

  • developer account;
  • macOS-based device inoshanda sevhavha yekuvaka;
  • generated developer certificate, iyo ichashandiswa zvakare kusaina chikumbiro;
  • yakagadzirwa application ine yakasarudzika ID (kukosha kweBundle Identifier kunofanira kucherechedzwa, nekuti kushandiswa kwewildcard ID kunoita kuti zvisakwanise kushandisa akawanda mabasa echikumbiro, semuenzaniso: Associated Domains, Push Notifications, Apple Sign In nevamwe);
  • profile masiginecha ekunyorera.

Chitupa chekuvandudza chinofanirwa kugadzirwa kuburikidza neKeychain pane chero macOS mudziyo. Rudzi rwechitupa rwakakosha. Zvichienderana nenharaunda yekushandisa (Dev, QA, Staging, Production) ichasiyana (Development kana Distribution), sezvazvichaita rudzi rwechishandiso siginecha mbiri.

Marudzi makuru emaprofile:

  • Budiriro - inoitirwa kusaina mashandisirwo echikwata chekusimudzira, chitupa cheBudiriro chinoshandiswa (zita rezita iPhone Developer: XXXXX);
  • Ad Hoc - yakanangana kusaina bvunzo yekushandisa uye kusimbiswa kwemukati nedhipatimendi reQA, dhipatimendi reDistribution remugadziri rinoshandiswa (zita rezita iPhone Distribution: XXXXX);
  • App Store - kusunungura kuvaka kwekuyedzwa kwekunze kuburikidza neTestFlight uye kurodha kuApp Store, chitupa chekugovera chemugadziri chinoshandiswa.

Kana uchigadzira Development uye Ad Hoc profiles, inoratidzwa zvakare mudziyo list, paunogona kuisa kuvaka, iyo inokubvumira kuti uwedzere kurambidza kupinda kwevashandisi. Iko hakuna rondedzero yemidziyo muProfile yeApp Store, sezvo kutonga kwekuwana panguva yakavharwa beta kuyedzwa kunobatwa neTestFlight, iyo ichakurukurwa gare gare.

Kuti ujekese, iwe unogona kuratidza chimiro chemugadziri nenzira yetafura pazasi. Izvi zvinoita kuti zvive nyore kunzwisisa kuti ndeapi ma parameter atinoda pakuungana uye kuti tingaatora kupi.

Zvimiro zvekuvaka uye kuendesa iOS zvikumbiro

Gungano

Kuita kuti zvive nyore kuparadzanisa magungano neprojekiti uye nharaunda, tinoshandisa mazita emazita se ${ProjectName}_${Instance}, kureva, zita reprojekiti + muenzaniso (zvinoenderana nemamiriro ekushandisa: Dev, QA, GD, Staging, Rarama, zvichingodaro).

Kana yaunzwa kune sevha yekuvaka, iyo mbiri inoshandura zita rayo kune yakasarudzika ID uye inoendeswa kune folda /Users/$Username/Library/MobileDevice/Provisioning Profiles (kupi $Username inoenderana nezita remushandisi account yekuvaka server).

Pane nzira mbiri dzekugadzira * .ipa faira - legacy (PackageApplication) uye yemazuva ano (kuburikidza neXcAchive kusikwa uye kutumira kunze). Iyo yekutanga nzira inoonekwa seyechinyakare, sezvo kubva vhezheni 8.3 iyo app faira yekurongedza module yakabviswa pakugovera Xcode. Kuti uishandise, unofanirwa kukopa module kubva kune yekare Xcode (vhezheni 8.2 uye yapfuura) kune folda:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Uye wobva wamhanya murairo:

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

Zvino unofanira kutora *.app faira rekushandisa:

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

Kupi:

-workspace - nzira yefaira reprojekiti.

-scheme - chirongwa chakashandiswa, chakatsanangurwa muprojekiti.

-derivedDataPath - nzira yekudhawunirodha yakaunganidzwa application (* .app).

CODE_SIGN_IDENTITY - zita reakaundi yekuvandudza, iro rinogona kusimbiswa muKeychain (iPhone Developer: XXXX XXXXXXX, isina TeamID mumabhuraketi).

Zvimiro zvekuvaka uye kuendesa iOS zvikumbiro

PROVISIONING_PROFILE - Profile ID yekusaina application, iyo inogona kuwanikwa nemurairo:

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

Kana iyo application ikashandisa imwe mbiri (semuenzaniso, yePush Notifications), ipapo pachinzvimbo che PROVISIONING_PROFILE ratidza:

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

Zvadaro, zvabuda *.app faira rinofanira kuiswa mu *.ipa. Kuti uite izvi, unogona kushandisa murairo se:

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

Nekudaro, iyi nzira inoonekwa seyakasakara kubva pakuona kweApple. Izvo zvine basa kuwana *.ipa nekutumira kunze kubva kune application archive.

Kutanga iwe unoda kuunganidza archive nemurairo:

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

Misiyano iri munzira yegungano uye sarudzo SYNCHRONOUS_SYMBOL_PROCESSING, iyo inomisa kuburitsa chiratidzo panguva yekuvaka.

Tevere tinoda kugadzira faira ine ekisipoti marongero:

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

Kupi:

$Method - nzira yekuendesa, inoenderana neiyo application siginecha yemhando yemhando, ndiko kuti, yeBudiriro kukosha kuchave budiriro, yeAd Hoc - ad-hoc, uye yeApp Store - app-chitoro.

$BundleID -Chikumbiro ID, iyo inotsanangurwa mumagadzirirwo ekushandisa. Unogona kutarisa nemurairo:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId - zita remugadziri uye siginecha dhizaini ID marongero akashandiswa kare uye anofanirwa kuenderana nemakoshero ari ekunze marongero.

$TeamID - ID ine manhamba gumi mumabhuraketi mushure mezita remugadziri, semuenzaniso: iPhone Mugadziri: …… (XXXXXXXXXX); inogona kuongororwa mu Keychain.

Tevere, tichishandisa mutemo wekutumira kunze, tinowana inodiwa *.ipa faira:

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

Kutumira mashoko

Iye zvino iyo yakaunganidzwa faira inoda kuendeswa kune yekupedzisira mushandisi, ndiko kuti, yakaiswa pane mudziyo.

Kune akawanda masevhisi ekugovera Development uye Ad Hoc anovaka, akadai seHockeyApp, AppBlade nevamwe, asi mune ino chinyorwa tichataura nezve yakamira sevha yekugovera maapplication.

Kuisa application yeIOS kunoitika mumatanho maviri:

  1. Kugashira iyo yekumisikidza application kuratidza kuburikidza neItems Service.
  2. Kuiswa kwe *.ipa faira zvinoenderana neruzivo rwakatsanangurwa mumanifesiti kuburikidza neHTTPS.

Saka, tinoda kutanga tagadzira manifestation yekuisa (file type *.plist) nemurairo:

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

Sezvauri kuona, iyo manifest ine angangoita ese ma paramita anobatanidzwa mukuvaka application.

Shanduro yekushandisa ($AppVersion) inogona kuongororwa nemurairo:

defaults read $ProjectDir/Info CFBundleVersion

Parameter $ipaUrl ine chinongedzo chakananga kudhaunirodha *.ipa faira. Kubva pane yechinomwe vhezheni yeIOS, chishandiso chinofanira kuiswa kuburikidza neHTTPS. Mune yechisere vhezheni, chimiro chemanifest chachinja zvishoma: mabhuroko ane zvigadziriso zvezvidhori zvekushandisa senge

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

Saka, kuisa iyo application, iri nyore HTML peji ine chinongedzo seizvi inokwana:

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

Nezve zvinodiwa zvemadhipatimendi ekusimudzira uye ekuyedza, Plarium yakagadzira yayo yekuisa yekuisa application, inotipa:

  • kuzvitonga uye kuzvimirira,
  • centralization yekutonga kwekuwana uye yakachengeteka kuisirwa kwezvikumbiro kuburikidza ne "nguva pfupi" ine simba rakagadzirwa zvinongedzo,
  • kuwedzera kushanda (kureva kuti, timu yekuvandudza, kana zvichidikanwa, inogona kubatanidza mabasa akashaikwa mune iripo application).

Kuedza

Iye zvino tichataura nezve pre-kuburitswa kuyedzwa kwekushandisa uchishandisa Kwayedza.

Mamiriro ezvinhu anodiwa ekurodha imhando yeApp Store siginecha mbiri uye kuvapo kwemakiyi eAPI akagadzirwa.

Pane nzira dzakawanda dzekudhawunirodha application:

  • kuburikidza neXcode (Murongi),
  • kuburikidza nealtool,
  • kuburikidza neApplication Loader yemhando dzekare dzeXcode (ikozvino Transporter).

Kurodha otomatiki, altool inoshandiswa, iyo inewo nzira mbiri dzekubvumidza:

  • App-Yakananga Password,
  • API Key.

Zviri nani kurodha application uchishandisa API Key.

Kuti utore kiyi yeAPI, enda ku batanidzo uye kugadzira kiyi. Pamusoro pekiyi pachayo mu * .p8 fomati, tichada ma parameter maviri: IssuerID uye KeyID.

Zvimiro zvekuvaka uye kuendesa iOS zvikumbiro

Tevere, pinza kiyi yakarodha kune yekuvaka server:

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

Usati waisa chikumbiro kuTestFlight, unofanirwa kusimbisa chikumbiro, tinoita izvi nemurairo:

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

Kupi apiKey и apiIssuer iva neminda mibairo kubva kuAPI kiyi yechizvarwa peji.

Tevere, pakubudirira kusimbiswa, isu tinoisa application nekuraira --upload-app pamwe chete parameters.

Chikumbiro chinozoyedzwa neApple mukati mezuva rimwe kana maviri uye chinobva chavepo kune vekunze vanoedza: ivo vanozotumirwa maemail ekuiswa.

Imwe nzira yekudhawunirodha application kuburikidza nealtool ndeye kushandisa App-Specific Password.

Kuti utore iyo App-Specific Password unofanira kuenda kwairi batanidzo uye gadzira iyo muChengetedzo chikamu.

Zvimiro zvekuvaka uye kuendesa iOS zvikumbiro

Tevere, iwe unofanirwa kugadzira sevha rekodhi muKeychain neiyi password. Kubva pane vhezheni 11 yeXcode izvi zvinogona kuitwa nemurairo:

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

Kupi:

$DeveloperName -zita reiyo iOS yekuvandudza account rinoshandiswa kupinda muApple masevhisi.

$AppPswd - yakagadzirwa neApp-Specific Password.

Tevere, tinowana kukosha kweasc-provider parameter uye tarisa kubudirira kwekupinza password nemurairo:

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

Tinowana zvakabuda:

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

Sezvauri kuona, iyo inodiwa Short Name value (asc-provider) inopindirana neiyo $TeamID parameter yatakashandisa pakuvaka application.

Kusimbisa uye kurodha application muTestFlight, shandisa murairo:

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

Sezvo parameter kukosha -p unogona kutora kukosha $AppPswd mune isina kunyorwa (yakajeka) fomu.

Nekudaro, sezvatotaurwa, kubva pakuona kwekuita, zviri nani kusarudza API Kiyi yemvumo yealtool, sezvo shanduro dzakasiyana dzeXcode dzine mamwe matambudziko ("haaone" Keychain, zvikanganiso zvekubvumidza panguva yekurodha, nezvimwewo).

Ndizvo zvose, chaizvoizvo. Ndinoshuva kuti munhu wese ane chekuita nekuvaka kwakabudirira uye kuburitswa kwemahara muApp Store.

Source: www.habr.com

Voeg