á€áá±á¬ááºážáá«ážááœááºá Plarium Krasnodar á áá°áá®ááá¯á០CI/CD á¡ááŸá¬ážááŸá¬ááŒááºááŒááºážáá¯ááºáááºážá ááºááœáẠá á¯áá±á¬ááºážáá¬ážáá±á¬ á¡áá¯á¶ážááŒá¯áá°áá»á¬ážáᶠiOS á¡ááºááºáá»á¬ážááᯠá á¯á ááºážááŒááºážááŸáá·áº áá±ážááá¯á·ááŒááºážá¡ááœá±á·á¡ááŒá¯á¶ááᯠáá»áŸáá±áá«áááºá
áá±á·áá»ááºá·áá±áž
Apple á ááºáá á¹á ááºážáá»á¬ážá¡ááœáẠá¡ááá®áá±ážááŸááºážáá»á¬áž ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážááœáẠáá áºáááºážááá¯ááºáá áºáááºážááŒáá·áº áá«áááºáá°ááá¯ááºážááẠá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶á á¡ááŒááºážááœá¬ážááœááºá¡áááºááŒá±ááŸá¯ááᯠáááºááá¯ážáá¬ážááŒá®ážáá¬ážááŒá áºáááºá á¡áááºá¡áá²áá»á¬ážááᯠáá±áá¬ááá¯ááºážááœáẠááœá±á·ááááº- developer áááá¯ááá¯ááºáá®áá°ážá០á¡ááŸá¬ážááŸá¬ááŒááºááŒááºážááŸáá·áº áááºáá±á¬ááºáá±ážáááááá¬áá»á¬ážá¡ááá
á¡ááºáá¬áááºáá±á«áºááœáẠ"á¡ááŒá±áá¶" ááŸáá·áºáááºáááºáá±á¬áá±á¬ááºážáá«ážáá»á¬ážá áœá¬ááŸááááºá ááá¯á·ááŒá±á¬áá·áºáá»áœááºá¯ááºááá¯á·áááºá¡áááá¡áá¬ááá¯áá®ážáá±á¬ááºážááá¯ážááŒáááºááŒáá¯ážá á¬ážáá«áááºá á€áááºááŸá¬ ááá·áºáá»áŸá±á¬ááºááœáŸá¬ááᯠá¡á±á¬ááºááŒááºá áœá¬ áááºáá±á¬ááºááẠááá¯á¡ááºááẠá
developer á¡áá±á¬áá·áº ;- áááºáá±á¬ááºááŸá¯áá¬áá¬á¡ááŒá Ạáá¯ááºáá±á¬ááºáá±ááá·áº macOS á¡ááŒá±áá¶á ááºáá á¹á ááºážá
- áá¯ááºáá±ážáááºá
developer áááºááŸáẠáá»áŸá±á¬ááºááœáŸá¬ááᯠáááºááŸááºááá¯ážááẠáá±á¬ááºáááºá¡áá¯á¶ážááŒá¯ááá·áºá - áá°ážááŒá¬ážáááºážáá
áºáá±á¬ application ááá¯áááºáá®ážáá²á·áááºá
ID (Wildcard ID ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááẠá¡ááá®áá±ážááŸááºážááá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá áœá¬ááá¯á¡áá¯á¶ážááŒá¯áááºáááŒá áºááá¯ááºáá±á¬ááŒá±á¬áá·áºá Bundle Identifier áá¡áá±ážááŒá®ážáá¯á¶ááᯠááŸááºáá¬ážáá¬ážááá·áºáááºá áááá¯ááá¯ááºážááᯠáá»áŸá±á¬ááºááœáŸá¬áááºááŸááºáá»á¬ážá
áááºááá·áº macOS á ááºáá á¹á ááºážááœááºáááᯠKeychain ááŸáá áºááá·áº developer áááºááŸááºááᯠáá¯ááºáá±ážááá«áááºá áááºááŸááºá¡áá»áá¯ážá¡á á¬ážááẠá¡ááœááºá¡áá±ážááŒá®ážáá«áááºá á¡ááá®áá±ážááŸááºážáááºáááºážáá»áẠ(Devá QAá Stagingá Production) áá±á«áºáá°áááºá áááºážááẠá¡ááºááá®áá±ážááŸááºážá áááºááŸááºáááá¯ááá¯ááºá¡áá»áá¯ážá¡á á¬ážáá²á·ááá¯á· (ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ ááá¯á·ááá¯áẠááŒáá·áºáá±ááŸá¯) ááœá²ááŒá¬ážáááºááŒá áºáááºá
á¡ááá áááá¯ááá¯ááºá¡áá»áá¯ážá¡á á¬ážáá»á¬áž
- ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±áž - ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážá¡ááœá²á·á áá»áŸá±á¬ááºááœáŸá¬ááᯠáááºááŸááºáá±ážááá¯ážáááºá¡ááœáẠáááºááœááºáá¬ážááá·áº ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áááºááŸááºááᯠá¡áá¯á¶ážááŒá¯ááẠ(á¡áá»áá¯ážá¡á á¬ážá¡ááẠiPhone Developer: XXXXX);
- Ad Hoc - QA áá¬áá០á ááºážáááºáá»áŸá±á¬ááºááœáŸá¬ááᯠáááºááŸááºáá±ážááá¯ážááŒááºážááŸáá·áº á¡ááœááºážááá¯ááºážá¡áááºááŒá¯ááŒááºážá¡ááœáẠáááºááœááºááŒá®áž áá±á¬á·ááºáá²áá±ážáá¬ážáá°á ááŒáá·áºáá±ááŒááºážáááºááŸááºááᯠá¡áá¯á¶ážááŒá¯ááẠ(á¡áá»áá¯ážá¡á á¬ážá¡ááẠiPhone ááŒáá·áºáá±ááŒááºáž- XXXXX);
- App Store - TestFlight ááŸáá áºááá·áº ááŒááºáá ááºážáááºááŒááºážá¡ááœáẠáááºáá±á¬ááºááŒá®áž App Store ááá¯á· á¡ááºáá¯ááºáááºááŒááºážá áá±á¬á·ááºáá²áá±ážáá¬ážáá°á ááŒáá·áºáá±ááŒááºážáááºááŸááºááᯠá¡áá¯á¶ážááŒá¯áááºá
Development ááŸáá·áº Ad Hoc áááá¯ááá¯ááºáá»á¬ážááᯠáááºáá®ážááá·áºá¡áá«ááœááºáááºáž ááœáŸááºááŒáá¬ážáááºá
ááŸááºážáááºážáááºá¡ááœááºá áááºááẠáá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬á áááá¯ááá¯ááºááᯠá¡á±á¬ááºáá«ááá¬ážáá¯á¶á á¶ááŒáá·áº áááºááŒááá¯ááºáááºá áááºážááẠáááºáááºááŸá¯á¡ááœáẠáá»áœááºá¯ááºááá¯á·ááá¯á¡ááºáá±á¬ ááá·áºáááºáá»ááºáá»á¬ážááŸáá·áº áááºážááá¯á·ááᯠáááºááá·áºáá±áá¬ááœáẠááá°ááááºááᯠáá¬ážáááºááẠááá¯ááá¯ááœááºáá°á á±áááºá
á¡á ááºážá¡áá±áž
ááá±á¬áá»ááºááŸáá·áº áááºáááºážáá»ááºá¡ááá¯áẠá¡á
á¯á¡áá±ážáá»á¬ážááᯠááœá²ááŒá¬ážáááœááºáá°á
á±áááºá áá»áœááºá¯ááºááá¯á·ááẠáá²á·ááá¯á·áá±á¬ áááá¯ááá¯ááºá¡áááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá ${ProjectName}_${Instance}
ááá¯ááá¯áááºááŸá¬ ááá±á¬áá»ááºá¡ááẠ+ á¥ááᬠ(á¡ááá®áá±ážááŸááºážáááºáááºážáá»ááºá¡áá±á«áº áá°áááºáááº- Devá QAá GDá Stagingá Live á
áááºááŒáá·áº)á
áááºáá±á¬ááºááŸá¯áá¬áá¬ááá¯á· áááºááœááºážááá·áºá¡áá«á áááá¯ááá¯ááºááẠáááºážáá¡áááºááᯠáá®ážááá·áº ID áá
áºáá¯á¡ááŒá
ẠááŒá±á¬ááºážáá²áᬠááá¯ááºááœá²ááá¯á· ááœáŸá±á·áááºá /Users/$Username/Library/MobileDevice/Provisioning Profiles
(áááºááŸá¬áá² $Username
build server á user account name ááŸáá·áº áááºááá¯ááºáááº)á
*.ipa ááá¯ááºááᯠáááºáá±á¬ááºááẠáááºážáááºážááŸá
áºáᯠááŸáááẠ- á¡ááœá±á¡ááŸá
Ạ(PackageApplication) ááŸáá·áº áá±ááºáá® (XcAchive áááºáá®ážááŸá¯ááŸáá·áº áá¯ááºáá°ááŸá¯ááŸáá
áºááá·áº)á áá¬ážááŸááºáž 8.3 ááŸá
áááºá á¡ááºááºááá¯ááºáá¯ááºááá¯ážááŸá¯á¡ááá¯ááºážááᯠXcode ááŒáá·áºááŒá°ážááŸá¯á០áááºááŸá¬ážááá¯ááºáá±á¬ááŒá±á¬áá·áº ááááááºážáááºážááᯠá¡áá¯á¶ážáááŒá¯áá±á¬á·áᯠáá°ááá«áááºá áááºážááá¯á¡áá¯á¶ážááŒá¯áááºá áááºááẠXcode á¡áá±á¬ááºáž (áá¬ážááŸááºáž 8.2 ááŸáá·áº á¡áááº) á០module ááᯠááá¯áá«ááá¯á· áá°ážáá°ááẠááá¯á¡ááºáááº-
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
ááá¯á·áá±á¬áẠcommand ááᯠrun áá«á
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 ááœááºážá
ááœááºáá»á¬ážááá«áá²) ááœááºá¡áááºááŒá¯ááá¯ááºááá·áº developer á¡áá±á¬áá·áºá¡áááºá
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 ááœáẠáá¯ááºááá¯ážááá«áááºá áááºážááá¯áá¯ááºáá±á¬ááºáááºá áááºáááºááá¯áá²á·ááá¯á·áá±á¬ command ááá¯áá¯á¶ážááá¯ááºáááºá
/usr/bin/xcrun --sdk iphoneos PackageApplication
-v $(find "$ProjectDir/build/Build/Products/Release-iphoneos" -name "*.app")
-o "$ProjectDir/$ProjectName_$Instance.ipa"
ááá¯á·áá±á¬áºáááºáž á€áááºážáááºážááẠApple áá¡ááŒááºááœáẠá¡áá¯á¶ážáááŒá¯áá±á¬á·áᯠáá°ááá«áááºá á¡ááá®áá±ážááŸááºážááŸááºáááºážá០áá¯ááºáá°ááŒááºážááŒáá·áº *.ipa ááᯠááá°ááẠáááºááá¯ááºáá«áááºá
ááááŠážá áœá¬ááẠcommand ááŒáá·áº archive ááá¯á á¯áá±á¬ááºážáááºááá¯á¡ááºáááº-
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
- á¡ááá®áá±ážááŸááºážáááºáááºáá»á¬ážááœáẠáááºááŸááºáá¬ážááá·áº áá»áŸá±á¬ááºááœáŸá¬ IDá á¡áááá·áºááŒáá·áº á
á
áºáá±ážááá¯ááºáááº-
defaults read $ProjectDir/Info CFBundleIdentifier
$DevAccName О $ProfileId
â ááááºá á¡áá¯á¶ážááŒá¯áá²á·ááá·áº áá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬á¡áááºááŸáá·áº áááºááŸááºáááá¯ááá¯áẠID áááºáááºáá»á¬ážááŸáá·áº áá¯ááºáá°ááŸá¯áááºáááºáá»á¬ážááœáẠáááºááá¯ážáá»á¬ážááŸáá·áº ááá¯ááºáá®ááááºá
$TeamID
â áá±á¬á·ááºáá²áá±ážáá¬ážáá°áá¡áááºááŒá®ážáá±á¬áẠááœááºážá
ááœááºáá»á¬ážááœáẠááááºážáááºáá¯á¶áž IDá á¥ááá¬- iPhone Developer- âŠâŠ (XXXXXXXXXX); Keychain ááœáẠá
á
áºáá±ážááá¯ááºáá«áááºá
ááá¯á·áá±á¬ááºá ááá¯á·áá¯ááºá¡áááá·áºááᯠá¡áá¯á¶ážááŒá¯á ááá¯á¡ááºáá±á¬ *.ipa ááá¯ááºááᯠáá»áœááºá¯ááºááá¯á· áááŸááááº-
xcodebuild
-exportArchive
-archivePath $ProjectDir/build/$ProjectName.xcarchive
-exportPath $ProjectDir
-exportOptionsPlist $ExportSettings
ááá¯á·ááŒááºáž
ááᯠá á¯áá±á¬ááºážáá¬ážáá±á¬ ááá¯ááºááᯠá ááºáá á¹á ááºážáá±á«áºááœáẠááá·áºááœááºážáá¬ážááá·áº áá¯á¶ážá áœá²áá°áᶠáá±ážááá¯á·ááẠááá¯á¡ááºáá«áááºá
HockeyAppá AppBlade ááŸáá·áº á¡ááŒá¬ážá¡áá¬áá»á¬ážáá²á·ááá¯á· Development ááŸáá·áº Ad Hoc áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠááŒáá·áºáá±ááẠáááºáá±á¬ááºááŸá¯áá»á¬ážá áœá¬ ááŸááááºá ááá¯á·áá±á¬áº á€áá±á¬ááºážáá«ážááœáẠá¡ááá®áá±ážááŸááºážáá»á¬ážááᯠááŒáá·áºáá±áááºá¡ááœáẠáá®ážááŒá¬ážáá¬áá¬áá áºáá¯á¡ááŒá±á¬ááºáž ááœá±ážááœá±ážáá«áááºá
iOS á¡ááœáẠá¡ááá®áá±ážááŸááºážááᯠááá·áºááœááºážááŒááºážááẠá¡ááá·áº 2 ááá·áºááŒáá·áº áá¯ááºáá±á¬ááºáááº-
- Items Service ááŸáááá·áº á¡ááá®áá±ážááŸááºážááá·áºááœááºážááŒááºážááᯠáááºááŸá¬ážá áœá¬áááºáá¶ááŒááºážá
- HTTPS ááŸáá áºááá·áº áááºáá®ážáááºá áºááœáẠáááºááŸááºáá¬ážááá·áº á¡áá»ááºá¡áááºá¡ááá¯ááºáž *.ipa ááá¯ááºááᯠááá·áºááœááºážááŒááºážá
ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠááááá¯á¶áž command ááŒáá·áº installation manifest (file type *.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
) command ááŒáá·áºá
á
áºáá±ážááá¯ááºáááºá
defaults read $ProjectDir/Info CFBundleVersion
parameter ááẠ$ipaUrl
*.ipa ááá¯ááºááá¯áá±á«ááºážáá¯ááºáá¯ááºááẠááá¯ááºááá¯ááºááá·áºááºáá
áºáá¯áá«ááŸááááºá iOS á ááá¹ááááŒá±á¬ááºáá¬ážááŸááºážá០á¡ááºááºáá®áá±ážááŸááºážááᯠHTTPS ááŸáá
áºááá·áº ááá·áºááœááºážááááºááŒá
áºáááºá á¡áá¹ááááŒá±á¬ááºáá¬ážááŸááºážááœááºá áááºáá®ážáááºá
áºááá±á¬áºáááºááẠá¡áááºážáááºááŒá±á¬ááºážáá²ááœá¬ážáááº- áá²á·ááá¯á·áá±á¬ á¡ááá®áá±ážááŸááºážá¡áá¯ááºááœááºáá»á¬ážá¡ááœáẠáááºáááºáá»á¬ážáá«ááŸááá±á¬ ááááºááá¯á·ááŒááºážáá»á¬áž
<images>
<image>...</image>
</images>
ááá¯á·ááŒá±á¬áá·áº á¡ááá®áá±ážááŸááºážááᯠááá·áºááœááºážáááºá á€áá²á·ááá¯á·áá±á¬ ááá·áºááºáá áºáá¯áá«áá±á¬ ááá¯ážááŸááºážáá±á¬ HTML á á¬áá»ááºááŸá¬ááẠáá¯á¶áá±á¬ááºáááº-
itms-services://?action=download-manifest&url=https://$ServerUrl/$ProjectName/$Instance/iOS/$AppVersion/manifest.plist
ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááŸáá·áº á ááºážáááºááŸá¯áá¬ááá»á¬ážá ááá¯á¡ááºáá»ááºáá»á¬ážá¡ááœáẠPlarium ááẠáá»áœááºá¯ááºááá¯á·ááᯠáá±ážáá±á¬ááºááá·áº áááºážáááá¯ááºááá¯ááºáááºáá±á¬ááºáááºáááºááŸá¯á¡ááºááºááᯠáááºáá®ážáá¬ážááŒá®ážá
- ááá¯ááºááá¯ááºá¡á¯ááºáá»á¯ááºááœáá·áºááŸáá·áº ááœááºáááºáá±ážá
- áááºáá±á¬ááºááááºážáá»á¯ááºááŸá¯áááá¯áá»á¯ááºááá¯ááºááŸá¯ ááŸáá·áº "áá¬áá®" ááá¯ááºážááá áºáááºáá®ážáá¬ážáá±á¬ááá·áºááºáá»á¬ážááŸáááá·áº á¡ááºááºáá®áá±ážááŸááºážáá»á¬áž áá¯á¶ááŒá¯á¶á áœá¬áááºáááºááŒááºážá
- ááá¯ážáá»á²á·ááá¯ááºáá±á¬ áá¯ááºáá±á¬ááºááá¯ááºá áœááºáž (ááá¯ááá¯áááºááŸá¬ ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážá¡ááœá²á·ááẠááá¯á¡ááºáá«áá áá»á±á¬ááºáá¯á¶ážáá±áá±á¬áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááŸáááŒá®ážáá¬ážá¡ááºááºáá áºáá¯ááá¯á· áá±á«ááºážá ááºááá¯ááºáááº)á
á ááºážáááºááŒááºáž
ááá¯áá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá±áá±á¬ application ááá¯á¡ááŒáá¯á
ááºážáááºááŒááºážá¡ááŒá±á¬ááºážááŒá±á¬áá«áááºá
áá±á«ááºážáá¯ááºáá¯ááºááẠááá¯á¡ááºáá±á¬ á¡ááŒá±á¡áá±áá»á¬ážááŸá¬ App Store á áááºááŸááºáááá¯ááá¯áẠá¡áá»áá¯ážá¡á á¬ážááŸáá·áº áá¯ááºáá¯ááºáá¬ážáá±á¬ API áá±á¬á·áá»á¬áž ááŸááá±ááŒááºáž ááŒá áºáááºá
áá»áŸá±á¬ááºááœáŸá¬ááá¯áá±á«ááºážáá¯ááºáá¯ááºáááºáááºážáááºážáá»á¬ážá áœá¬ááŸááááºá
- Xcode (Organizer) ááŸáááá·áºá
- altool ááŸáááá·áºá
- Xcode (ááᯠTransporter) á áá¬ážááŸááºážá¡áá±á¬ááºážáá»á¬ážá¡ááœáẠApplication Loader ááŸáááá·áºá
á¡ááá¯á¡áá»á±á¬ááºáá±á«ááºážáá¯ááºáá¯ááºáááºá¡ááœááºá ááœáá·áºááŒá¯áá»ááºáááºážáááºážááŸá áºáá¯áá«ááŸáááá·áº altool ááá¯á¡áá¯á¶ážááŒá¯áááº-
- App-Specific Passwordá
- API áá±á¬á·á
API Key ááᯠá¡áá¯á¶ážááŒá¯á á¡ááá®áá±ážááŸááºážááᯠáá±á«ááºážáá¯ááºáá¯ááºááẠááá¯áá±á¬ááºážáááºá
API Key ááá¯ááá°áááºá ááá¯á·ááœá¬ážáá«á
ááá¯á·áá±á¬ááºá áá±á«ááºážáá¯ááºáá¯ááºáá¬ážáá±á¬áá®ážááᯠáááºáá±á¬ááºáá¬áá¬ááá¯á· áááºááœááºážáá«-
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 áá±á¬á·áá»áá¯ážáááºá
á¬áá»ááºááŸá¬á០áááºáááºáááºááá¯ážáá»á¬ážááŸááááºá
ááá¯á·áá±á¬ááºá á¡á±á¬ááºááŒááºá
áœá¬á¡áááºááŒá¯ááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááá®áá±ážááŸááºážááᯠcommand ááŒáá·áºáááºáá«áááºá --upload-app
áá°áá®áá±á¬áá±á¬ááºáá»á¬ážááŸáá·áºá¡áá°á
á¡ááá®áá±ážááŸááºážááᯠáá áºááẠááá¯á·ááá¯áẠááŸá áºáááºá¡ááœááºáž Apple á០á ááºážáááºáááºááŒá áºááŒá®áž ááá¯á·áá±á¬áẠááŒááºáá ááºážáááºáá°áá»á¬ážáᶠáááŸáááá¯ááºáááá·áºáááº- áááºážááá¯á·ááᯠááá·áºááœááºážáááºá¡ááœáẠá¡á®ážáá±ážááºááá¯á·ááá·áºááá·áºááºáá»á¬áž ááŸááá¬áááºááŒá áºáááºá
altool ááŸáááá·áº á¡ááºááá®áá±ážááŸááºážááᯠáá±á«ááºážáá¯ááºáá¯ááºááẠáá±á¬ááºáá áºáááºážááŸá¬ App-Specific Password ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒá áºáááºá
App-Specific Password ááá¯áááẠáááºááœá¬ážáááºááá¯á¡ááºáááºá
ááá¯á·áá±á¬ááºá áááºááẠá€á
áá¬ážááŸááºááŒáá·áº Keychain ááœáẠáááºáá±á¬ááºáá¬ážáá±á¬ áá¬áá¬ááŸááºáááºážáá
áºáá¯ááᯠáááºáá®ážááá·áºáááºá Xcode áá¬ážááŸááºáž 11 á០áááºážááᯠcommand ááŒáá·áº áá¯ááºáá±á¬ááºááá¯ááºáááº-
xcrun altool --store-password-in-keychain-item "Altool" -u "$DeveloperName" -p $AppPswd
áááºááŸá¬:
$DeveloperName
â Apple áááºáá±á¬ááºááŸá¯áá»á¬ážááá¯á· á¡áá±á¬áá·áºáááºááẠá¡áá¯á¶ážááŒá¯ááá·áº iOS developer á¡áá±á¬áá·áºá á¡áááºá
$AppPswd
â áá¯ááºáá±ážááá·áº App-Specific Password
ááá¯á·áá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠasc-provider parameter ááááºááá¯ážááá¯ááá°ááŒá®áž command ááŒáá·áº á áá¬ážááŸááºáááºááœááºážááŒááºážáá¡á±á¬ááºááŒááºááŸá¯ááᯠá á áºáá±ážáá«-
xcrun altool --list-providers -u "$DeveloperName" -p "@keychain:Altool"
áá»áœááºá¯ááºááá¯á·ááẠoutput ááá¯áááŸááááº-
Provider listing:
- Long Name - - Short Name -
XXXXXXX XXXXXXXXX
áááºááœá±á·ááŒááºáááá·áºá¡ááá¯ááºážá ááá¯á¡ááºáá±á¬ Short Name áááºááá¯áž (asc-provider) ááẠá¡ááá®áá±ážááŸááºážáááºáá±á¬ááºáá¬ááœáẠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá²á·ááá·áº $TeamID áá±á¬ááºááŸáá·áº ááá¯ááºááá¯ááºáá«áááºá
á¡ááá®áá±ážááŸááºážááᯠTestFlight ááœááºá¡áááºááŒá¯ááŒá®ážáááºáááºá á¡áááá·áºááá¯áá¯á¶ážáá«-
xcrun altool
--(validate|upload)-app
-f $(find "$ProjectDir" -name "*.ipa")
-u "$DeveloperName"
-p "@keychain:Altool"
ááá·áºáááºáááºááá¯ážá¡ááŒá
Ạ-p
áááºáááºááá¯ážááá¯áá°ááá¯ááºáááºá $AppPswd
áá¯ááºááá¬ážáá±á¬ (ááŸááºážáááºážáá±á¬) áá¯á¶á
á¶ááŒáá·áºá
ááá¯á·áá¬ááœááºá áá±á¬áºááŒáá¬ážááŒá®ážááŒá áºááá·áºá¡ááá¯ááºážá á áœááºážáá±á¬ááºáááºáááŸá¯áá±á¬áá·áºááŸáá±á Xcode á ááá°áá®áá±á¬áá¬ážááŸááºážáá»á¬ážááœáẠá¡áá»áá¯á·áá±á¬ááŒá¿áá¬áá»á¬ážááŸááá±á¬ááŒá±á¬áá·áº (âKeychain áááŒááºáâá á¡ááºáá¯ááºáá¯ááºáá±á áẠááœáá·áºááŒá¯áá»ááºá¡ááŸá¬ážá¡ááœááºážáá»á¬áž á áááºááŒáá·áº) ááá¯ááœá±ážáá»ááºááŒááºážááẠááá¯ááá¯áá±á¬ááºážááœááºáá«áááºá
áá«áá«áá²á ááááºáá±á¬á·á App Store ááœáẠá¡á±á¬ááºááŒááºáá±á¬ áááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº ááŒá¿áá¬áááºážá
ááºáá±á¬ ááŒáá·áºáá»áááŸá¯áá»á¬ážááœáẠáá«áááºáá°ááá¯ááºáž áá«áááºá
á±ááá¯áá«áááºá
source: www.habr.com