ΠΠ°ΠΊ GitLab Ρ fastlane ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ, ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ iOS Π² App Store.
ΠΠ΅Π΄Π°Π²Π½ΠΎ Ρ Π½Π°Ρ Π±ΡΠ»
ΠΠ΄Π΅ΡΡ ΠΌΡ Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ
ΠΠ°ΡΠ° ΡΠ»ΠΎΠ² ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Apple Store
ΠΠ°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² App Store, ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΡΠΎΡΠΈΠ»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΡΠ²ΡΠ·Π°ΡΡ Π²ΡΠ΅ Π²ΠΌΠ΅ΡΡΠ΅.
Π‘Π°ΠΌΠΎΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠ΅ ΡΡΡ β Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠ°Π²Π° Π½Π° ΠΏΠΎΠ΄ΠΏΠΈΡΡ Π² App Store. ΠΠ°Π΄Π΅ΡΡΡ, Ρ ΡΡΠΈΠΌ Π²Ρ ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ΡΡ ΡΠ°ΠΌΠΈ. ΠΡΠ»ΠΈ Π²Ρ Π½ΠΎΠ²ΠΈΡΠΎΠΊ, Ρ ΡΠΊΠ°ΠΆΡ Π½ΡΠΆΠ½ΠΎΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, Π½ΠΎ Π·Π΄Π΅ΡΡ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΡΠΎΠ½ΠΊΠΎΡΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°ΠΌΠΈ Apple, ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅ ΠΎΠ½ΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΌΠ΅Π½ΡΡΡΡΡ. ΠΡΠΎΡ ΠΏΠΎΡΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ Π΄Π΅Π»Ρ.
ΠΠΎΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΡΠΆΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² App Store Connect, ΡΡΠΎΠ±Ρ Ρ Π²Π°Ρ Π±ΡΠ» ID Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ .xcodebuild
. ΠΡΠΎΡΠΈΠ»Ρ ΠΈ ID ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΊΠΎΠ΄Π°, ΡΠ΅Π½Ρ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ, Π° Π΅ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ TestFlight Π΄Π»Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΡΠΎΠ²ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΡΠ΅Π΄ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠ΅ Π΄Π΅Π»Π°ΠΉΡΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Ρ
Π²Π°ΡΠΈΡ ΠΈ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠ°Ρ Π³ΡΡΠΏΠΏΠ°, ΠΏΡΠΎΡΡΠ°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΈ Π½Π΅ Π½ΡΠΆΠ½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΡ Apple.
ΠΡΠΎΡΠΈΠ»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ
ΠΡΠΎΠΌΠ΅ ΡΠ΅ΡΠ°ΠΏΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ ΠΊΠ»ΡΡΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ iOS, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Certificates, Identifiers & Profiles (Π‘Π΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈ) Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Apple Developer. ΠΡΠ΅ ΡΡΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π² ΠΏΡΠΎΡΠΈΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, Π½ΡΠΆΠ½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ, ΠΈΠ½Π°ΡΠ΅ Π½Π° ΡΡΠ°ΠΏΠ°Ρ
ΠΡΡΠ³ΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ
ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°, Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈ. Π’Π°ΠΊ ΡΡΠΎ, Π΅ΡΠ»ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ ΠΈΠ½Π°ΡΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ. Π‘Π°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ β Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ .xcodebuild
, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° Π½ΡΠΆΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π° ΡΠ²ΡΠ·ΠΊΠ° ΠΊΠ»ΡΡΠ΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Π° Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΏΠΎΠ΄ ΡΡΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°Π½Π½Π΅Ρ. ΠΠ»Ρ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ fastlane, ΠΈ Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅, ΠΈΠ·ΡΡΠΈΡΠ΅ ΠΈΡ
ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° GitLab ΠΈ fastlane
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° CI Runner
Π‘ΠΎΠ±ΡΠ°Π² Π²ΡΠ΅ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅, ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ GitLab-ΡΠ°Π½Π½Π΅ΡΠ° Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ MacOS. Π Π½Π΅ΡΡΠ°ΡΡΡΡ, Π΄Π΅Π»Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ iOS ΡΠ΅Π°Π»ΡΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² MacOS. ΠΠΎ Π²ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ, ΠΈ Π΅ΡΠ»ΠΈ ΠΆΠ΄Π΅ΡΠ΅ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ΅ΠΊ Π² ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, β ΡΠ»Π΅Π΄ΠΈΡΠ΅ Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ, Π²ΡΠΎΠ΄Π΅
ΠΠ°ΡΡΡΠΎΠΈΡΡ ΡΠ°Π½Π½Π΅Ρ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ. Π‘Π»Π΅Π΄ΡΠΉΡΠ΅ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΌ
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. Π Π°Π½Π½Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ shell
. ΠΡΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ iOS Π² macOS, ΡΡΠΎΠ±Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°ΠΏΡΡΠΌΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π° Π½Π΅ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ 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 Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½Π° Π½Π° ΡΡΠΎΠΌ Ρ ΠΎΡΡΠ΅ Ρ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΠΊΠ»ΡΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½Ρ Xcode Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ. Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ β Π²ΠΎΠΉΡΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΡΠΈΡ ΡΠ±ΠΎΡΠΊΡ, ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ±ΠΎΡΠΊΡ Π²ΡΡΡΠ½ΡΡ. ΠΡΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π°ΠΏΡΠΎΡΠΈΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ²ΡΠ·ΠΊΠ΅ ΠΊΠ»ΡΡΠ΅ΠΉ, Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Β«ΠΡΠ΅Π³Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΒ», ΡΡΠΎΠ±Ρ CI ΡΠ°Π±ΠΎΡΠ°Π». ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎΠΈΡ Π²ΠΎΠΉΡΠΈ ΠΈ ΠΏΠΎΠ½Π°Π±Π»ΡΠ΄Π°ΡΡ Π·Π° ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΠ°ΡΠΎΠΉ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ², β ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΡΠΎΡΡΡ ΡΠ²ΡΠ·ΠΊΠΈ ΠΊΠ»ΡΡΠ΅ΠΉ. ΠΠ΅Π΄Π° Π² ΡΠΎΠΌ, ΡΡΠΎ Apple Π½Π΅ ΡΠΏΡΠΎΡΠ°Π΅Ρ Π½Π°ΠΌ ΡΠ°Π±ΠΎΡΡ Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ Π΅Π³ΠΎ Π½Π°Π»Π°Π΄ΠΈΡΠ΅, Π²ΡΠ΅ Π±ΡΠ΄Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ.
fastlane init
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ fastlane Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅, Π·Π°ΠΏΡΡΡΠΈΡΠ΅ 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 ΠΈ 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, ΡΠ°ΠΊ ΡΡΠΎ Π·Π΄Π΅ΡΡ Π²ΡΠ΅ ΡΠΎΠΆΠ΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ΄Π½Ρ Π»ΠΈΠ½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ±ΠΎΡΠΊΡ ΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π΅Π΅ Π² 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
ΠΈ Π΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ
Π²
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
fastlane, ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ Π²ΡΡΠ΅. Π ΠΈΡΠΎΠ³Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ±ΠΎΡΠΊΡ, ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΠ±ΠΎΡΠΊΠΈ Π² TestFlight.
ΠΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π°ΡΡΠ΅ΡΠ°ΠΊΡ ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ Π΅Π³ΠΎ ΡΠΎ ΡΠ±ΠΎΡΠΊΠΎΠΉ. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ ΡΠΎΡΠΌΠ°Ρ .ipa
β ΡΡΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» ARM, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π² ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ΅. ΠΡΠ»ΠΈ Ρ
ΠΎΡΠΈΡΠ΅ Π²ΡΡ
ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ°, ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ°ΡΠ³Π΅Ρ ΡΠ±ΠΎΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ Π΅Π³ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ, Π° ΠΏΠΎΡΠΎΠΌ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ Π΅Π³ΠΎ Π² ΠΏΡΡΡ ΠΊ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ.
ΠΡΡΠ³ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π΄Ρ
ΠΠ΄Π΅ΡΡ Π΅ΡΡΡ ΠΏΠ°ΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠ΅Π΄Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD
ΠΈ FASTLANE_SESSION
ΠΠ»Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π² App Store ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π² TestFlight Π½ΡΠΆΠ½Π° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄Π»Ρ fastlane. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΠ°ΡΠΎΠ»Ρ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² CI. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΄Π²ΡΡ
ΡΠ°ΠΊΡΠΎΡΠ½Π°Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ FASTLANE_SESSION
(ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ°ΠΌ ΠΆΠ΅).
FASTLANE_USER
ΠΈ FASTLANE_PASSWORD
Π§ΡΠΎΠ±Ρ FASTLANE_USER
ΠΈ FASTLANE_PASSWORD
. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊ Π²ΡΠ΅ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ
ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΈ Ρ Π²Π΄ΠΎΡ
Π½ΠΎΠ²ΠΈΠ» Π²Π°Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ ΡΠ±ΠΎΡΠΊΠ°ΠΌΠΈ iOS Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ GitLab. ΠΠΎΡ Π΅ΡΠ΅ CI_BUILD_ID
(Π΄Π»Ρ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ½ΡΡ
ΡΠ±ΠΎΡΠΎΠΊ), ΡΡΠΎΠ±Ρ
ΠΡΠ΅ ΠΎΠ΄Π½Π° ΠΊΡΡΡΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ fastlane β
Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ΠΎ ΡΠ²ΠΎΠ΅ΠΌ ΠΎΠΏΡΡΠ΅ ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΠ΅ΡΡ ΠΈΠ΄Π΅ΡΠΌΠΈ ΠΏΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ GitLab Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ iOS.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com