Π₯арактСристики Π½Π° сглобяванС ΠΈ доставка Π½Π° iOS прилоТСния

Π’ Ρ‚Π°Π·ΠΈ статия сподСлямС ΠΎΠΏΠΈΡ‚Π° ΠΎΡ‚ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΈ прСдоставянСто Π½Π° iOS прилоТСния Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅, ΠΊΠΎΠΉΡ‚ΠΎ Plarium Krasnodar Π΅ Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π» Π² процСса Π½Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² CI/CD.

Π₯арактСристики Π½Π° сглобяванС ΠΈ доставка Π½Π° iOS прилоТСния

ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅

ВсСки Ρ‡ΠΎΠ²Π΅ΠΊ, ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½ ΡΠ²ΡŠΡ€Π·Π°Π½ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° прилоТСния Π·Π° устройства Π½Π° Apple, Π²Π΅Ρ‡Π΅ Π΅ успял Π΄Π° ΠΎΡ†Π΅Π½ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²ΠΎΡ‚ΠΎ удобство Π½Π° инфраструктурата. БлоТноститС са навсякъдС, ΠΎΡ‚ ΠΌΠ΅Π½ΡŽΡ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° Π½Π° програмиста Π΄ΠΎ инструмСнтитС Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅.

Π’ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ статии Π·Π° β€žΠΎΡΠ½ΠΎΠ²ΠΈΡ‚Π΅β€œ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‰Π΅ сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π΅ΠΌ основното. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π²ΠΈ трябва, Π·Π° Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ:

  • Π°ΠΊΠ°ΡƒΠ½Ρ‚ Π½Π° програмист;
  • устройство, Π±Π°Π·ΠΈΡ€Π°Π½ΠΎ Π½Π° macOS, дСйстващо ΠΊΠ°Ρ‚ΠΎ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅;
  • Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ΠΈ сСртификат Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° подписванС Π½Π° заявлСниСто;
  • създадСно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ ID (Врябва Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ ваТността Π½Π° Bundle Identifier, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ID със замСстващ Π·Π½Π°ΠΊ ΠΏΡ€Π°Π²ΠΈ нСвъзмоТно ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Асоциирани Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ, Push Notifications, Apple Sign In ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ);
  • ΠΏΡ€ΠΎΡ„ΠΈΠ» подпис Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π‘Π΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΡŠΡ‚ Π½Π° програмист трябва Π΄Π° бъдС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ Ρ‡Ρ€Π΅Π· Keychain Π½Π° всяко устройство с macOS. Π’ΠΈΠ΄ΡŠΡ‚ Π½Π° сСртификата Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ΅Π½. Π’ зависимост ΠΎΡ‚ срСдата Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ (Dev, QA, Staging, Production), тя Ρ‰Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° (Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅ ΠΈΠ»ΠΈ разпространСниС), ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Ρ‚ΠΈΠΏΠ° Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° Π·Π° подписванС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Основни Π²ΠΈΠ΄ΠΎΠ²Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ:

  • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° - ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Π·Π° подписванС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΅ΠΊΠΈΠΏΠ° Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сС ΡΠ΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΡŠΡ‚ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (ΠΈΠΌΠ΅ Π½Π° Ρ‚ΠΈΠΏΠ° iPhone Developer: XXXXX);
  • Ad Hoc - ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° подписванС Π½Π° тСстово ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΡ‚ QA ΠΎΡ‚Π΄Π΅Π»Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ сСртификата Π·Π° разпространСниС Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° (ΠΈΠΌΠ΅ Π½Π° Ρ‚ΠΈΠΏΠ° iPhone Distribution: XXXXX);
  • App Store Π΅ вСрсия Π½Π° вСрсия Π·Π° външно тСстванС Ρ‡Ρ€Π΅Π· TestFlight ΠΈ ΠΊΠ°Ρ‡Π²Π°Π½Π΅ Π² App Store, ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сСртификат Π·Π° разпространСниС Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ.

ΠŸΡ€ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ‚Π΅ Development ΠΈ Ad Hoc ΡΡŠΡ‰ΠΎ сС посочва списък с устройства, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° инсталиратС компилацията, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅. Π’ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° Π½Π° App Store няма списък с устройства, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ TestFlight, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС обсъдСн ΠΏΠΎ-късно, отговаря Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½ΠΎ Π±Π΅Ρ‚Π° тСстванС.

Π—Π° ΠΏΠΎ-голяма яснота ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° прСдставитС ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ. Π’ΠΎΠ²Π° улСснява Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° сглобката Π½ΠΈ трябват ΠΈ ΠΎΡ‚ΠΊΡŠΠ΄Π΅ Π΄Π° Π³ΠΈ Π²Π·Π΅ΠΌΠ΅ΠΌ.

