fastlane ááŒáá·áº GitLab ááẠiOS á¡ááá®áá±ážááŸááºážáá»á¬ážááᯠApp Store ááá¯á· á á¯áá±á¬ááºážá ááá¯ááºážáá¯ááºááŸáá·áº ááœáŸáá·áºáááºáááºážá
áááŒá¬áá±ážáá®á ááŸááá²á· áááºá
áá®ááŸá¬ áá°áááºá
Apple Store configuration ááŸáá·áºáááºáááºáá±á¬ á áá¬ážá¡áááºážáááº
á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá»áááºáááºááẠApp Store á¡ááºááºá ááŒáá·áºááŒá°ážáá±ážáááºááŸááºáá»á¬ážááŸáá·áº á á®áá¶áá±á¬ááºááœááºáá±ážááá·áº áááá¯ááá¯ááºáá áºáᯠááá¯á¡ááºáá«áááºá
á€áá±áá¬ááœáẠá¡áááºáá²áá¯á¶ážá¡áá¬ááŸá¬ App Store ááœáẠáááºááŸááºáá±ážááá¯ážááá¯ááºááœáá·áºááᯠá áá áºááá·áºááœááºážááŒááºážááŒá áºáááºá áá«ááᯠáááºááá¯ááºááá¯áẠá¡ááŒá±ááŸá¬ááá¯ááºáááºááá¯á· áá»áŸá±á¬áºááá·áºáá«áááºá áááºá¡áá áºááŒá áºáá«á ááá·áºá¡á¬áž áááºážááŒá±á¬ááºážááŸááºááá¯á· ááœáŸááºááŒáááºááŒá áºáá±á¬áºáááºáž á€áá±áá¬ááœáẠApple áááºááŸááºáá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááŒááºážá ááŸá¯ááºááœá±ážááŸá¯áá»á¬ážá¡ááŒá±á¬ááºáž áááŒá±á¬áá² áááºážááá¯á·ááẠá¡áááºáááŒááºááŒá±á¬ááºážáá²áá±áá«áááºá á€ááá¯á·á áºááẠááá·áºá¡á¬áž á áááºááẠáá°áá®áá±ážáá«áááºá
áá»áœááºá¯ááºáá¡ááºááºáá»á¬áž
áááºááẠá¡ááºááºá
ááá¯ážáá»áááºáááºááŸá¯ááœáẠá¡ááºááºáá
áºáᯠááá¯á¡ááºáá±á¬ááŒá±á¬áá·áº ááá·áºááœáẠááœá²á·á
ááºážááŸá¯áá¯á¶á
á¶á¡ááœáẠID áá
áºáá¯ááŸááááºá .xcodebuild
. áááá¯ááá¯ááºááŸáá·áº á¡ááá®áá±ážááŸááºáž ID ááẠáá¯ááºáááºáá±á¬ááºááŸá¯áá»á¬ážá á
á»á±ážááŸá¯ááºážááŸáá·áº áááŸáááá¯ááºááŸá¯ááŸáá·áº á
ááºážáááºá¡áá¯á¶ážáá»áááá¯ááááºáá»á¬ážááᯠáá¯á¶ážá
áœá²áá°áá»á¬ážáᶠááŒáá·áºáá±áááºá¡ááœáẠTestFlight ááœá²á·á
ááºážááŸá¯áá¯á¶á
á¶ááᯠáá±á«ááºážá
ááºáá¬ážáááºá á¡áá»á¬ážáá°ááŸá¬ á
ááºážáááºááŒááºážááᯠááá¯ááºáá«ááŸáá·áºá ááá·áºááœáẠá¡ááœá²á·áááºáá
áºáá¯ááŸáááŒá®ážá áááºáááºáááœááºáá°ááŒá®áž Apple áá¶á០áá±á¬ááºáááºááœáá·áºááŒá¯áá»ááºáááá¯á¡ááºáá«á áá®ážááá·áºá
ááºážáááºááŸá¯ áá¯á¶áá±á¬ááºáááºááŒá
áºáááºá
á áááºááŒááºáž áááá¯ááá¯ááº
á¡ááºááºá áá áºááá·áºááœááºážááŸá¯á¡ááŒááºá Apple Developer console á áááºááŸááºáá»á¬ážá ááœá²ááŒá¬ážáááºááŸááºááŸá¯áá»á¬ážááŸáá·áº áááá¯ááá¯ááºáá»á¬ážááá¹áááœáẠáááºáá®ážáá¬ážáá±á¬ iOS ááŒáá·áºááŒá°ážáá±ážááŸáá·áº ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážáá®ážáá»á¬áž ááá¯á¡ááºáá«áááºá á€áááºááŸááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠá á®áá¶áá±á¬ááºááœááºáá±ážááá·áº áááá¯ááá¯ááºáá áºáá¯á¡ááŒá Ạáá±á«ááºážá ááºááá¯ááºáááºá
á
á
áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážááŒááá·áºá¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠá¡ááá¡ááŸááºááŒá¯áááºááŸááºáá»á¬ážááᯠáááºáá®ážááá¯ááºááááºá ááá¯ááºáá«á á¡ááá·áºáá»á¬ážá¡ááá¯ááºážááŒá¯áá¯ááºááẠááá¯á¡ááºáá«áááºá
á¡ááŒá¬ážááœá±ážáá»ááºááŸá¯
á€ááá¯ážááŸááºážáá±á¬áááºážáááºážá¡ááŒááºá áááºááŸááºáá»á¬ážááŸáá·áº áááá¯ááá¯ááºáá»á¬ážááᯠconfigure áá¯ááºááẠá¡ááŒá¬ážáááºážáááºážáá»á¬ážááŸááá«áááºá áá«ááŒá±á¬áá·áº á¡áá¯áẠááá°ááẠááá¯ááºáá»á±á¬áá®ááœá±ááŒá
áºá¡á±á¬áẠáá¯ááºááááºá á¡áá±ážááŒá®ážáá¯á¶ážá ááẠconfiguration ááá¯á¡ááºáááºá .xcodebuild
ááá¯á¡ááºáá±á¬ááá¯ááºáá»á¬ážááá¯ááœáŸááºááŒáá±ážáááºááŒá
áºááŒá®ážá á¡ááŒá±ážááá¬ážá¡áááºááŒáá·áºá¡áá¯á¶ážááŒá¯áá°á¡ááœáẠáá±á¬á·áá»áááºááᯠáááºáá±á¬ááºááœááºááŒá°áá¬ááœáẠáááá¯ááºááá«áááºá áá
áºáá»á
áºáááºáááºááŸááºá¡ááœáẠáá»áœááºá¯ááºááá¯á·ááẠfastlane ááá¯á¡áá¯á¶ážááŒá¯ááŒá®áž ááŒá¿áá¬áá»á¬ážááŸááá«á ááá¯á·ááá¯áẠáááºááá¯ááá¯ááááŸáááá¯áá«á áááºážááá¯á·áá¡áá±ážá
áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠááŒáá·áºááŸá¯áá«á
á€á¥ááá¬ááœáẠáá»áœááºá¯ááºááẠáá»ááºážáááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
GitLab ááŸáá·áº fastlane ááŒááºáááºááŒááºážá
CI Runner ááŒááºáááºááŒááºážá
á€áá±áá¬á¡á¬ážáá¯á¶ážááᯠá
á¯áá±á¬ááºážááŒá®ážáá±á¬ááºá MacOS á
ááºáá
á¹á
ááºážáá±á«áºááŸá GitLab á¡ááŒá±ážááá¬ážáááœá²á·á
ááºážáá¯á¶ááá¯á· áááºááœá¬ážáá«áááºá áá¶ááá±á¬ááºážá
áœá¬ááŒáá·áºá áááºááẠMacOS ááœáẠiOS á¡ááºááºáá»á¬ážááá¯áᬠááŒá¯áá¯ááºááá¯ááºáááºá ááá¯á·áá±á¬áº á¡áá¬á¡á¬ážáá¯á¶áž ááŒá±á¬ááºážáá²ááá¯ááºááŒá®áž á€áááºáááºááœáẠááá¯ážáááºááŸá¯ááᯠáááºáá»áŸá±á¬áºááá·áºáá«áá ááá¯áá²á·ááá¯á·áá±á¬ ááá±á¬áá»ááºáá»á¬ážááᯠá
á±á¬áá·áºááŒáá·áºáá«á
á¡ááŒá±ážááá¬ážááᯠáááºááŸááºááŒááºážááẠá¡ááœááºááá¯ážááŸááºážáá«áááºá áááºááŸáááá¯ááá¯ááºáá¬áá«á
ááŸááºáá»ááºá á¡ááŒá±ážááá¬ážááẠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáá±á¬ áááá¯ááááºááᯠá¡áá¯á¶ážááŒá¯ááááºááŒá
áºáááºá shell
. ááœááºááááºáá¬áá»á¬ážááŸáááá·áºááá¯ááºáá² áá¯á¶ážá
áœá²áá°áá
áºáŠážá¡áá±ááŒáá·áº ááá¯ááºááá¯ááºá¡áá¯ááºáá¯ááºááẠmacOS ááœáẠiOS ááᯠáááºáá±á¬ááºááẠáááºážá ááá¯á¡ááºáááºá áá¯á¶ážáá±ááẠshell
á áááºáá±á¬ááºááŒááºážááŸáá·áº á
ááºážáááºááŒááºážááᯠá¡ááŒá±ážááá¬ážá¡áá¯á¶ážááŒá¯áá°á¡ááŒá
áºá áááºáá±á¬ááºááŸá¯áááºáá¶áá°áá±á«áº ááá¯ááºááá¯ááºáá¯ááºáá±á¬ááºáááºá ááœááºááááºáá¬áá»á¬ážáá²á·ááá¯á· ááá¯á¶ááŒá¯á¶áá±á¬ááŒá±á¬áá·áº ááŸá¬ááœá±ááŒáá·áºáá»áŸáẠááá¯áá±á¬ááºážáá«áááºá
sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
cd ~
gitlab-runner install
gitlab-runner start
Apple Keychain ááᯠXcode áááºáá±á¬ááºááẠááá¯á¡ááºáá±á¬áá±á¬á·áá»á¬ážáᶠáááºáá±á¬ááºááœáá·áºááŒáá·áº á€á¡áááºááŸááºááœáẠá á®á ááºáááºááŸááºááá«áááºá áááºážááᯠá ááºážáááºááẠá¡ááœááºáá°áá¯á¶ážáááºážáááºážááŸá¬ áááºáá±á¬ááºááŸá¯ááᯠáá¯ááºáá±á¬ááºááŒá®áž áááºážááᯠááá¯ááºááá¯ááºáááºáá±á¬ááºááẠááŒáá¯ážá á¬ážááá·áºá¡áá¯á¶ážááŒá¯áá°á¡ááŒá Ạáá±á¬á·ááºá¡ááºáááºáááºááŒá áºáááºá á áá áºá áá±á¬á·áá»áááºá¡áá¯á¶ážááŒá¯ááœáá·áºááᯠáá±á¬ááºážááá¯áá«áá á¡ááŒá²áááºáž CI á¡áá¯ááºáá¯ááºááẠá¡ááŒá²áááºážááœáá·áºááŒá¯ááẠááá¯ááœá±ážáá»ááºáá«á áá±á¬á·áá»áááºááᯠáááºááá±á¬ááºážáá±á¬á·ááŒá±á¬ááºáž áá±áá»á¬á á±ááẠáááá¡ááŒááẠááá¯ááºááá¯ááºážááŸá áºáá¯ááᯠáááºááŒáá·áºááŒá®áž ááŒáá·áºááá»áá¯ážáááºáá±áááºá ááŒá¿áá¬ááŸá¬ Apple ááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠAuto mode ááᯠááœááºáá°á áœá¬ á¡áá¯á¶ážááŒá¯ááẠááá¯ááºáá±á¬ááºááá¯ááºáá±á¬áºáááºáž áááºážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáááºááŸáá·áº á¡á¬ážáá¯á¶áž á¡áááºááŒá±ááœá¬ážáááºááŒá áºáááºá
fastlane init
ááá±á¬áá»ááºáá
áºáá¯ááœáẠfastlane ááá¯áá¯á¶ážáááºá run áá«á fastlane init
. ááá¯ááºáá¬áá¯á¶áá«áá²á
ááá·áºááá±á¬áá»ááºáááºážááœáŸááºááœáẠá€á¡áááá·áºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáá«-
xcode-select --install
sudo gem install fastlane -NV
# Alternatively using Homebrew
# brew cask install fastlane
fastlane init
fastlane ááẠá¡ááŒá±áá¶ááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá áºáá¯ááᯠáá±á¬ááºážááá¯áááºááŒá áºááŒá®áž ááá¯ááºáá¯á¶ážááá¯ááºááŒáá·áº ááá±á¬áá»ááºááŸá fastlane ááá¯áá«áá áºáá¯ááᯠáááºáá®ážáá«áááá·áºáááº-
1. fastlane/Appfile
áá®ááŸá¬ áá¬á០ááŸá¯ááºááœá±ážáᬠáááŸááá«áá°ážá áááºá Apple ID ááŸáá·áº App ID ááŸááºáááºááŒá±á¬ááºáž áá±áá»á¬áá«á á±á
app_identifier("com.vontrance.flappybird") # The bundle identifier of your app
apple_id("[email protected]") # Your Apple email address
2. fastlane/Fastfile
Fastfile
áááºáá±á¬ááºáá¯á¶á¡ááá·áºááá·áºááᯠáááºááŸááºáááºá áá»áœááºá¯ááºááá¯á·ááẠfastlane á built-in á¡ááºá¹áá«áááºáá»á¬ážá
áœá¬ááá¯á¡áá¯á¶ážááŒá¯áááºá ááá¯á·ááŒá±á¬áá·áºá¡áá¬á¡á¬ážáá¯á¶ážáááºá€áá±áá¬ááœááºáááºážááŸááºážáááºážáááºá áá»áœááºá¯ááºááá¯á·ááẠáááºááŸááºáá»á¬ážáááºáá¶áááŸááᬠá
ááºážáá±ážááœá²áá¯ááºáá±á¬ááºááŒá®áž TestFlight ááá¯á· á¡ááºáá¯ááºáááºááá·áº ááá¯ááºážáá
áºááá¯ááºážááᯠáááºáá®ážáá«áááºá ááá¯á¡ááºáá«á á€áá¯ááºáááºážá
ááºááᯠááá°áá®áá±á¬á¡áá¯ááºáá»á¬ážá¡ááŒá
Ạááá¯ááºážááŒá¬ážááá¯ááºáá«áááºá á€áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá¡á¬ážáá¯á¶áž (get_certificates
, get_provisioning_profile
, gym
О upload_to_testflight
) fastlane ááŸá¬ áá«áááºááŒá®ážáá¬ážáá«á
áá¯ááºáááºáá»á¬áž get_certificates
О get_provisioning_profile
áááºááŸááºáá±ážááá¯ážáá±áž áá»ááºážáááºááŸá¯ááá¯á·ááŸáá·áº áááºááá¯ááºáááºá
default_platform(:ios)
platform :ios do
desc "Build the application"
lane :flappybuild do
get_certificates
get_provisioning_profile
gym
upload_to_testflight
end
end
3. fastlane/Gymfile
áááºážááẠáá»ááºááŸááºáá¬ážáá±á¬ ááá¯ááºáá
áºáá¯ááŒá
áºáááºá ááá¯á·áá±á¬áº áááºážááᯠáá°áááºážá¡ááœááºáááºážááŒá±á¬ááºážááᯠááŒá±á¬ááºážáá²áááºááŸáá·áº áááºááŸáááá¯ááºááœá²ááœáẠá¡ááœááºááᯠáá±áá¬áá»áá¬ážááẠáááºážááᯠááá¯ááºááá¯ááºáááºáá®ážáá²á·áááºá áááºážááẠCI ááá¯ááá¯ážááŸááºážá
á±áááºá á
áááºáááºá
á¬ážááẠáááºááŒáá·áºááá¯ááºáá«á gym
áááºážá parameters áá»á¬áž
https://docs.fastlane.tools/actions/gym/
áá»áœááºáá±á¬áºááá¯á·á .gitlab-ci.yml
ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááœáẠááá±á¬áá»ááºá¡ááœáẠCI á¡ááŒá±ážááá¬ážáá
áºáŠážááŸáááŒá®áž ááá¯ááºááá¯ááºážááᯠá
ááºážáááºááẠá¡áááºááá·áºááŒá
áºáá±áá«ááŒá®á áá«ááá¯á·ááŸá¬ áá¬ááœá±áá«áá² ááŒáá·áºáá¡á±á¬áẠ.gitlab-ci.yml
:
stages:
- build
variables:
LC_ALL: "en_US.UTF-8"
LANG: "en_US.UTF-8"
GIT_STRATEGY: clone
build:
stage: build
script:
- bundle install
- bundle exec fastlane flappybuild
artifacts:
paths:
- ./FlappyBird.ipa
ПÑлОÑМПÐÑе! clone
áá¯ááºáá±á¬ááºáá»ááºá¡á
á®á¡á
ááºááŸáá·áºá¡áá° shell
á¡áááºážáá±á¬áºáá
áºáá¯á
á®á¡ááœáẠááá·áºááŸááºážáá±á¬á¡áá¯ááºááœááºáá
áºáá¯ááŸáá
á±áááºá ááá¯ážááá¯ážááŸááºážááŸááºážáá±á«áºááá¯áá«á flappybuild
á¡áááºááŸá¬ááŒááºááá²á·á¡ááá¯ááºáž á¡ááŒááºáááºážáá«á ááááºá¡áá±ááŒáá·áº TestFlight ááœáẠáá±á¬ááºáá¯á¶ážáá±á«áº á
ááºážáá±ážááœá²á áááºááŸááºááŸáá·áº ááŒáá·áºáá»ááºááŸá¯ááá¯á·ááᯠáá»áœááºá¯ááºááá¯á· áááŸááá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠáá
á¹á
ááºážáá»á¬ážááá¯áááºáž ááá°ááŒá®áž ááááááºááŸáá·áºá¡áá° ááááºážáááºážáá«á áá¯á¶á
á¶ááᯠáááááŒá¯áá«á .ipa
Simulator ááœáẠááááºáááºááá¯ááºáá±á¬ áááºááŸááºáá±ážááá¯ážáá¬ážáá±á¬ ARM áá¯ááºáá±á¬ááºáá»ááºááŒá
áºáááºá Simulator á¡ááœáẠoutput ááᯠááá¯áá»ááºáá«áá áááºážááᯠáá¯ááºáá¯ááºááá·áº build target ááᯠááá·áºááŒá®áž artifact path ááœáẠááá·áºááœááºážáá«á
á¡ááŒá¬ážáááºáááºážáá»ááºááŒá±á¬ááºážáá²ááŸá¯áá»á¬áž
á€áá±áá¬ááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠá¡áááºááŒá±á á±ááá·áº áááºáááºážáá»ááºááŒá±á¬ááºážáá²ááŸá¯á¡áá»áá¯á·ááŸááááºá
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD
О FASTLANE_SESSION
á¡ááºááºá
ááá¯ážááœáẠá
á
áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážááŒááŒá®áž TestFlight ááá¯á· á¡ááºáá¯ááºáá¯ááºááẠfastlane á¡ááœáẠá
á
áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬áž ááá¯á¡ááºáááºá áá«ááá¯áá¯ááºááá¯á·á CI ááŸá¬áá¯á¶ážááá·áº á¡ááá®áá±ážááŸááºážá¡ááœáẠá
áá¬ážááŸááºáá
áºáᯠáááºáá®ážáá«á á¡áá±ážá
áááº
ááá·áºááœáẠtwo-factor authentication ááŸááá«á variable áá
áºáá¯ááᯠáááºáá®ážáá«á FASTLANE_SESSION
(á¡á²áá®ááŸá¬ ááœáŸááºááŒá¬ážáá»ááºááœá±)á
FASTLANE_USER
О FASTLANE_PASSWORD
ááᯠFASTLANE_USER
О FASTLANE_PASSWORD
. á¡áá±ážá
áááº
áááá¯á¶ážáá»á¯ááº
á¡á¬ážáá¯á¶ážáááºááá¯á¡áá¯ááºáá¯ááºáá²ááá¯áá¬ááᯠáááºááŒááºááá¯ááºáá«áááºá
áááºážááẠá¡áá±á¬ááºá¡áá°ááŒá
áºááŒá®áž GitLab ááá±á¬áá»ááºááœáẠiOS áááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºááẠááá·áºá¡á¬áž ááŸá¯á¶á·áá±á¬áºáá±ážáááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá áá«ááááºáž CI_BUILD_ID
(for incremental builds) ááŸ
Fastlane ááá±á¬ááºáááºáá°ážááŒá¬ážáá»ááºááŸá¬
ááá·áºá¡ááœá±á·á¡ááŒá¯á¶á¡ááŒá±á¬ááºáž ááŸááºáá»ááºáá»á¬ážááœáẠáá»áœááºá¯ááºááá¯á·á¡á¬áž ááŒá±á¬ááŒááŒá®áž iOS á¡ááºááºááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááœáẠGitLab ááá¯ááá¯áá±á¬ááºážááœááºáá¬á á±ááẠááá·áºá áááºáá°ážáá»á¬ážááᯠáá»áŸáá±áá«á
source: www.habr.com