Features of building and delivering iOS applications

In hoc articulo experientiam communicamus colligendi et tradendi iOS applicationes ad utentes, quas studiorum Plarium Krasnodar in processu debugging CI/CD accumulavit.

Features of building and delivering iOS applications

Training

Omnis homo qui alio modo vel alio implicatur in applicationibus applicationum ad Apple machinas, commoditatem controversiae infrastructure iam aestimavit. Difficultates ubique reperiuntur: e menu profile elit ad instrumenta debug et fabricare.

Sunt multa vasa de "basics" in interreti, sic illustrare conabimur rem principalem. Ecce id quod opus est tuo applicatione feliciter aedificare:

  • elit rationem;
  • a macOS-fundatur fabrica servo agentes aedificant;
  • generatae elit certificatoriumquae porro applicatio ad signandum erit;
  • creatus application cum unique ID (Momentum fasciculi Identifier notandum est, quia usus wildcardi ID impedit multis functionibus applicationis uti, exempli gratia: Dominia Associata, ventilabis notificationes, Apple Sign In et aliis);
  • profile adhibitis subscriptionibus.

A elit certificatorium generari debet per Keychain in aliqua macOS fabrica. Genus certificatorium valde magnum est. Secundum ambitum applicationis (Dev, QA, Staging, Productio) differet (Evolutionis vel Distributio), sicut ratio applicationis profile subscriptionis.

Genera profile:

  • Progressio - destinata ad applicationem quadrigis evolutionis signandae, libellum progressionis adhibetur (nomen generis Developer iPhone: XXXXX);
  • Ad Hoc - destinata applicationis probationis et verificationis internae per QA department signandi, libellum distributio viae adhibetur (type nomen iPhone Distributio: XXXXX);
  • App Store - emissio aedificandi ad probationem externam per TestFlight et ad App Store imposuisti, libellum distributio elit adhibetur.

Cum Progressionem generare et Ad Hoc profiles, indicatur fabrica albumin quo instituere potes ut aedifices, quae te ad ulteriora restringere accessum usorum sinit. Nulla index machinis in profile App Store, cum accessus ad imperium in beta clausis probationis a TestFlight tractatur, de quo postea dicetur.

Ad evidentiam, potes profile in forma tabulae infra exhibere elit. Eo facilius intellegitur quid parametri opus sit ad contionem et unde eos recipiat.

Features of building and delivering iOS applications

conventus

Ut facilius conventus ab incepto et ambitu discernantur, nominibus profanis similibus utimur ${ProjectName}_${Instance}hoc est nomen project + exempli gratia (dependet a ambitu applicationis: Dev, QA, GD, Staging, Vive, et sic de aliis).

Cum servo aedificandi importatus, profile nomen suum in unicum ID mutat et ad folder . movetur /Users/$Username/Library/MobileDevice/Provisioning Profiles (Ubi $Username respondet usoris nomine constructum server).

Duae viae ad aedificandum *.ipa lima - legatum (PackageApplication) et moderna (per XcAchive creationem et exportationem). Prima methodus obsoleta consideratur, quia versio 8.3 tabulae app- moduli packaging ab Xcode distributio remotum est. Eo utere, modulum ex vetere Xcode (versio 8.2 et antea) imitari debes;
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Et tunc percurre mandatum;

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

Deinde debes colligere *.app lima applicationis:

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

ubi:

-workspace — iter ad documentum lima.

-scheme - ratio adhibita, in incepto definita.

-derivedDataPath - iter ad download convenerunt applicationem (*.app).

CODE_SIGN_IDENTITY - nomen electronicae elit, quod verificari potest in Keychain (iPhone Developer: XXXX XXXXXXX, sine TeamID in uncis).

Features of building and delivering iOS applications

PROVISIONING_PROFILE - Profile ID ad signandum applicationem, quae obtineri potest cum imperio;

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

Si applicatione utitur an additional profile (exempli gratia, ventilabis notificationes), tum pro PROVISIONING_PROFILE indicant;

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

Deinde, *.app fasciculus inde in .ipa sarcinari debet. Ad hoc uti potes ut iubeas;

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

Sed haec methodus obsoleta censetur ex Apple sententia. Pertinet ad *.ipa educendo ex tabulario applicationis impetrare.

Primum archivum colligere debes cum mandato:

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

Differentiae in conventu methodi et optiones SYNCHRONOUS_SYMBOL_PROCESSING, quod disables symbolum exonerandi ad tempus aedificandum.

Deinde necesse est fasciculum cum educendo uncinis generare:

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

ubi:

$Method - methodus traditionis, respondet applicationi speciei profile subscriptionis subscriptio, id est, pro progressione valor progressionis erit, pro Ad Hoc - ad-hoc, et pro App Store.

