iOS යෙදුම් ගොඩනැගීමේ සහ බෙදා හැරීමේ විශේෂාංග

මෙම ලිපියෙන්, අපි CI/CD දෝෂහරණය කිරීමේ ක්‍රියාවලියේදී Plarium Krasnodar චිත්‍රාගාරය රැස් කර ඇති iOS යෙදුම් එකලස් කිරීමේ සහ පරිශීලකයින්ට ලබා දීමේ අත්දැකීම් බෙදා ගනිමු.

iOS යෙදුම් ගොඩනැගීමේ සහ බෙදා හැරීමේ විශේෂාංග

සකස් කිරීම

Apple උපාංග සඳහා යෙදුම් සංවර්ධනය කිරීම සඳහා එක් ආකාරයකින් හෝ වෙනත් ආකාරයකින් සම්බන්ධ වන සෑම පුද්ගලයෙකුම යටිතල පහසුකම්වල මතභේදාත්මක පහසුව දැනටමත් අගය කර ඇත. දුෂ්කරතා සෑම තැනකම දක්නට ලැබේ: සංවර්ධක පැතිකඩ මෙනුවේ සිට දෝශ නිරාකරණය සහ ගොඩනැගීමේ මෙවලම් දක්වා.

අන්තර්ජාලයේ "මූලික" පිළිබඳ ලිපි ඕනෑ තරම් තිබේ, එබැවින් අපි ප්රධාන දෙය ඉස්මතු කිරීමට උත්සාහ කරමු. ඔබගේ යෙදුම සාර්ථකව ගොඩනැගීමට ඔබට අවශ්‍ය දේ මෙන්න:

  • සංවර්ධක ගිණුම;
  • MacOS මත පදනම් වූ උපාංගයක් ගොඩනැගීමේ සේවාදායකයක් ලෙස ක්‍රියා කරයි;
  • උත්පාදනය කරන ලදී සංවර්ධක සහතිකය, අයදුම්පත අත්සන් කිරීමට තවදුරටත් භාවිතා කරනු ඇත;
  • අද්විතීය සමග නිර්මාණය කරන ලද යෙදුම ID (Bundle Identifier හි වැදගත්කම සටහන් කළ යුතුය, මන්ද වයිල්ඩ්කාඩ් හැඳුනුම්පත භාවිතය යෙදුමේ බොහෝ කාර්යයන් භාවිතා කිරීමට නොහැකි වන බැවිනි, උදාහරණයක් ලෙස: ආශ්‍රිත වසම්, තල්ලු දැනුම්දීම්, Apple Sign In සහ වෙනත්);
  • පැතිකඩ අයදුම්පත් අත්සන්.

ඕනෑම macOS උපාංගයක Keychain හරහා සංවර්ධක සහතිකයක් ජනනය කළ යුතුය. සහතිකයේ වර්ගය ඉතා වැදගත් වේ. යෙදුම් පරිසරය අනුව (Dev, QA, Staging, Production) එය වෙනස් වනු ඇත (සංවර්ධනය හෝ බෙදා හැරීම), යෙදුම් අත්සන් පැතිකඩ වර්ගය ද වේ.

පැතිකඩවල ප්රධාන වර්ග:

  • සංවර්ධනය - සංවර්ධන කණ්ඩායමේ අයදුම්පත අත්සන් කිරීම සඳහා අදහස් කෙරේ, සංවර්ධන සහතිකයක් භාවිතා කරනු ලැබේ (වර්ගයේ නම iPhone සංවර්ධක: XXXX);
  • Ad Hoc - QA දෙපාර්තමේන්තුව විසින් පරීක්ෂණ අයදුම්පතක් අත්සන් කිරීම සහ අභ්‍යන්තර සත්‍යාපනය සඳහා අදහස් කෙරේ, සංවර්ධකයාගේ බෙදා හැරීමේ සහතිකය භාවිතා කරනු ලැබේ (වර්ගයේ නම iPhone බෙදා හැරීම: XXXX);
  • App Store - TestFlight හරහා බාහිර පරීක්‍ෂණ සඳහා ගොඩ නැගීම සහ App Store වෙත උඩුගත කිරීම, සංවර්ධකයාගේ බෙදාහැරීමේ සහතිකය භාවිතා වේ.