Π₯арактСристики Π½Π° сглобяванС ΠΈ доставка Π½Π° iOS прилоТСния

ΠΌΠΎΠ½Ρ‚Π°ΠΆ

Π—Π° Π΄Π° улСсним раздСлянСто Π½Π° сборкитС ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ срСда, Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ‚Π΅ Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ${ProjectName}_${Instance}, тоСст ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° + СкзСмпляр (Π² зависимост ΠΎΡ‚ срСдата Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ: Dev, QA, GD, Staging, Live ΠΈ Ρ‚.Π½.).

ΠšΠΎΠ³Π°Ρ‚ΠΎ сС ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π° Π² ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŠΡ‚ промСня ΠΈΠΌΠ΅Ρ‚ΠΎ си Π½Π° ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ сС прСмСства Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° /Users/$Username/Library/MobileDevice/Provisioning Profiles (ΠšΡŠΠ΄Π΅Ρ‚ΠΎ $Username съвпада с ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° потрСбитСлския Π°ΠΊΠ°ΡƒΠ½Ρ‚ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅).

Има Π΄Π²Π° Π½Π°Ρ‡ΠΈΠ½Π° Π·Π° сглобяванС Π½Π° *.ipa Ρ„Π°ΠΉΠ»Π° - остарял (PackageApplication) ΠΈ ΠΌΠΎΠ΄Π΅Ρ€Π΅Π½ (Ρ‡Ρ€Π΅Π· създаванС ΠΈ СкспортиранС Π½Π° XcAchive). ΠŸΡŠΡ€Π²ΠΈΡΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ сС счита Π·Π° остарял, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŠΡ‚ Π·Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ ΠΎΡ‚ разпространСниСто Π½Π° Xcode ΠΎΡ‚ вСрсия 8.3. Π—Π° Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅, трябва Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π° ΠΎΡ‚ стария Xcode (вСрсия 8.2 ΠΈ ΠΏΠΎ-стари) Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π°:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

И слСд Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:

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

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° трябва Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ *.app Ρ„Π°ΠΉΠ»Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ:

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

КъдС:

-workspace - ΠΏΡŠΡ‚ Π΄ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

-scheme - ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° схСма, посочСна Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

-derivedDataPath - ΠΏΡŠΡ‚Ρ Π·Π° Ρ€Π°Π·Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° сглобСното ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (*.app).

CODE_SIGN_IDENTITY β€” ΠΈΠΌΠ΅ Π½Π° Π°ΠΊΠ°ΡƒΠ½Ρ‚ Π½Π° програмист, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ Π² Keychain (Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π° iPhone: XXXX XXXXXXX, Π±Π΅Π· TeamID Π² скоби).

Π₯арактСристики Π½Π° сглобяванС ΠΈ доставка Π½Π° iOS прилоТСния

PROVISIONING_PROFILE β€” ID Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ» Π·Π° подписванС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:

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

Ако ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ ΠΏΡ€ΠΎΡ„ΠΈΠ» (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Push Notifications), Ρ‚ΠΎΠ³Π°Π²Π° вмСсто PROVISIONING_PROFILE посочСтС:

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

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° получСният *.app Ρ„Π°ΠΉΠ» трябва Π΄Π° бъдС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½ Π² *.ipa. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠ°Ρ‚ΠΎ:

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

Π’ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±Π°Ρ‡Π΅ сС счита Π·Π° остарял ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Apple. УмСстно Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° *.ipa Ρ‡Ρ€Π΅Π· СкспортиранС ΠΎΡ‚ Π°Ρ€Ρ…ΠΈΠ²Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

ΠŸΡŠΡ€Π²ΠΎ трябва Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ Π°Ρ€Ρ…ΠΈΠ²Π° с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:

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

Π Π°Π·Π»ΠΈΠΊΠΈΡ‚Π΅ са Π² Π½Π°Ρ‡ΠΈΠ½Π° Π½Π° сглобяванС ΠΈ ΠΎΠΏΡ†ΠΈΠΈΡ‚Π΅ SYNCHRONOUS_SYMBOL_PROCESSING, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° Ρ€Π°Π·Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° символи ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° трябва Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΠΌΠ΅ Ρ„Π°ΠΉΠ» с настройки Π·Π° СкспортиранС:

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

КъдС:

