Yn yr erthygl hon, rydym yn rhannu'r profiad o gydosod a chyflwyno cymwysiadau iOS i ddefnyddwyr, y mae stiwdio Plarium Krasnodar wedi'i gronni yn y broses o ddadfygio CI / CD.

Hyfforddiant
Mae pob person sydd mewn un ffordd neu'r llall yn ymwneud â datblygu cymwysiadau ar gyfer dyfeisiau Apple eisoes wedi gwerthfawrogi cyfleustra dadleuol y seilwaith. Mae anawsterau i'w cael ym mhobman: o ddewislen proffil y datblygwr i'r offer dadfygio ac adeiladu.
Mae yna lawer o erthyglau am y “sylfaenol” ar y Rhyngrwyd, felly byddwn yn ceisio tynnu sylw at y prif beth. Dyma beth sydd ei angen arnoch i adeiladu'ch cais yn llwyddiannus:
- ;
- устройство на базе macOS, выступающее в роли билд-сервера;
- a gynhyrchir , a ddefnyddir ymhellach i lofnodi'r cais;
- cais wedi'i greu gydag unigryw (dylid nodi pwysigrwydd y Dynodydd Bwndel, oherwydd bod y defnydd o ID cerdyn gwyllt yn ei gwneud hi'n amhosibl defnyddio llawer o swyddogaethau'r cais, er enghraifft: Parthau Cysylltiedig, Hysbysiadau Gwthio, Apple Sign In ac eraill);
- llofnodion cais.
Сертификат разработчика следует сгенерировать через Keychain на любом устройстве на базе macOS. Очень важным является тип сертификата. В зависимости от среды приложения (Dev, QA, Staging, Production) он будет различаться (Development или Distribution), так же как и тип профиля подписи приложения.
Prif fathau o broffiliau:
- Development — предназначен для подписи приложения команды разработчиков, используется Development-сертификат (имя вида iPhone Developer: XXXXX);
- Ad Hoc — предназначен для подписи тестового приложения и внутренней проверки QA-отделом, используется Distribution-сертификат разработчика (имя вида iPhone Distribution: XXXXX);
- App Store - rhyddhau adeiladu ar gyfer profion allanol trwy TestFlight a llwytho i fyny i'r App Store, tystysgrif Dosbarthu y datblygwr yn cael ei ddefnyddio.
Wrth gynhyrchu proffiliau Datblygu ac Ad Hoc, fe'i nodir hefyd , y gallwch chi osod adeilad arno, sy'n eich galluogi i gyfyngu ymhellach ar fynediad i ddefnyddwyr. Nid oes rhestr o ddyfeisiau ym mhroffil App Store, gan fod TestFlight yn ymdrin â rheoli mynediad yn ystod profion beta caeedig, a fydd yn cael ei drafod yn nes ymlaen.
Er eglurder, gallwch gyflwyno proffil y datblygwr ar ffurf tabl isod. Mae hyn yn ei gwneud hi'n haws deall pa baramedrau sydd eu hangen arnom ar gyfer cydosod ac o ble i'w cael.

