ΠΠ°ΠΊΠΎ GitLab ΡΠΎ fastlane ΡΠΎΠ±ΠΈΡΠ°, ΠΏΠΎΡΠΏΠΈΡΡΠ²Π° ΠΈ ΠΎΠ±ΡΠ°Π²ΡΠ²Π° iOS Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π²ΠΎ App Store.
ΠΠ΅ΠΎΠ΄Π°ΠΌΠ½Π° ΠΈΠΌΠ°Π²ΠΌΠ΅
ΠΠ²Π΅ Π½ΠΈΠ΅ ΡΠ΅ Π·Π΅ΠΌΠ΅ΠΌΠ΅
ΠΠ΅ΠΊΠΎΠ»ΠΊΡ Π·Π±ΠΎΡΠΎΠ²ΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° Apple Store
ΠΠ΅ Π½ΠΈ ΡΡΠ΅Π±Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° App Store, ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ Π·Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ° ΠΈ ΠΏΡΠΎΡΠΈΠ» Π·Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π°ΡΠ΅ Π·Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π΅ ΡΓ¨ Π·Π°Π΅Π΄Π½ΠΎ.
ΠΠ°ΡΡΠ΅ΡΠΊΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° ΠΎΠ²Π΄Π΅ Π΅ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ ΠΏΡΠ°Π²Π° Π·Π° ΠΏΠΎΡΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π²ΠΎ App Store. Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌ Π΄Π΅ΠΊΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΌΠΈ Π΄Π° Π³ΠΎ ΡΡΠ°ΡΠΈΡΠ΅ ΠΎΠ²Π°. ΠΠΊΠΎ ΡΡΠ΅ Π½ΠΎΠ², ΡΠ΅ Π²Π΅ ΡΠΏΠ°ΡΠ°ΠΌ Π²ΠΎ Π²ΠΈΡΡΠΈΠ½ΡΠΊΠ°ΡΠ° Π½Π°ΡΠΎΠΊΠ°, Π½ΠΎ ΠΎΠ²Π΄Π΅ Π½Π΅ΠΌΠ° Π΄Π° Π·Π±ΠΎΡΡΠ²Π°ΠΌΠ΅ Π·Π° ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡΠ° Π½Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ ΡΠΎ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ Π½Π° Apple, Π° ΡΠΈΠ΅ ΠΏΠΎΡΡΠΎΡΠ°Π½ΠΎ ΡΠ΅ ΠΌΠ΅Π½ΡΠ²Π°Π°Ρ. ΠΠ²ΠΎΡ ΠΏΠΎΡΡ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅.
ΠΠΎΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ
ΠΠΎΡΡΠ΅Π±Π½Π° Π²ΠΈ Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π²ΠΎ App Store Connect Π·Π° Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ID Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° .xcodebuild
. ΠΡΠΎΡΠΈΠ»ΠΎΡ ΠΈ ID Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π³ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π°Ρ ΠΈΠ·Π³ΡΠ°Π΄Π±ΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ΄ΠΎΡ, ΡΠ΅Π½ΠΈΡΠ΅ ΠΈ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΎΡΡΠ° ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° TestFlight Π·Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ° Π½Π° ΡΠ΅ΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π΄ΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅. ΠΠ΅ ΠΏΡΠ°Π²Π΅ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅, ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΡΠΎ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ ΡΠ΅ Π±ΠΈΠ΄Π΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΌΠ°Π»Π° Π³ΡΡΠΏΠ°, Π»Π΅ΡΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΈ Π½Π΅ Π²ΠΈ ΡΡΠ΅Π±Π°Π°Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΎΠ΄ Apple.
ΠΡΠΎΡΠΈΠ» Π½Π° ΠΈΠ½ΠΈΡΠΈΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΠ°
ΠΠΎΠΊΡΠ°Ρ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°, ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π²ΠΈ ΡΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΠΈ Π·Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ° ΠΈ ΡΠ°Π·Π²ΠΎΡ Π½Π° iOS ΡΠΎΠ·Π΄Π°Π΄Π΅Π½ΠΈ Π²ΠΎ Π΄Π΅Π»ΠΎΡ Π‘Π΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΡΠΊΠ°ΡΠ° ΠΊΠΎΠ½Π·ΠΎΠ»Π° Π½Π° Apple. Π‘ΠΈΡΠ΅ ΠΎΠ²ΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π°Ρ Π²ΠΎ ΠΏΡΠΎΡΠΈΠ» Π·Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π°ΡΠ΅.
ΠΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅ ΠΊΠΎΠΈ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ Π°Π²ΡΠ΅Π½ΡΠΈΡΠΈΡΠ°Π½ΠΈ ΡΡΠ΅Π±Π° Π΄Π° ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°Π°Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ, ΠΈΠ½Π°ΠΊΡ ΡΠ΅ΠΊΠΎΡΠΈΡΠ΅
Π΄ΡΡΠ³ΠΈ ΠΎΠΏΡΠΈΠΈ
ΠΠΎΠΊΡΠ°Ρ ΠΎΠ²ΠΎΡ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄, ΠΏΠΎΡΡΠΎΡΠ°Ρ ΠΈ Π΄ΡΡΠ³ΠΈ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈ. ΠΠ½Π°ΡΠΈ, Π°ΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠΈΠ½Π°ΠΊΡ, ΠΌΠΎΠΆΠ΅Π±ΠΈ ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄ΠΈΡΠ΅. ΠΠ°ΡΠ²Π°ΠΆΠ½ΠΎ Π΅ Π΄Π΅ΠΊΠ° Π²ΠΈ ΡΡΠ΅Π±Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° .xcodebuild
, ΡΡΠΎ ΡΠ΅ ΡΠΊΠ°ΠΆΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ, Π° ΠΏΡΠΈΠ²ΡΠ·ΠΎΠΊΠΎΡ Π·Π° ΠΊΠ»ΡΡΠ΅Π²ΠΈ ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π΅ Π΄ΠΎΡΡΠ°ΠΏΠ΅Π½ Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΡ Π·Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π° Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ ΠΏΠΎΠ΄ ΡΠΈΠ΅ ΠΈΠΌΠ΅ ΡΠ°Π±ΠΎΡΠΈ ΡΡΠΊΠ°ΡΠΎΡ. ΠΠ° Π΄ΠΈΠ³ΠΈΡΠ°Π»Π΅Π½ ΠΏΠΎΡΠΏΠΈΡ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ fastlane, Π° Π°ΠΊΠΎ ΠΈΠΌΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈΠ»ΠΈ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° Π΄ΠΎΠ·Π½Π°Π΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅, ΠΏΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π³ΠΈ Π½ΠΈΠ²Π½ΠΈΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ
ΠΠΎ ΠΎΠ²ΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠ°ΠΌ ΠΏΡΠΈΡΡΠ°ΠΏΠΎΡ
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° GitLab ΠΈ fastlane
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° CI Runner
ΠΡΠΊΠ°ΠΊΠΎ Π³ΠΈ ΡΠΎΠ±ΡΠ°Π²ΠΌΠ΅ ΡΠΈΡΠ΅ ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΠΏΡΠ΅ΠΌΠΈΠ½ΡΠ²Π°ΠΌΠ΅ ΠΊΠΎΠ½ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° GitLab ΡΡΠΊΠ°ΡΠΎΡ Π½Π° ΡΡΠ΅Π΄ΠΎΡ MacOS. ΠΠ° ΠΆΠ°Π», ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π·Π° iOS ΡΠ°ΠΌΠΎ Π½Π° MacOS. ΠΠΎ, ΡΓ¨ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, ΠΈ Π°ΠΊΠΎ ΠΎΡΠ΅ΠΊΡΠ²Π°ΡΠ΅ Π½Π°ΠΏΡΠ΅Π΄ΠΎΠΊ Π²ΠΎ ΠΎΠ²Π°Π° ΠΎΠ±Π»Π°ΡΡ, Π²Π½ΠΈΠΌΠ°Π²Π°ΡΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΠΊΠ°ΠΊΠΎ
ΠΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΡΠΊΠ°ΡΠΎΡ Π΅ ΠΌΠ½ΠΎΠ³Ρ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ. Π‘Π»Π΅Π΄Π΅ΡΠ΅ ΡΠ° ΡΡΡΡΡΠ°ΡΠ°
ΠΠ°Π±Π΅Π»Π΅ΡΠΊΠ°. Π’ΡΠΊΠ°ΡΠΎΡ ΠΌΠΎΡΠ° Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈ ΠΈΠ·Π²ΡΡΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° shell
. ΠΠ²Π° Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄ΠΈ iOS Π½Π° macOS Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΊΠ°ΠΊΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ Π½Π°ΠΌΠ΅ΡΡΠΎ ΠΏΡΠ΅ΠΊΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ. ΠΠΎΠΊΠΎΠ»ΠΊΡ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ shell
, Π³ΡΠ°Π΄Π΅ΡΠ΅ΡΠΎ ΠΈ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ ΡΠ΅ ΠΈΠ·Π²Π΅Π΄ΡΠ²Π°Π°Ρ ΠΊΠ°ΠΊΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ Π½Π° ΡΡΠΊΠ°Ρ, Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π½Π° build-Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ. ΠΠ΅ Π΅ ΡΠΎΠ»ΠΊΡ Π±Π΅Π·Π±Π΅Π΄Π΅Π½ ΠΊΠ°ΠΊΠΎ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΡΠ΅, Π·Π°ΡΠΎΠ° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ ΠΏΡΠ΅Π»ΠΈΡΡΡΠ²Π°ΡΡΠ΅
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. ΠΠ°ΡΠ»Π΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π΄Π° Π³ΠΎ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ ΠΎΠ²Π° Π΅ Π΄Π° ΡΠ΅ Π½Π°ΡΠ°Π²ΠΈΡΠ΅ ΠΊΠ°ΠΊΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ ΠΊΠΎΡ ΡΠ΅ ΡΠ° ΠΈΠ·Π²ΡΡΠΈ ΠΈΠ·Π³ΡΠ°Π΄Π±Π°ΡΠ° ΠΈ Π΄Π° ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π΅ ΡΠ°ΡΠ½ΠΎ Π΄Π° Π³ΠΎ ΠΈΠ·Π³ΡΠ°Π΄ΠΈ. ΠΠΊΠΎ ΡΠΈΡΡΠ΅ΠΌΠΎΡ Π±Π°ΡΠ° ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΡΠΈΠ½ΡΠΈΡΠΎΡ Π½Π° ΠΊΠ»ΡΡΠ΅Π²ΠΈ, ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Always Allow for 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 ΠΈ 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, ΡΠ°ΠΊΠ° ΡΡΠΎ ΡΓ¨ Π΅ ΡΠ°ΡΠ½ΠΎ ΠΈ ΠΎΠ²Π΄Π΅. Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π΅Π΄Π½Π° Π»ΠΈΠ½ΠΈΡΠ° ΠΊΠΎΡΠ° ΠΏΡΠΈΠΌΠ° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ, ΡΠ° Π²ΡΡΠΈ ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ΡΠΎ ΠΈ ΡΠ° ΠΏΠΎΡΡΠ°Π²ΡΠ²Π° Π½Π° 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
ΠΠΎΡΡΠ΅Π±Π½Π° Π΅ Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡΠ° Π·Π° fastlane Π·Π° Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡΠ° Π²ΠΎ App Store ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° TestFlight. ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, ΠΊΡΠ΅ΠΈΡΠ°ΡΡΠ΅ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΡΡΠΎ ΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ CI. ΠΠ΅ΡΠ°Π»ΠΈ
ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π΄Π²ΠΎΡΠ°ΠΊΡΠΎΡΠ½Π° Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡΠ°, ΠΊΡΠ΅ΠΈΡΠ°ΡΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° FASTLANE_SESSION
(ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ°ΠΌΡ).
FASTLANE_USER
ΠΈ FASTLANE_PASSWORD
ΠΠ΅ΠΊΠ° FASTLANE_USER
ΠΈ FASTLANE_PASSWORD
. ΠΠ΅ΡΠ°Π»ΠΈ
ΠΠΎ Π·Π°ΠΊΠ»ΡΡΠΎΠΊ
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΊΠ°ΠΊΠΎ ΡΠ΅ΡΠΎ ΡΠΎΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°
Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΊΠΎΡΠΈΡΠ½ΠΎ ΠΈ Π²Π΅ ΠΈΠ½ΡΠΏΠΈΡΠΈΡΠ°ΡΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΡΠΎ iOS-Π³ΡΠ°Π΄Π±ΠΈΡΠ΅ Π²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° GitLab. ΠΠ²Π΅ ΡΡΡΠ΅ Π΅Π΄Π΅Π½ CI_BUILD_ID
(Π·Π° ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°Π»Π½ΠΈ Π³ΡΠ°Π΄Π±ΠΈ) Π΄ΠΎ
ΠΡΡΠ³Π° ΠΊΡΠ» ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π½Π° fastlane Π΅
ΠΠ°ΠΆΠ΅ΡΠ΅ Π½ΠΈ Π²ΠΎ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ Π·Π° Π²Π°ΡΠ΅ΡΠΎ ΠΈΡΠΊΡΡΡΠ²ΠΎ ΠΈ ΡΠΏΠΎΠ΄Π΅Π»Π΅ΡΠ΅ Π³ΠΈ Π²Π°ΡΠΈΡΠ΅ ΠΈΠ΄Π΅ΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ΅ Π½Π° GitLab Π·Π° ΡΠ°Π·Π²ΠΎΡ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π·Π° iOS.
ΠΠ·Π²ΠΎΡ: www.habr.com