$Method - ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° доставка, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° Ρ‚ΠΈΠΏΠ° Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° Π½Π° подписа Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ‚.Π΅. Π·Π° Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° стойността Ρ‰Π΅ бъдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Π·Π° Ad Hoc - ad-hoc, Π° Π·Π° App Store - ΠΌΠ°Π³Π°Π·ΠΈΠ½ Π·Π° прилоТСния.

$BundleID - ID Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ сС посочва Π² настройкитС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName ΠΈ $ProfileId - ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈ настройкитС Π·Π° ID Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° Π½Π° подписа, ΠΊΠΎΠΈΡ‚ΠΎ са Π±ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° ΠΈ трябва Π΄Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‚ Π½Π° стойноститС Π² настройкитС Π·Π° СкспортиранС.

$TeamID - дСсСтцифрСн ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² скоби слСд ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: iPhone Developer: ...... (XXXXXXXXXX); ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ Π² Keychain.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π·Π° СкспортиранС, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ нСобходимия * .ipa Ρ„Π°ΠΉΠ»:

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

Доставка

Π‘Π΅Π³Π° сглобСният Ρ„Π°ΠΉΠ» трябва Π΄Π° бъдС доставСн Π½Π° крайния ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π», тоСст инсталиран Π½Π° устройството.

Има ΠΌΠ½ΠΎΠ³ΠΎ услуги Π·Π° разпространСниС Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ad hoc ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ, ΠΊΠ°Ρ‚ΠΎ HockeyApp, AppBlade ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ, Π½ΠΎ Π² Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ сС ΡΡŠΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΠΌ Π²ΡŠΡ€Ρ…Ρƒ самостоятСлСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° разпространСниС Π½Π° прилоТСния.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° iOS ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π½Π° 2 Π΅Ρ‚Π°ΠΏΠ°:

  1. ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° манифСста Π·Π° инсталиранС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‡Ρ€Π΅Π· услугата Items.
  2. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»Π° *.ipa спорСд информацията, посочСна Π² манифСста Ρ‡Ρ€Π΅Π· HTTPS.

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΏΡŠΡ€Π²ΠΎ трябва Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΠΌΠ΅ инсталационСн манифСст (Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‚ΠΈΠΏ *.plist) с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:

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

ΠšΠ°ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΌΠ°Π½ΠΈΡ„Π΅ΡΡ‚ΡŠΡ‚ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΏΠΎΡ‡Ρ‚ΠΈ всички ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

ВСрсия Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ($AppVersion) ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:

defaults read $ProjectDir/Info CFBundleVersion

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ $ipaUrl ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ° Π·Π° изтСглянС Π½Π° Ρ„Π°ΠΉΠ»Π° *.ipa. ΠžΡ‚ сСдмата вСрсия Π½Π° iOS ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ трябва Π΄Π° сС инсталира ΠΏΡ€Π΅Π· HTTPS. Π’ осмата вСрсия Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΡŠΡ‚ Π½Π° манифСста Π΅ Π»Π΅ΠΊΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½: Π±Π»ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ с настройкитС Π·Π° ΠΈΠΊΠΎΠ½ΠΈΡ‚Π΅ Π½Π° прилоТСнията Π½Π° ΠΈΠ·Π³Π»Π΅Π΄Π° са ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΈ.

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

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, Π·Π° Π΄Π° инсталиратС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½Π° проста html страница с Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΊΠ°Ρ‚ΠΎ Ρ‚Π°Π·ΠΈ:

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

Π—Π° Π½ΡƒΠΆΠ΄ΠΈΡ‚Π΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚Π΅ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ тСстванС, Plarium създадС собствСно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° инсталиранС Π½Π° компилация, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½ΠΈ Π΄Π°Π²Π°:

  • автономия ΠΈ нСзависимост,
  • Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° ΠΈ сигурно инсталиранС Π½Π° прилоТСния Ρ‡Ρ€Π΅Π· "Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ", Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ създавани Π²Ρ€ΡŠΠ·ΠΊΠΈ,
  • Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ΅ΠΌΠ° функционалност (Ρ‚.Π΅. Π΅ΠΊΠΈΠΏΡŠΡ‚ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π° липсващитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅).

ВСстванС

Π‘Π΅Π³Π° Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° тСстванС ΠΏΡ€Π΅Π΄ΠΈ пусканС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΎ TestFlight.

ΠŸΡ€Π΅Π΄ΠΏΠΎΡΡ‚Π°Π²ΠΊΠΈ Π·Π° изтСглянС са Ρ‚ΠΈΠΏΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° Π·Π° подписванС Π² App Store ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ΠΈ API ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅.

