Fitur mbangun lan ngirim aplikasi iOS

Ing artikel iki, kita nuduhake pengalaman ngrakit lan ngirim aplikasi iOS menyang pangguna, sing studio Plarium Krasnodar wis diklumpukake ing proses debugging CI / CD.

Fitur mbangun lan ngirim aplikasi iOS

Latihan

Saben wong sing melu pangembangan aplikasi kanggo piranti Apple kanthi cara siji utawa liyane, wis ngormati kenyamanan infrastruktur sing kontroversial. Kesulitan ditemokake ing endi wae: saka menu profil pangembang nganti alat debug lan mbangun.

Ana akeh artikel babagan "dasar" ing Internet, mula kita bakal nyoba nyorot perkara utama. Mangkene sing dibutuhake kanggo nggawe aplikasi kanthi sukses:

  • akun pangembang;
  • piranti basis macOS sing tumindak minangka server mbangun;
  • kui sertifikat pangembang, sing bakal digunakake kanggo mlebu aplikasi;
  • digawe aplikasi karo unik ID (Pentinge Identifier Bundle kudu dicathet, amarga panggunaan wildcard ID ndadekake ora bisa nggunakake akeh fungsi aplikasi kasebut, contone: Domain Gegandhengan, Notifikasi Push, Apple Sign In lan liya-liyane);
  • profil teken aplikasi.

Sertifikat pangembang kudu digawe liwat Keychain ing piranti macOS apa wae. Jinis sertifikat penting banget. Gumantung ing lingkungan aplikasi (Dev, QA, Staging, Produksi) bakal beda-beda (Pengembangan utawa Distribusi), uga jinis profil teken aplikasi.

Jenis profil utama:

  • Pangembangan - dimaksudake kanggo mlebu aplikasi tim pangembangan, sertifikat Pembangunan digunakake (jinis jeneng Pangembang iPhone: XXXXX);
  • Ad Hoc - dimaksudaké kanggo mlebu aplikasi tes lan verifikasi internal dening departemen QA, sertifikat Distribusi pangembang digunakake (jinis jeneng Distribusi iPhone: XXXXX);
  • App Store - release mbangun kanggo testing external liwat TestFlight lan ngunggah menyang App Store, certificate Distribusi pangembang digunakake.

Nalika ngasilake Profil Development lan Ad Hoc, uga dituduhake dhaptar piranti, ing ngendi sampeyan bisa nginstal bangunan, sing ngidini sampeyan mbatesi akses luwih akeh kanggo pangguna. Ora ana dhaptar piranti ing profil App Store, amarga kontrol akses sajrone tes beta tertutup ditangani dening TestFlight, sing bakal dibahas mengko.

Kanggo gamblang, sampeyan bisa nampilake profil pangembang ing wangun tabel ing ngisor iki. Iki nggawe luwih gampang kanggo ngerti paramèter apa sing dibutuhake kanggo perakitan lan saka ngendi.

Fitur mbangun lan ngirim aplikasi iOS

Majelis

Kanggo nggawe luwih gampang kanggo misahake rakitan dening project lan lingkungan, kita nggunakake jeneng profil kaya ${ProjectName}_${Instance}, yaiku, jeneng proyek + conto (gumantung ing lingkungan aplikasi: Dev, QA, GD, Staging, Live, lan liya-liyane).

Nalika diimpor menyang server mbangun, profil ngganti jeneng dadi ID unik lan dipindhah menyang folder /Users/$Username/Library/MobileDevice/Provisioning Profiles (Endi $Username cocog karo jeneng akun pangguna server mbangun).

Ana rong cara kanggo mbangun file * .ipa - warisan (PackageApplication) lan modern (liwat XcAchive nggawe lan ekspor). Cara pisanan dianggep lungse, amarga wiwit versi 8.3 modul paket file app wis dibusak saka distribusi Xcode. Kanggo nggunakake, sampeyan kudu nyalin modul saka Xcode lawas (versi 8.2 lan sadurungé) menyang folder:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