සංවර්ධන සහ තාවකාලික පැතිකඩ උත්පාදනය කරන විට, එය ද දක්වනු ලැබේ උපාංග ලැයිස්තුව, ඔබට ගොඩනැගීමක් ස්ථාපනය කළ හැකි, පරිශීලකයින් සඳහා ප්‍රවේශය තවදුරටත් සීමා කිරීමට ඔබට ඉඩ සලසයි. App Store පැතිකඩෙහි උපාංග ලැයිස්තුවක් නොමැත, මන්ද සංවෘත බීටා පරීක්ෂාවේදී ප්‍රවේශ පාලනය TestFlight විසින් හසුරුවනු ලබන අතර, එය පසුව සාකච්ඡා කරනු ඇත.

පැහැදිලිකම සඳහා, ඔබට සංවර්ධකයාගේ පැතිකඩ පහත වගුවක ආකාරයෙන් ඉදිරිපත් කළ හැක. එකලස් කිරීම සඳහා අපට අවශ්‍ය පරාමිති මොනවාද සහ ඒවා ලබා ගන්නේ කොහෙන්ද යන්න තේරුම් ගැනීමට මෙය පහසු කරයි.

iOS යෙදුම් ගොඩනැගීමේ සහ බෙදා හැරීමේ විශේෂාංග

සභාව

ව්‍යාපෘතිය සහ පරිසරය අනුව එකලස් කිරීම් වෙන් කිරීම පහසු කිරීම සඳහා, අපි වැනි පැතිකඩ නම් භාවිතා කරමු ${ProjectName}_${Instance}, එනම්, ව්‍යාපෘතියේ නම + උදාහරණය (යෙදුම් පරිසරය මත රඳා පවතී: Dev, QA, GD, Staging, Live, and so on).

ගොඩනැගීමේ සේවාදායකයට ආයාත කළ විට, පැතිකඩ එහි නම අද්විතීය හැඳුනුම්පතකට වෙනස් කර ෆෝල්ඩරය වෙත ගෙන යනු ලැබේ /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 - Keychain (iPhone Developer: XXXX XXXXXXX, වරහන් තුළ TeamID නොමැතිව) සත්‍යාපනය කළ හැකි සංවර්ධක ගිණුමේ නම.

iOS යෙදුම් ගොඩනැගීමේ සහ බෙදා හැරීමේ විශේෂාංග

PROVISIONING_PROFILE - යෙදුම අත්සන් කිරීම සඳහා පැතිකඩ හැඳුනුම්පත, විධානය සමඟ ලබා ගත හැකිය:

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

යෙදුම අතිරේක පැතිකඩක් භාවිතා කරන්නේ නම් (උදාහරණයක් ලෙස, තල්ලු දැනුම්දීම් සඳහා), ඒ වෙනුවට 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 - app-store සඳහා.

$BundleID - යෙදුම් හැඳුනුම්පත, යෙදුම් සැකසීම් වල දක්වා ඇත. ඔබට විධානය සමඟ පරීක්ෂා කළ හැකිය:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName и $ProfileId - සංවර්ධක නම සහ අත්සන පැතිකඩ හැඳුනුම් සැකසීම් කලින් භාවිතා කරන ලද අතර අපනයන සැකසුම් වල අගයන් සමඟ සැසඳිය යුතුය.

$TeamID — සංවර්ධකයාගේ නමට පසුව වරහන් තුළ ඉලක්කම් දහයේ හැඳුනුම්පත, උදාහරණයක්: iPhone සංවර්ධක: …… (XXXXXXXXXX); Keychain හි පරීක්ෂා කළ හැක.

ඊළඟට, අපනයන විධානය භාවිතා කරමින්, අපි අවශ්ය *.ipa ගොනුව ලබා ගනිමු:

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

නැව් තොරතුරු

දැන් එකතු කරන ලද ගොනුව අවසාන පරිශීලකයාට භාර දිය යුතුය, එනම් උපාංගයේ ස්ථාපනය කර ඇත.