Cynulliad
Er mwyn ei gwneud hi'n haws gwahanu gwasanaethau fesul prosiect ac amgylchedd, rydyn ni'n defnyddio enwau proffil fel ${ProjectName}_${Instance}, hynny yw, enw'r prosiect + enghraifft (yn dibynnu ar amgylchedd y cais: Dev, QA, GD, Staging, Live, ac ati).
Pan gaiff ei fewnforio i'r gweinydd adeiladu, mae'r proffil yn newid ei enw i ID unigryw ac yn cael ei symud i'r ffolder /Users/$Username/Library/MobileDevice/Provisioning Profiles (Lle $Username yn cyfateb i enw cyfrif defnyddiwr y gweinydd adeiladu).
Mae dwy ffordd i adeiladu ffeil *.ipa - etifeddiaeth (PackageApplication) a modern (trwy greu ac allforio XcAchive). Ystyrir bod y dull cyntaf wedi darfod, oherwydd ers fersiwn 8.3 mae'r modiwl pecynnu ffeiliau app wedi'i dynnu o'r dosbarthiad Xcode. Er mwyn ei ddefnyddio, mae angen i chi gopïo'r modiwl o'r hen Xcode (fersiwn 8.2 a chynt) i'r ffolder:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
Ac yna rhedeg y gorchymyn:
chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/*Nesaf mae angen i chi gasglu ffeil *.app y cais:
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
Ble:
-workspace — llwybr i ffeil y prosiect.
-scheme — y cynllun a ddefnyddir, a bennir yn y prosiect.
-derivedDataPath - llwybr i lawrlwytho'r cais sydd wedi'i ymgynnull (*. app).
CODE_SIGN_IDENTITY — имя аккаунта разработчика, которое можно проверить в Keychain (iPhone Developer: XXXX XXXXXXX, без TeamID в скобках).

PROVISIONING_PROFILE — ID proffil ar gyfer llofnodi'r cais, y gellir ei gael gyda'r gorchymyn:
cd "/Users/$Username/Library/MobileDevice/Provisioning Profiles/" && find *.mobileprovision -type f | xargs grep -li ">${ProjectName}_${Instance}<" | sed -e 's/.mobileprovision//' Os yw'r rhaglen yn defnyddio proffil ychwanegol (er enghraifft, ar gyfer Hysbysiadau Gwthio), yna yn lle PROVISIONING_PROFILE nodi:
APP_PROFILE=”$AppProfile”
EXTENSION_PROFILE=”$ExtProfile” Nesaf, dylai'r ffeil *.app dilynol gael ei becynnu i mewn i *.ipa. I wneud hyn, gallwch ddefnyddio gorchymyn fel:
/usr/bin/xcrun --sdk iphoneos PackageApplication
-v $(find "$ProjectDir/build/Build/Products/Release-iphoneos" -name "*.app")
-o "$ProjectDir/$ProjectName_$Instance.ipa"Fodd bynnag, ystyrir bod y dull hwn yn anarferedig o safbwynt Apple. Mae'n berthnasol cael *.ipa trwy allforio o'r archif cymwysiadau.
Yn gyntaf mae angen i chi gasglu'r archif gyda'r gorchymyn:
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 Mae'r gwahaniaethau yn y dull cydosod a'r opsiynau SYNCHRONOUS_SYMBOL_PROCESSING, sy'n analluogi dadlwytho symbolau ar amser adeiladu.
Nesaf mae angen i ni gynhyrchu ffeil gyda gosodiadau allforio:
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
Ble:
$Method — dull cyflwyno, yn cyfateb i'r math o broffil llofnod cais, hynny yw, ar gyfer Datblygu y gwerth fydd datblygu, ar gyfer Ad Hoc - ad-hoc, ac ar gyfer App Store - app-store.
$BundleID - ID y cais, a nodir yng ngosodiadau'r cais. Gallwch wirio gyda'r gorchymyn:
defaults read $ProjectDir/Info CFBundleIdentifier $DevAccName и $ProfileId — enw datblygwr a gosodiadau ID proffil llofnod a ddefnyddiwyd yn flaenorol ac mae'n rhaid iddynt gyd-fynd â'r gwerthoedd yn y gosodiadau allforio.
$TeamID — десятизначный ID в скобках после имени разработчика, пример: iPhone Developer: …… (XXXXXXXXXX); можно проверить в Keychain.
Nesaf, gan ddefnyddio'r gorchymyn allforio, rydym yn cael y ffeil *.ipa angenrheidiol:
xcodebuild
-exportArchive
-archivePath $ProjectDir/build/$ProjectName.xcarchive
-exportPath $ProjectDir
-exportOptionsPlist $ExportSettingsCyflenwi
Nawr mae angen danfon y ffeil a gasglwyd i'r defnyddiwr terfynol, hynny yw, wedi'i osod ar y ddyfais.
Mae yna lawer o wasanaethau ar gyfer dosbarthu adeiladau Datblygu ac Ad Hoc, fel HockeyApp, AppBlade ac eraill, ond yn yr erthygl hon byddwn yn siarad am weinydd annibynnol ar gyfer dosbarthu cymwysiadau.
Mae gosod y cais ar gyfer iOS yn digwydd mewn 2 gam:
- Derbyn maniffest gosod y cais trwy'r Gwasanaeth Eitemau.
- Gosod y ffeil *.ipa yn unol â'r wybodaeth a nodir yn y maniffest trwy HTTPS.
Felly, yn gyntaf mae angen i ni gynhyrchu maniffest gosod (math ffeil *. plist) gyda'r gorchymyn:
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>
EOFFel y gwelwch, mae'r maniffest yn cynnwys bron yr holl baramedrau sy'n gysylltiedig ag adeiladu'r cais.
Fersiwn cymhwysiad ($AppVersion) gellir ei wirio gyda'r gorchymyn:
defaults read $ProjectDir/Info CFBundleVersion Paramedr $ipaUrl yn cynnwys dolen uniongyrchol i lawrlwytho'r ffeil *.ipa. O'r seithfed fersiwn o iOS, rhaid gosod y cais trwy HTTPS. Yn yr wythfed fersiwn, mae fformat y maniffest wedi newid ychydig: blociau gyda gosodiadau ar gyfer eiconau cymhwysiad fel
<images>
<image>...</image>
</images>Felly, i osod y rhaglen, mae tudalen HTML syml gyda dolen fel hon yn ddigon:
itms-services://?action=download-manifest&url=https://$ServerUrl/$ProjectName/$Instance/iOS/$AppVersion/manifest.plistAr gyfer anghenion yr adrannau datblygu a phrofi, mae Plarium wedi creu ei gymhwysiad gosod adeiladu ei hun, sy'n rhoi i ni:
- ymreolaeth ac annibyniaeth,
- canoli rheolaeth mynediad a gosod cymwysiadau yn ddiogel trwy ddolenni “dros dro” a grëwyd yn ddeinamig,
- ymarferoldeb y gellir ei ehangu (hynny yw, gall y tîm datblygu, os oes angen, integreiddio swyddogaethau coll i gymhwysiad sy'n bodoli eisoes).
Profi
Nawr byddwn yn siarad am brofi cyn rhyddhau'r cais gan ddefnyddio .
Yr amodau gofynnol ar gyfer lawrlwytho yw'r math o broffil llofnod App Store a phresenoldeb allweddi API a gynhyrchir.
Mae yna sawl ffordd i lawrlwytho'r cais:
- trwy Xcode (Trefnydd),
- trwy altool,
- trwy Application Loader ar gyfer fersiynau hŷn o Xcode (Cludiant bellach).
Ar gyfer llwytho i lawr yn awtomatig, defnyddir altool, sydd hefyd â dau ddull awdurdodi:
- Cyfrinair Ap-Benodol,
- Allwedd API.
Mae'n well lawrlwytho'r rhaglen gan ddefnyddio'r Allwedd API.
I gael yr Allwedd API, ewch i a chynhyrchu allwedd. Yn ogystal â'r allwedd ei hun mewn fformat *.p8, bydd angen dau baramedr arnom: IssuerID ac KeyID.

Nesaf, mewnforiwch yr allwedd wedi'i lawrlwytho i'r gweinydd adeiladu:
mkdir -p ~/.appstoreconnect/private_keys
mv ~/Downloads/AuthKey_${KeyID}.p8 ~/.appstoreconnect/private_keys/Cyn uwchlwytho'r cais i TestFlight, mae angen i chi ddilysu'r cais, rydym yn gwneud hyn gyda'r gorchymyn:
xcrun altool
--validate-app
-t ios
-f $(find "$ProjectDir" -name "*.ipa")
--apiKey “$KeyID”
--apiIssuer “$IssuerID” Lle apiKey и apiIssuer cael gwerthoedd maes o'r dudalen API cenhedlaeth allweddol.
Nesaf, ar ôl dilysu llwyddiannus, rydym yn llwytho'r cais gyda'r gorchymyn --upload-app gyda'r un paramedrau.
Bydd y cais yn cael ei brofi gan Apple o fewn diwrnod neu ddau ac yna bydd ar gael i brofwyr allanol: byddant yn cael eu hanfon drwy e-bost yn ddolenni i'w gosod.
Ffordd arall o lawrlwytho cymhwysiad trwy altool yw defnyddio Cyfrinair Ap-Benodol.
I gael y Cyfrinair Ap-Benodol mae angen i chi fynd iddo a'i gynhyrchu yn yr adran Diogelwch.

Nesaf, dylech greu cofnod gweinydd adeiladu yn Keychain gyda'r cyfrinair hwn. O fersiwn 11 o Xcode gellir gwneud hyn gyda'r gorchymyn:
xcrun altool --store-password-in-keychain-item "Altool" -u "$DeveloperName" -p $AppPswdBle:
$DeveloperName — enw'r cyfrif datblygwr iOS a ddefnyddir i fewngofnodi i wasanaethau Apple.
$AppPswd — Cyfrinair Ap-Benodol wedi'i gynhyrchu.
Nesaf, rydym yn cael gwerth y paramedr asc-darparwr ac yn gwirio llwyddiant y mewnforio cyfrinair gyda'r gorchymyn:
xcrun altool --list-providers -u "$DeveloperName" -p "@keychain:Altool"Rydym yn cael yr allbwn:
Provider listing:
- Long Name - - Short Name -
XXXXXXX XXXXXXXXXFel y gallwch weld, mae'r gwerth Enw Byr gofynnol (asc-darparwr) yn cyd-fynd â'r paramedr $TeamID a ddefnyddiwyd gennym wrth adeiladu'r rhaglen.
I ddilysu a llwytho'r cais i TestFlight, defnyddiwch y gorchymyn:
xcrun altool
--(validate|upload)-app
-f $(find "$ProjectDir" -name "*.ipa")
-u "$DeveloperName"
-p "@keychain:Altool" Fel gwerth paramedr -p gallwch chi gymryd y gwerth $AppPswd ar ffurf heb ei amgryptio (benodol).
Fodd bynnag, fel y crybwyllwyd eisoes, o safbwynt perfformiad, mae'n well dewis Allwedd API ar gyfer awdurdodiad altool, gan fod gan wahanol fersiynau o Xcode broblemau penodol ("nid yw'n gweld" Keychain, gwallau awdurdodi wrth uwchlwytho, ac ati).
Dyna i gyd, mewn gwirionedd. Dymunaf adeiladau llwyddiannus a datganiadau di-drafferth yn yr App Store i bawb dan sylw.
Ffynhonnell: hab.com