Lan banjur mbukak printah:

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

Sabanjure sampeyan kudu ngumpulake file *.app saka aplikasi:

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

Ngendi:

-workspace - path menyang file project.

-scheme - skema sing digunakake, sing ditemtokake ing proyek kasebut.

-derivedDataPath — path kanggo ngundhuh aplikasi nglumpuk (* .app).

CODE_SIGN_IDENTITY - jeneng akun pangembang, sing bisa diverifikasi ing Keychain (Pengembang iPhone: XXXX XXXXXXX, tanpa TeamID ing kurung).

Fitur mbangun lan ngirim aplikasi iOS

PROVISIONING_PROFILE - ID Profil kanggo mlebu aplikasi, sing bisa dipikolehi kanthi prentah:

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

Yen aplikasi nggunakake profil tambahan (contone, kanggo Push Notifikasi), banjur tinimbang PROVISIONING_PROFILE nuduhake:

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

Sabanjure, asil *.app file kudu dikemas menyang *.ipa. Kanggo nindakake iki, sampeyan bisa nggunakake printah kaya:

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

Nanging, cara iki dianggep lungse saka sudut pandang Apple. Iku cocog kanggo njupuk *.ipa dening ngekspor saka arsip aplikasi.

Pisanan sampeyan kudu ngumpulake arsip kanthi prentah:

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

Bentenipun dumunung ing cara perakitan lan opsi SYNCHRONOUS_SYMBOL_PROCESSING, kang disables simbol unloading ing wektu mbangun.

Sabanjure, kita kudu nggawe file kanthi setelan ekspor:

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

Ngendi:

$Method - cara pangiriman, cocog karo jinis profil teken aplikasi, yaiku, kanggo Pangembangan nilai bakal dadi pangembangan, kanggo Ad Hoc - ad-hoc, lan kanggo App Store - app-store.

$BundleID - ID Aplikasi, sing ditemtokake ing setelan aplikasi. Sampeyan bisa mriksa kanthi printah:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId - jeneng pangembang lan setelan ID profil teken sing digunakake sadurunge lan kudu cocog karo nilai ing setelan ekspor.

$TeamID — ID sepuluh digit ing kurung sawise jeneng pangembang, contone: Pangembang iPhone: …… (XXXXXXXXXX); bisa dicenthang ing Keychain.

Sabanjure, nggunakake printah ekspor, kita entuk file *.ipa sing dibutuhake:

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

Informasi kapal

Saiki file sing diklumpukake kudu dikirim menyang pangguna pungkasan, yaiku, diinstal ing piranti kasebut.

Ana akeh layanan kanggo nyebarake Development lan Ad Hoc mbangun, kayata HockeyApp, AppBlade lan liya-liyane, nanging ing artikel iki kita bakal ngomong babagan server mandiri kanggo nyebarake aplikasi.

Nginstal aplikasi kanggo iOS njupuk Panggonan ing 2 orane tumrap sekolah:

  1. Nampa manifest instalasi aplikasi liwat Layanan Item.
  2. Instalasi file *.ipa miturut informasi kasebut ing manifest liwat HTTPS.

Dadi, kita kudu nggawe manifest instalasi (jinis file *.plist) kanthi prentah:

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

Kaya sing sampeyan ngerteni, manifes ngemot meh kabeh paramèter sing ana ing mbangun aplikasi kasebut.

Versi aplikasi ($AppVersion) bisa dipriksa nganggo printah:

defaults read $ProjectDir/Info CFBundleVersion

Parameter $ipaUrl ngandhut link langsung kanggo ngundhuh * .ipa file. Saka iOS versi kapitu, aplikasi kasebut kudu diinstal liwat HTTPS. Ing versi kaping wolu, format manifes wis rada owah: pamblokiran kanthi setelan kanggo lambang aplikasi kaya

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

Mangkono, kanggo nginstal aplikasi, kaca HTML prasaja kanthi pranala kaya iki cukup:

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