HockeyApp, AppBlade සහ වෙනත් වැනි සංවර්ධන සහ Ad Hoc ගොඩනැගීම් බෙදා හැරීම සඳහා බොහෝ සේවාවන් ඇත, නමුත් මෙම ලිපියෙන් අපි යෙදුම් බෙදා හැරීම සඳහා ස්වාධීන සේවාදායකයක් ගැන කතා කරමු.

IOS සඳහා යෙදුම ස්ථාපනය කිරීම අදියර 2 කින් සිදු වේ:

  1. අයිතම සේවාව හරහා යෙදුම් ස්ථාපන මැනිෆෙස්ටය ලැබීම.
  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

සංවර්ධන සහ පරීක්ෂණ දෙපාර්තමේන්තු වල අවශ්‍යතා සඳහා, ප්ලැරියම් විසින් තමන්ගේම ගොඩනැගීමේ ස්ථාපන යෙදුමක් නිර්මාණය කර ඇති අතර එය අපට ලබා දෙයි:

  • ස්වාධීනත්වය සහ ස්වාධීනත්වය,
  • ප්‍රවේශ පාලනය මධ්‍යගත කිරීම සහ “තාවකාලික” ගතිකව සාදන ලද සබැඳි හරහා යෙදුම් ආරක්ෂිතව ස්ථාපනය කිරීම,
  • පුළුල් කළ හැකි ක්‍රියාකාරිත්වය (එනම්, සංවර්ධන කණ්ඩායමට, අවශ්‍ය නම්, පවතින යෙදුමකට නැතිවූ කාර්යයන් ඒකාබද්ධ කළ හැකිය).

පරීක්ෂා කිරීම

දැන් අපි භාවිතා කරන යෙදුමේ පූර්ව නිකුතුව පරීක්ෂා කිරීම ගැන කතා කරමු ටෙස්ට් ෆ්ලයිට්.

බාගත කිරීම සඳහා අවශ්‍ය කොන්දේසි වන්නේ App Store අත්සන පැතිකඩ වර්ගය සහ ජනනය කරන ලද API යතුරු තිබීමයි.

යෙදුම බාගත කිරීමට ක්රම කිහිපයක් තිබේ:

  • Xcode (සංවිධායක) හරහා
  • ඇල්ටූල් හරහා,
  • Xcode (දැන් Transporter) හි පැරණි අනුවාද සඳහා යෙදුම් කාරකය හරහා

ස්වයංක්‍රීය බාගත කිරීම සඳහා, ඇල්ටූල් භාවිතා කරනු ලැබේ, එයට අවසර ක්‍රම දෙකක් ද ඇත:

  • යෙදුම්-විශේෂිත මුරපදය,
  • 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 විසින් පරීක්ෂා කරනු ලබන අතර පසුව බාහිර පරීක්ෂකයින්ට ලබා ගත හැකි වනු ඇත: ඒවා ස්ථාපනය සඳහා ඊමේල් සබැඳි යවනු ලැබේ.

ඇල්ටූල් හරහා යෙදුමක් බාගත කිරීමේ තවත් ක්‍රමයක් නම් යෙදුම්-විශේෂිත මුරපදය භාවිතා කිරීමයි.

යෙදුම්-විශේෂිත මුරපදය ලබා ගැනීමට ඔබ යා යුතුය ලින්ක් සහ එය ආරක්ෂක අංශයෙන් ජනනය කරන්න.

iOS යෙදුම් ගොඩනැගීමේ සහ බෙදා හැරීමේ විශේෂාංග

ඊළඟට, ඔබ මෙම මුරපදය සමඟ Keychain හි ගොඩනැගීමේ සේවාදායක වාර්තාවක් සෑදිය යුතුය. 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 හි විවිධ අනුවාදවල යම් යම් ගැටළු ඇති බැවින් (“පෙනෙන්නේ නැත” Keychain, උඩුගත කිරීමේදී අවසර දෝෂ ආදිය) ඇල්ටූල් අවසරය සඳහා API යතුර තෝරා ගැනීම වඩා හොඳය.

ඇත්ත වශයෙන්ම, එපමණයි. App Store හි සාර්ථක ගොඩ නැගීම් සහ කරදරයකින් තොර නිකුතු සම්බන්ධ සියලු දෙනාටම මම ප්‍රාර්ථනා කරමි.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න