ΠΠ°ΠΊ GitLab Ρ fastlane ΡΡΠ±ΠΈΡΠ°, ΠΏΠΎΠ΄ΠΏΠΈΡΠ²Π° ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π° iOS ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² App Store.
ΠΠ°ΡΠΊΠΎΡΠΎ ΠΈΠΌΠ°Ρ
ΠΌΠ΅
Π’ΡΠΊ Π²Π·Π΅ΠΌΠ°ΠΌΠ΅
ΠΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΠΌΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Apple Store
Π©Π΅ Π½ΠΈ ΡΡΡΠ±Π²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² App Store, ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ Π·Π° ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΡΠΈΠ» Π·Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅, Π·Π° Π΄Π° ΡΠ²ΡΡΠΆΠ΅ΠΌ Π²ΡΠΈΡΠΊΠΎ Π·Π°Π΅Π΄Π½ΠΎ.
ΠΠ°ΠΉ-ΡΡΡΠ΄Π½ΠΎΡΠΎ ΡΡΠΊ Π΅ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π° ΠΏΠΎΠ΄ΠΏΠΈΡΠ²Π°Π½Π΅ Π² App Store. ΠΠ°Π΄ΡΠ²Π°ΠΌ ΡΠ΅, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠΎΠ²Π° Π·Π° ΡΠ΅Π±Π΅ ΡΠΈ. ΠΠΊΠΎ ΡΡΠ΅ Π½ΠΎΠ², ΡΠ΅ Π²ΠΈ Π½Π°ΡΠΎΡΠ° Π² ΠΏΡΠ°Π²ΠΈΠ»Π½Π°ΡΠ° ΠΏΠΎΡΠΎΠΊΠ°, Π½ΠΎ ΡΡΠΊ Π½ΡΠΌΠ° Π΄Π° Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΡΡΠ½ΠΊΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ Π½Π° Apple, Π° ΡΠ΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ. Π’Π°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅.
ΠΠΎΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΡΠΆΠ΄Π°Π΅ΡΠ΅ ΡΠ΅ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² App Store Connect, Π·Π° Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ID Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ .xcodebuild
. ΠΡΠΎΡΠΈΠ»ΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ID ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ Π½Π° ΠΊΠΎΠ΄, ΡΠ΅Π½ΠΎΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ ΠΈ Π½Π°Π»ΠΈΡΠ½ΠΎΡΡ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° TestFlight Π·Π° ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅. ΠΠ΅ ΠΏΡΠ°Π²Π΅ΡΠ΅ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎ ΡΠ΅ΡΡΠ²Π°Π½Π΅, ΡΠ°ΡΡΠ½ΠΎΡΠΎ ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ, Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΌΠ°Π»ΠΊΠ° Π³ΡΡΠΏΠ°, ΠΏΡΠΎΡΡΠ° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΈ Π½Π΅ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅ ΠΎΡ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΡ Apple.
ΠΡΠΎΡΠΈΠ» Π·Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅
Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π²ΠΈ ΡΡΡΠ±Π²Π°Ρ ΠΊΠ»ΡΡΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° iOS, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ Π² ΡΠ΅ΠΊΡΠΈΡΡΠ° Π‘Π΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π° Apple. ΠΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ Π² ΠΏΡΠΎΡΠΈΠ» Π·Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅.
ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠ΅Π½ΠΈ, ΡΠ΅ Π½ΡΠΆΠ΄Π°ΡΡ ΠΎΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΡΠ·Π΄Π°Π²Π°Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ, Π² ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ ΡΡΡΠΏΠΊΠΈΡΠ΅
Π΄ΡΡΠ³ΠΈ ΠΎΠΏΡΠΈΠΈ
ΠΡΠ²Π΅Π½ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΡ ΠΌΠ΅ΡΠΎΠ΄, ΠΈΠΌΠ° ΠΈ Π΄ΡΡΠ³ΠΈ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈ. Π’Π°ΠΊΠ° ΡΠ΅, Π°ΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ Π½Π°ΡΠΈΠ½, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π½Π°ΡΡΡΠΎΠΈΡΠ΅. ΠΠ°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡΠΎ Π΅, ΡΠ΅ ΡΠ΅ Π²ΠΈ ΡΡΡΠ±Π²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ .xcodebuild
, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠΎΡΠΈ ΠΊΡΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π° ΠΊΠ»ΡΡΠΎΠ΄ΡΡΠΆΠ°ΡΠ΅Π»ΡΡ ΡΡΡΠ±Π²Π° Π΄Π° Π΅ Π½Π°Π»ΠΈΡΠ΅Π½ Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΡΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ, ΠΏΠΎΠ΄ ΡΠΈΠ΅ΡΠΎ ΠΈΠΌΠ΅ ΡΠ°Π±ΠΎΡΠΈ runner-ΡΡ. ΠΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ fastlane Π·Π° ΡΠΈΡΡΠΎΠ²ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ²Π°Π½Π΅ ΠΈ Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈΠ»ΠΈ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π½Π°ΡΡΠΈΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅, Π²ΠΈΠΆΡΠ΅ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ
Π ΡΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π°
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° GitLab ΠΈ fastlane
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° CI Runner
Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΡΠ±ΡΠ°Ρ
ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ ΠΊΡΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° GitLab runner Π½Π° MacOS ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ. ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π·Π° iOS Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΌΠΎ Π½Π° MacOS. ΠΠΎ Π²ΡΠΈΡΠΊΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΈ Π°ΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π½Π°ΠΏΡΠ΅Π΄ΡΠΊ Π² ΡΠ°Π·ΠΈ ΠΎΠ±Π»Π°ΡΡ, ΡΠ»Π΅Π΄Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΠΊΠ°ΡΠΎ
ΠΠ°ΡΡΡΠΎΠΉΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π±Π΅Π³Π°ΡΠ° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅ΡΠ½ΠΎ. Π‘Π»Π΅Π΄Π΅ΡΠ΅ Π°ΠΊΡΡΠ°Π»Π½ΠΎ
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°. ΠΠ΅Π³Π°ΡΡΡ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° shell
. Π’ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π° Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ iOS Π½Π° macOS, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΊΠ°ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», Π° Π½Π΅ ΡΡΠ΅Π· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ. ΠΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ shell
, ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ ΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ ΠΊΠ°ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Π½Π° runner, ΡΠΎΡΠ½ΠΎ Π½Π° Ρ
ΠΎΡΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅. ΠΠ΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅
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 Π½Π΅ Π½ΠΈ ΡΠ»Π΅ΡΠ½ΡΠ²Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΌ Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ, Π½ΠΎ ΠΊΠΎΠ³Π°ΡΠΎ Π³ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΠ΅, Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π°ΡΠ΅Π΄.
fastlane ΠΈΠ½ΠΈΡΠΈΠ°Π»
ΠΠ° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ 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 runner Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΡΠΌΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ Π΄Π° ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄Π°. ΠΠ° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ .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.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com