Kanggo kabutuhan departemen pangembangan lan tes, Plarium wis nggawe aplikasi instalasi mbangun dhewe, sing menehi kita:

  • otonomi lan kamardikan,
  • sentralisasi kontrol akses lan instalasi aplikasi sing aman liwat tautan sing digawe kanthi dinamis "sementara",
  • fungsi sing bisa ditambahi (yaiku, tim pangembang, yen perlu, bisa nggabungake fungsi sing ilang menyang aplikasi sing wis ana).

Tes

Saiki kita bakal ngomong babagan tes pra-rilis aplikasi sing digunakake TestFlight.

Kahanan sing dibutuhake kanggo ndownload yaiku jinis profil tandha App Store lan anane kunci API sing digawe.

Ana sawetara cara kanggo ndownload aplikasi:

  • liwat Xcode (Organizer),
  • liwat altool,
  • liwat Application Loader kanggo versi lawas saka Xcode (saiki Transporter).

Kanggo ngundhuh otomatis, altool digunakake, sing uga nduweni rong cara wewenang:

  • Sandi Khusus Aplikasi,
  • Kunci API.

Luwih becik ndownload aplikasi kasebut nggunakake Kunci API.

Kanggo entuk Kunci API, pindhah menyang link lan ngasilake kunci. Saliyane tombol dhewe ing * .p8 format, kita kudu loro paramèter: IssuerID lan KeyID.

Fitur mbangun lan ngirim aplikasi iOS

Sabanjure, ngimpor kunci sing diunduh menyang server mbangun:

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

Sadurunge ngunggah aplikasi menyang TestFlight, sampeyan kudu ngesyahke aplikasi kasebut, kita nindakake iki kanthi prentah:

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

Ngendi apiKey и apiIssuer duwe nilai lapangan saka kaca generasi kunci API.

Sabanjure, sawise validasi sukses, kita mbukak aplikasi kanthi printah --upload-app kanthi paramèter sing padha.

Aplikasi kasebut bakal dites dening Apple sajrone siji utawa rong dina lan bakal kasedhiya kanggo panguji eksternal: bakal dikirimi email link kanggo instalasi.

Cara liya kanggo ndownload aplikasi liwat altool yaiku nggunakake Sandi Khusus Aplikasi.

Kanggo njaluk Sandi Khusus App sampeyan kudu pindhah menyang link lan generate ing bagean Keamanan.

Fitur mbangun lan ngirim aplikasi iOS

Sabanjure, sampeyan kudu nggawe rekaman server mbangun ing Keychain nganggo sandhi iki. Saka versi 11 Xcode iki bisa ditindakake kanthi prentah:

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

Ngendi:

$DeveloperName - jeneng akun pangembang iOS sing digunakake kanggo mlebu menyang layanan Apple.

$AppPswd - digawe Sandi Khusus App.

Sabanjure, kita entuk nilai parameter panyedhiya asc lan mriksa sukses ngimpor sandhi kanthi prentah:

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

Kita entuk output:

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

Kaya sing sampeyan ngerteni, nilai Jeneng Singkat sing dibutuhake (panyedhiya asc) cocog karo parameter $ TeamID sing digunakake nalika mbangun aplikasi kasebut.

Kanggo validasi lan mbukak aplikasi menyang TestFlight, gunakake printah:

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

Minangka nilai parameter -p sampeyan bisa njupuk nilai $AppPswd ing wangun unencrypted (eksplisit).

Nanging, kaya sing wis kasebut, saka sudut pandang kinerja, luwih becik milih API Key kanggo wewenang altool, amarga versi Xcode sing beda-beda duwe masalah tartamtu ("ora weruh" Keychain, kesalahan wewenang nalika upload, lsp.).

Sing kabeh, bener. Muga-muga kabeh wong sing melu mbangun sukses lan rilis tanpa masalah ing App Store.

Source: www.habr.com

Add a comment