iOS програмуудыг бүтээх, хүргэх онцлог

Энэ нийтлэлд бид Plarium Krasnodar студи CI/CD дибаг хийх явцад хуримтлуулсан iOS програмуудыг угсарч хэрэглэгчдэд хүргэх туршлагыг хуваалцах болно.

iOS програмуудыг бүтээх, хүргэх онцлог

Сургалт

Apple-ийн төхөөрөмжүүдэд зориулсан програм боловсруулахад ямар нэг байдлаар оролцож байгаа хүн бүр дэд бүтцийн маргаантай тав тухтай байдлыг аль хэдийн үнэлдэг. Хөгжүүлэгчийн профайл цэснээс дибаг хийх, бүтээх хэрэгсэл хүртэл бэрхшээлүүд хаа сайгүй байдаг.

Интернет дээр "үндсэн" тухай олон нийтлэл байдаг тул бид гол зүйлийг тодруулахыг хичээх болно. Програмаа амжилттай бүтээхийн тулд танд юу хэрэгтэй вэ:

  • хөгжүүлэгчийн данс;
  • бүтээх серверийн үүрэг гүйцэтгэдэг macOS-д суурилсан төхөөрөмж;
  • үүсгэсэн хөгжүүлэгчийн гэрчилгээ, цаашид өргөдөлд гарын үсэг зурахад ашиглагдах болно;
  • өвөрмөц программыг бий болгосон ID (Багц танигчийн ач холбогдлыг тэмдэглэх нь зүйтэй, учир нь орлуулагч ID-г ашиглах нь програмын олон функцийг ашиглах боломжгүй болгодог, жишээлбэл: Холбоотой домэйн, Түлхэх мэдэгдэл, Apple-ийн нэвтрэх болон бусад);
  • танилцуулга өргөдлийн гарын үсэг.

Хөгжүүлэгчийн гэрчилгээг ямар ч macOS төхөөрөмж дээр Keychain-ээр үүсгэсэн байх ёстой. Гэрчилгээний төрөл нь маш чухал юм. Аппликешны орчноос (Хөгжүүлэгч, QA, Үе шат, Үйлдвэрлэл) хамааран энэ нь өөр өөр байх болно (Хөгжүүлэлт эсвэл Түгээлт), мөн програмын гарын үсгийн профайлын төрөл.

Профайлын үндсэн төрлүүд:

  • Хөгжүүлэлт - хөгжүүлэлтийн багийн програмд ​​гарын үсэг зурахад зориулагдсан Хөгжлийн гэрчилгээг ашигладаг (төрлийн нэр iPhone Хөгжүүлэгч: XXXXXX);
  • Ad Hoc - Туршилтын программд гарын үсэг зурах, QA хэлтсээс дотоод баталгаажуулалт хийхэд зориулагдсан бөгөөд хөгжүүлэгчийн түгээлтийн гэрчилгээг ашигладаг (төрлийн нэр iPhone Distribution: XXXXX);
  • App Store - TestFlight-ээр дамжуулан гадаад тест хийх, App Store-д байршуулах хувилбарыг бүтээхэд хөгжүүлэгчийн түгээлтийн гэрчилгээг ашигладаг.

Хөгжлийн болон түр зуурын профайл үүсгэх үед үүнийг мөн зааж өгсөн болно төхөөрөмжийн жагсаалт, үүн дээр та бүтээц суулгаж болох бөгөөд энэ нь хэрэглэгчдэд хандах хандалтыг цаашид хязгаарлах боломжийг олгодог. Хаалттай бета туршилтын үед хандалтын хяналтыг TestFlight зохицуулдаг тул дараа хэлэлцэх болно App Store профайл дээр төхөөрөмжүүдийн жагсаалт байхгүй.

Тодорхой болгохын тулд та хөгжүүлэгчийн профайлыг доорх хүснэгт хэлбэрээр танилцуулж болно. Энэ нь угсралтын ажилд ямар параметр хэрэгтэй, тэдгээрийг хаанаас авахыг ойлгоход хялбар болгодог.

iOS програмуудыг бүтээх, хүргэх онцлог

Ассемблер

Ассемблейг төсөл болон орчинд нь ялгахад хялбар болгохын тулд бид профайлын нэрийг ашигладаг ${ProjectName}_${Instance}, өөрөөр хэлбэл төслийн нэр + жишээ (програмын орчноос хамаарна: Dev, QA, GD, Staging, Live гэх мэт).

