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:
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
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 yekuvandudza, iro rinogona kusimbiswa muKeychain (iPhone Developer: 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 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:
- 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>
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
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
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
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