Има няколко Π½Π°Ρ‡ΠΈΠ½Π° Π·Π° изтСглянС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ:

  • Ρ‡Ρ€Π΅Π· Xcode (ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€),
  • Ρ‡Ρ€Π΅Π· altool,
  • Ρ‡Ρ€Π΅Π· Application Loader Π·Π° ΠΏΠΎ-стари вСрсии Π½Π° Xcode (сСга Transporter).

Π—Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ изтСглянС сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° altool, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ° Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π° оторизация:

  • ΠŸΠ°Ρ€ΠΎΠ»Π° Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅,
  • API ΠΊΠ»ΡŽΡ‡.

Π—Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π½Π΅ Π΅ Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‡Ρ€Π΅Π· API ΠΊΠ»ΡŽΡ‡Π°.

Π—Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ API ΠΊΠ»ΡŽΡ‡Π°, ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡. Π’ допълнСниС към самия ΠΊΠ»ΡŽΡ‡ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ *.p8, ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π°: IssuerID ΠΈ KeyID.

Π₯арактСристики Π½Π° сглобяванС ΠΈ доставка Π½Π° iOS прилоТСния

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ изтСглСния ΠΊΠ»ΡŽΡ‡ Π² ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅:

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

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° ΠΊΠ°Ρ‡ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² TestFlight, трябва Π΄Π° ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π° с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:

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

ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ apiKey ΠΈ apiIssuer ΠΈΠΌΠ°Ρ‚ стойности Π½Π° ΠΏΠΎΠ»Π΅Ρ‚Π° ΠΎΡ‚ страницата Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° API ΠΊΠ»ΡŽΡ‡.

ОсвСн Ρ‚ΠΎΠ²Π°, ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅, Π·Π°Ρ€Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° --upload-app със ΡΡŠΡ‰ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ бъдС тСствано ΠΎΡ‚ Apple Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° Π΄Π½ΠΈ ΠΈ слСд Ρ‚ΠΎΠ²Π° Ρ‰Π΅ станС Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎ Π·Π° външни тСстСри: Ρ‚Π΅ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ Π²Ρ€ΡŠΠ·ΠΊΠΈ Π·Π° инсталиранС ΠΏΠΎ ΠΏΠΎΡ‰Π°Ρ‚Π°.

Π”Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½ Π·Π° изтСглянС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‡Ρ€Π΅Π· altool Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π° Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π—Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π° Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, трябва Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΈ Π³ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΠΉΡ‚Π΅ Π² сСкцията Бигурност.

Π₯арактСристики Π½Π° сглобяванС ΠΈ доставка Π½Π° iOS прилоТСния

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ запис Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π² Keychain с Ρ‚Π°Π·ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π°. ΠžΡ‚ вСрсия 11 Π½Π° Xcode Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:

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

КъдС:

$DeveloperName β€” ИмС Π½Π° Π°ΠΊΠ°ΡƒΠ½Ρ‚ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π° iOS, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ Π·Π° Π²Π»ΠΈΠ·Π°Π½Π΅ Π² услугитС Π½Π° Apple.

$AppPswd - Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π° ΠΏΠ°Ρ€ΠΎΠ»Π° Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ стойността Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° asc-provider ΠΈ провСрявамС успСха Π½Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°Ρ€ΠΎΠ»Π° с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:

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

ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°:

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

ΠšΠ°ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΆΠ΅Π»Π°Π½Π°Ρ‚Π° стойност Π·Π° ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΈΠΌΠ΅ (asc-provider) ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° $TeamID, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ ΠΏΡ€ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π—Π° Π΄Π° ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄ΠΈΡ‚Π΅ ΠΈ Π·Π°Ρ€Π΅Π΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² TestFlight, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:

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

ΠšΠ°Ρ‚ΠΎ стойност Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° -p ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ стойността $AppPswd Π² Π½Π΅ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½Π° (явна) Ρ„ΠΎΡ€ΠΌΠ°.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΊΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ бСшС спомСнато, ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° производитСлността Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ API ΠΊΠ»ΡŽΡ‡Π° Π·Π° оторизация Π½Π° инструмСнта, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ вСрсии Π½Π° Xcode ΠΈΠΌΠ°Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ (β€žΠ½Π΅ Π²ΠΈΠΆΠ΄Π°β€œ Keychain, Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΡ€ΠΈ оторизация ΠΏΡ€ΠΈ ΠΊΠ°Ρ‡Π²Π°Π½Π΅ ΠΈ Ρ‚.Π½. ).

Π’ΠΎΠ²Π° Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΅ всичко. ПоТСлавам Π½Π° всички участващи ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ ΠΈ Π±Π΅Π·ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΈ вСрсии Π² App Store.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€