Бүтэц серверт импортлох үед профайл нэрээ өвөрмөц ID болгон өөрчилж, хавтас руу зөөгдөнө /Users/$Username/Library/MobileDevice/Provisioning Profiles (Хаана $Username бүтээх серверийн хэрэглэгчийн дансны нэртэй тохирч байна).

*.ipa файлыг бүтээх хоёр арга байдаг - хуучин (PackageApplication) болон орчин үеийн (XcAchive үүсгэх, экспортлох замаар). Эхний аргыг хуучирсан гэж үздэг, учир нь 8.3 хувилбараас хойш програмын файлын багц модулийг Xcode түгээлтээс хассан. Үүнийг ашиглахын тулд та модулийг хуучин 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 — Түлхүүрийн оосороор баталгаажуулж болох хөгжүүлэгчийн бүртгэлийн нэр (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 мэдэгдлийн хувьд) оронд нь 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 — хүргэх арга нь програмын гарын үсгийн профайлын төрөлтэй тохирч байгаа бөгөөд өөрөөр хэлбэл, Хөгжүүлэлтийн хувьд хөгжүүлэлт, түр зуурын хувьд - түр зуурын, App Store-ын хувьд програмын дэлгүүрийн үнэ цэнэ байх болно.

$BundleID — Програмын тохиргоонд заасан програмын ID. Та дараах тушаалаар шалгаж болно:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId - өмнө нь ашиглагдаж байсан хөгжүүлэгчийн нэр, гарын үсгийн профайлын ID тохиргоо, экспортын тохиргоон дахь утгатай тохирч байх ёстой.

$TeamID - хөгжүүлэгчийн нэрийн дараа хаалтанд арван оронтой ID, жишээ нь: iPhone Хөгжүүлэгч: …… (XXXXXXXXX); Түлхүүрийн оосороор шалгах боломжтой.

Дараа нь экспортын командыг ашиглан бид шаардлагатай *.ipa файлыг авна.

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

Тээвэрлэлтийн мэдээлэл

Одоо цуглуулсан файлыг эцсийн хэрэглэгчдэд хүргэх, өөрөөр хэлбэл төхөөрөмж дээр суулгах шаардлагатай.

HockeyApp, AppBlade болон бусад программ хангамжийг түгээх олон үйлчилгээ байдаг боловч энэ нийтлэлд бид програмуудыг түгээх бие даасан серверийн талаар ярих болно.

IOS-д зориулсан програмыг суулгах нь 2 үе шаттайгаар явагдана.

  1. Items Service-ээр дамжуулан програмын суулгацыг хүлээн авч байна.
  2. HTTPS-ээр дамжуулан манифестэд заасан мэдээллийн дагуу *.ipa файлыг суулгана.

Тиймээс бид эхлээд дараах тушаалаар суулгацын манифест (файлын төрөл *.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-ээр дамжуулан,
  • Xcode (одоо Transporter)-ийн хуучин хувилбаруудад зориулсан Application Loader-ээр дамжуулан.

Автоматаар татаж авахын тулд 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 програмуудыг бүтээх, хүргэх онцлог

Дараа нь та түлхүүрийн оосор дээр энэ нууц үгээр серверийн бичлэг үүсгэх хэрэгтэй. Xcode-ийн 11 хувилбараас үүнийг дараах тушаалаар хийж болно.

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

Хаана:

$DeveloperName — Apple үйлчилгээнд нэвтрэхэд ашигладаг iOS хөгжүүлэгчийн бүртгэлийн нэр.

$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 шифрлэгдээгүй (тодорхой) хэлбэрээр.

Гэсэн хэдий ч, аль хэдийн дурьдсанчлан, гүйцэтгэлийн үүднээс авч үзвэл, Xcode-ийн өөр өөр хувилбаруудад тодорхой асуудал гардаг ("түлхүүрийн оосор харагдахгүй", байршуулах үед зөвшөөрлийн алдаа гэх мэт) тул altool зөвшөөрлийн хувьд API түлхүүрийг сонгох нь дээр.

Энэ бол үнэндээ. Оролцсон хүн бүрийг App Store-д амжилттай бүтээж, асуудалгүй гаргахыг хүсч байна.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх