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

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:
- ;
- zvakavakirwa pamudziyo macOS, ichishanda seseva yekuvaka;
- generated , iyo ichashandiswa zvakare kusaina chikumbiro;
- yakagadzirwa application ine yakasarudzika (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);
- masiginecha ekunyorera.
Chitupa chemugadziri chinofanira kugadzirwa kuburikidza neKeychain pane chero mudziyo zvichibva pane macOSRudzi rwechitupa rwakakosha zvikuru. Zvichienderana nenzvimbo yekushandisa (Dev, QA, Staging, Production), zvichasiyana (Development kana Distribution), pamwe chete nerudzi rwesiginecha yeprofile yeapplication.
Marudzi makuru emaprofile:
- Budiriro ā yakagadzirirwa kusaina chikumbiro chechikwata chebudiriro, chitupa cheBudiriro chinoshandiswa (zita rerudzi rwacho iPhone Mugadziri: XXXXX);
- Ad Hoc - yakagadzirirwa kusaina chikumbiro chekuyedza uye kusimbiswa kwemukati nedhipatimendi reQA, chitupa chekugovera chemugadziri chinoshandiswa (zita rerudzi rwacho iPhone Kugoverwa: 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 , 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.

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 yemugadziri, iro rinogona kusimbiswa muKeychain (iPhone Mugadziri: XXXX XXXXXXX, isina TeamID mumabhuraketi).

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 iri mumabhuraketi mushure mezita remugadziri, semuenzaniso: iPhone Mugadziri: ā¦ā¦ (XXXXXXXXXX); inogona kusimbiswa muKeychain.
Tevere, tichishandisa mutemo wekutumira kunze, tinowana inodiwa *.ipa faira:
xcodebuild
-exportArchive
-archivePath $ProjectDir/build/$ProjectName.xcarchive
-exportPath $ProjectDir
-exportOptionsPlist $ExportSettingsKutumira 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:
- Kugashira iyo yekumisikidza application kuratidza kuburikidza neItems Service.
- 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>
EOFSezvauri 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.plistNezve 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 .
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 uye kugadzira kiyi. Pamusoro pekiyi pachayo mu * .p8 fomati, tichada ma parameter maviri: IssuerID uye KeyID.

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 uye gadzira iyo muChengetedzo chikamu.

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 $AppPswdKupi:
$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 XXXXXXXXXSezvauri 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
