Funksjoner for å bygge og levere iOS-applikasjoner
I denne artikkelen deler vi erfaringen med å sette sammen og levere iOS-applikasjoner til brukere, som Plarium Krasnodar-studioet har samlet i prosessen med å feilsøke CI/CD.
Trening
Hver person som på en eller annen måte er involvert i utviklingen av applikasjoner for Apple-enheter har allerede satt pris på den kontroversielle bekvemmeligheten til infrastrukturen. Vanskeligheter finnes overalt: fra utviklerprofilmenyen til feilsøkings- og byggeverktøyene.
Det er mange artikler om "grunnleggende" på Internett, så vi vil prøve å fremheve det viktigste. Her er det du trenger for å bygge søknaden din på en vellykket måte:
en macOS-basert enhet som fungerer som en byggeserver;
generert utviklersertifikat, som vil bli videre brukt til å signere søknaden;
opprettet applikasjon med unik ID (betydningen av pakkeidentifikatoren bør bemerkes, fordi bruken av jokertegn-ID gjør det umulig å bruke mange funksjoner i applikasjonen, for eksempel: Associated Domains, Push Notifications, Apple Sign In og andre);
Et utviklersertifikat må genereres via nøkkelring på en hvilken som helst macOS-enhet. Type sertifikat er veldig viktig. Avhengig av applikasjonsmiljøet (Dev, QA, Staging, Production) vil det variere (Utvikling eller Distribusjon), og det samme vil typen applikasjonssignaturprofil.
Hovedtyper av profiler:
Utvikling - beregnet for å signere søknaden til utviklingsteamet, et utviklingssertifikat brukes (typenavn iPhone-utvikler: XXXXX);
Ad Hoc - beregnet for å signere en testapplikasjon og intern verifisering av QA-avdelingen, utviklerens distribusjonssertifikat brukes (typenavn iPhone-distribusjon: XXXXX);
App Store - utgivelsesbygg for ekstern testing via TestFlight og opplasting til App Store, utviklerens distribusjonssertifikat brukes.
Ved generering av utviklings- og ad hoc-profiler er det også indikert enhetsliste, som du kan installere en build på, som lar deg begrense tilgangen for brukere ytterligere. Det er ingen liste over enheter i App Store-profilen, siden tilgangskontroll under lukket beta-testing håndteres av TestFlight, som vil bli diskutert senere.
For klarhetens skyld kan du presentere utviklerens profil i form av en tabell nedenfor. Dette gjør det lettere å forstå hvilke parametere vi trenger for montering og hvor de skal hentes fra.
sammenstilling
For å gjøre det enklere å skille sammenstillinger etter prosjekt og miljø bruker vi profilnavn som ${ProjectName}_${Instance}, det vil si prosjektnavn + forekomst (avhenger av applikasjonsmiljøet: Dev, QA, GD, Staging, Live, og så videre).
Når den importeres til byggeserveren, endrer profilen navn til en unik ID og flyttes til mappen /Users/$Username/Library/MobileDevice/Provisioning Profiles (hvor $Username tilsvarer brukerkontonavnet til byggeserveren).
Det er to måter å bygge en *.ipa-fil på – eldre (PackageApplication) og moderne (via XcAchive-oppretting og eksport). Den første metoden anses som foreldet siden versjon 8.3 har app-filpakkemodulen blitt fjernet fra Xcode-distribusjonen. For å bruke den må du kopiere modulen fra den gamle Xcode (versjon 8.2 og tidligere) til mappen: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
$Method — leveringsmetode, tilsvarer applikasjonssignaturprofiltypen, det vil si at for utvikling vil verdien være utvikling, for Ad Hoc - ad-hoc, og for App Store - app-butikk.
$BundleID — Applikasjons-ID, som er angitt i applikasjonsinnstillingene. Du kan sjekke med kommandoen:
defaults read $ProjectDir/Info CFBundleIdentifier
$DevAccName и $ProfileId — utviklernavn og signaturprofil-ID-innstillinger som ble brukt tidligere og må samsvare med verdiene i eksportinnstillingene.
$TeamID — tisifret ID i parentes etter utviklerens navn, eksempel: iPhone-utvikler: …… (XXXXXXXXXX); kan sjekkes i nøkkelring.
Deretter, ved å bruke eksportkommandoen, får vi den nødvendige *.ipa-filen:
Nå må den innsamlede filen leveres til sluttbrukeren, det vil si installert på enheten.
Det finnes mange tjenester for distribusjon av utviklings- og ad hoc-bygg, som HockeyApp, AppBlade og andre, men i denne artikkelen vil vi snakke om en frittstående server for distribusjon av applikasjoner.
Installasjon av applikasjonen for iOS skjer i 2 trinn:
Motta applikasjonsinstallasjonsmanifestet gjennom Items-tjenesten.
Installasjon av *.ipa-filen i henhold til informasjonen spesifisert i manifestet via HTTPS.
Derfor må vi først generere et installasjonsmanifest (filtype *.plist) med kommandoen:
Som du kan se, inneholder manifestet nesten alle parameterne som er involvert i å bygge applikasjonen.
Applikasjonsversjon ($AppVersion) kan sjekkes med kommandoen:
defaults read $ProjectDir/Info CFBundleVersion
Parameter $ipaUrl inneholder en direkte lenke for å laste ned *.ipa-filen. Fra den syvende versjonen av iOS må applikasjonen installeres via HTTPS. I den åttende versjonen har formatet til manifestet endret seg litt: blokker med innstillinger for applikasjonsikoner som
<images>
<image>...</image>
</images>
Derfor, for å installere applikasjonen, er en enkel HTML-side med en lenke som dette nok:
hvor apiKey и apiIssuer har feltverdier fra API-nøkkelgenereringssiden.
Deretter, etter vellykket validering, laster vi applikasjonen med kommandoen --upload-app med samme parametere.
Applikasjonen vil bli testet av Apple i løpet av én eller to dager og vil deretter bli tilgjengelig for eksterne testere: de vil få e-post til lenker for installasjon.
En annen måte å laste ned en applikasjon gjennom altool er å bruke appspesifikt passord.
For å få det appspesifikke passordet må du gå til link og generer den i sikkerhetsdelen.
Deretter bør du opprette en byggeserverpost i nøkkelring med dette passordet. Fra versjon 11 av Xcode kan dette gjøres med kommandoen:
Som en parameterverdi -p du kan ta verdien $AppPswd i ukryptert (eksplisitt) form.
Men som allerede nevnt, fra et ytelsessynspunkt, er det bedre å velge API Key for altool-autorisasjon, siden forskjellige versjoner av Xcode har visse problemer ("ser ikke" nøkkelring, autorisasjonsfeil under opplasting, etc.).
Det er alt, faktisk. Jeg ønsker alle involverte vellykkede bygg og problemfrie utgivelser i App Store.