$BundleID - Applicatio ID, quae in applicatione occasus specificatur. Potes reprehendo cum imperio;

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId - Elit nomen et subscriptio profile ID uncinis quae antea adhibitae erant et valores in uncinis exportandis aequare debent.

$TeamID - decem digiti ID in uncis post elit nomen, exemplum: iPhone Developer: ........ (XXXXXXXXXX); cohiberi potest in Keychain.

Deinde, utendo imperio exportando, necessaria *.ipa lima obtinemus:

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

partum

Nunc fasciculus collectus tradendus est ad finem usoris, id est, in fabrica constitutum.

Multa officia ad progressionem et Ad Hoc distribuendum aedificat, ut HockeyApp, AppBlade et aliis, sed in hoc capitulo loquemur de servo standolone ad applicationes distribuendae.

Applicatio pro iOS locum habet in 2 gradibus:

  1. Accepto applicationis institutionem manifestam per Item Service.
  2. Installatio fasciculi *.ipa secundum informationes in manifesta via HTTPS specificata.

Ita primum oportet institutionem manifestam (file type *.plist) generare cum mandato:

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

Ut perspicis, perspicuum ambitum omnium fere quae in applicatione aedificanda sunt continet.

Applicationem versionem ($AppVersion) Compressi potest cum imperio:

defaults read $ProjectDir/Info CFBundleVersion

parametri $ipaUrl ligamentum directum continet ad lima *.ipa download. Ex septima versione iOS, applicatio instituenda est per HTTPS. In versione octava, manifesti forma leviter mutata est: caudices uncinis ad icones applicationis similes

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

Ita, ut applicationis instituatur, simplex HTML pagina cum huius modi nexu satis est:

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

Propter necessitates progressionis et probationis Dicasteriorum, Plarium suum fabricandi institutionem applicationem creavit, quae nobis donat:

  • autonomiam et libertatem;
  • centralem accessus moderandi et securam applicationum institutionem per "temporaria" nexus dynamice creatis,
  • expandable functionality (id est, turmae evolutionis, si opus est, integrare functiones absentes in applicationem existentem).

temptationis

Nunc de prae-remissionis probatione applicationis utendi loquemur TestFlight.

Condiciones ad demptionem requisitae sunt species tabulae subscriptio App Store et praesentia API claves generatorum.

Plures sunt modi applicationis ut download:

  • per Xcode (Organizer);
  • per altool;
  • per Applicationem Loader pro vetustis versionibus Xcode (nunc Transporter).

Automatic deprimendi, altool adhibetur, qui etiam duos modos auctoritatis habet;

  • Utilia Password,
  • API Key.

Praestat applicationem utendi API Key utendi.

Ut API Key, ad Link et clavem generant. Praeter ipsam clavem in forma *.p8, duobus parametris indigebimus: IssuerID et KeyID.

Features of building and delivering iOS applications

Deinde, importo clavem receptam ad aedificandum servo:

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

Antequam applicationem ad TestFlight discas, applicationem convalidare debes, hoc cum mandato facimus:

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

quibus apiKey и apiIssuer valores agri habent ex pagina API key generation.

Deinde, in sana sanatione, applicationem cum mandato oneramus --upload-app iisdem parametris.

Applicatio intra unum aut alterum diem ab Apple probabitur et tunc probatoribus externis praesto fiet: nexus electronici ad institutionem mittentur.

Alius modus applicationis per altool ad applicationem adhibendus est ut Password App-Specific.

Ut ad Imprimis Password ad vos postulo ut App- Link et generale in sectione Securitatis.

Features of building and delivering iOS applications

Deinde in Keychain cum hac tessera aedificare debes recordum aedificare. Ex versione 11 e Xcode id fieri potest cum praecepto;

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

ubi:

$DeveloperName - nomen iOS elit propter usus ad operas Apple ad log.

$AppPswd - generatae Password Imprimis App.

Deinceps valorem parametri asci provisoris obtinemus et successum tesserae importat cum imperio:

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

Output ad nos adepto:

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

Ut videre potes, valor nominis brevis requisitus (asc-provisor) coincidit cum parametro $TeamID quod cum applicatione aedificando usi sumus.

Ad convalidandum et applicandum in TestFlight onerandum, praecepto utere:

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

Ut modulus valorem -p potes accipere valorem $AppPswd in unencrypted (explicit) forma.

Sed, ut iam dictum est, ex parte effectus, melius est eligere API Key pro altool concessionis, quia variae versiones Xcode habent quasdam difficultates ("non videt" Keychain, licentia errores in oneratione, etc.).

Ita est. Opto omnes implicatos bene aedificationes et molestias liberas emissiones in App Store.

Source: www.habr.com

Add a comment