ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ прилоТСния iOS Π² App Store с GitLab ΠΈ fastlane

ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ прилоТСния iOS Π² App Store с GitLab ΠΈ fastlane

Как GitLab с fastlane собираСт, подписываСт ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚ прилоТСния для iOS Π² App Store.

НСдавно Ρƒ нас Π±Ρ‹Π» пост ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ быстро ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Android с GitLab ΠΈ fastlane. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ iOS ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² TestFlight. Π—Π°Ρ†Π΅Π½ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΠΊΡ€ΡƒΡ‚ΠΎ я Π²Π½ΠΎΡˆΡƒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π° iPad Pro с GitLab Web IDE, Π±Π΅Ρ€Ρƒ сборку ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ тСстовой вСрсии прилоТСния Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ iPad Pro, Π³Π΄Π΅ я Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π».

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ возьмСм простоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для iOS Π½Π° Swift, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ я записывал Π²ΠΈΠ΄Π΅ΠΎ.

ΠŸΠ°Ρ€Π° слов ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Apple Store

Нам понадобится ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² App Store, сСртификаты распространСния ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ всС вмСстС.

Π‘Π°ΠΌΠΎΠ΅ слоТноС Ρ‚ΡƒΡ‚ β€” Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° Π½Π° подпись Π² App Store. НадСюсь, с этим Π²Ρ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ΡΡŒ сами. Если Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ, я ΡƒΠΊΠ°ΠΆΡƒ Π½ΡƒΠΆΠ½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, Π½ΠΎ здСсь ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ тонкостях управлСния сСртификатами Apple, ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΠ½ΠΈ постоянно ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. Π­Ρ‚ΠΎΡ‚ пост ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Π΄Π΅Π»Ρƒ.

Мои прилоТСния

НуТно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² App Store Connect, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ вас Π±Ρ‹Π» ID для ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ .xcodebuild. ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΈ ID прилоТСния ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ сборки ΠΊΠΎΠ΄Π°, Ρ†Π΅Π½Ρ‹ ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ, Π° Π΅Ρ‰Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ TestFlight для распространСния тСстовых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ срСди ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. НС Π΄Π΅Π»Π°ΠΉΡ‚Π΅ общСдоступноС тСстированиС, Ρ…Π²Π°Ρ‚ΠΈΡ‚ ΠΈ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ³ΠΎ, Ссли Ρƒ вас малСнькая Π³Ρ€ΡƒΠΏΠΏΠ°, простая настройка ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΡ‚ Apple.

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠšΡ€ΠΎΠΌΠ΅ сСтапа прилоТСния Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΠΊΠ»ΡŽΡ‡ΠΈ распространСния ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ iOS, созданныС Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Certificates, Identifiers & Profiles (Π‘Π΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚Ρ‹, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ) Π² консоли Apple Developer. ВсС эти сСртификаты ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ, Π½ΡƒΠΆΠ½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ сСртификаты, ΠΈΠ½Π°Ρ‡Π΅ Π½Π° этапах cert ΠΈ sigh Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹

ΠšΡ€ΠΎΠΌΠ΅ этого простого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ способы Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ сСртификаты ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Ссли Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ ΠΈΠ½Π°Ρ‡Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, придСтся ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒΡΡ. Π‘Π°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ β€” Π²Π°ΠΌ понадобится конфигурация .xcodebuild, которая Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Π° связка ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ доступна Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ сборки для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΏΠΎΠ΄ Ρ‡ΡŒΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ€Π°Π½Π½Π΅Ρ€. Для Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ подписи ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ fastlane, ΠΈ Ссли Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈΠ»ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΡ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΎ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… подписях.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ cert ΠΈ sigh, Π½ΠΎ для Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ примСнСния, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ match.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° GitLab ΠΈ fastlane

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° CI Runner

Π‘ΠΎΠ±Ρ€Π°Π² всС эти Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ GitLab-Ρ€Π°Π½Π½Π΅Ρ€Π° Π½Π° устройствС MacOS. К Π½Π΅ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π΄Π΅Π»Π°Ρ‚ΡŒ прилоТСния iOS Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² MacOS. Но всС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ, ΠΈ Ссли ΠΆΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ΅ΠΊ Π² этой области, β€” слСдитС Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π²Ρ€ΠΎΠ΄Π΅ xcbuild ΠΈ isign, ΠΈ нашСй Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ gitlab-ce#57576.

ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ€Π°Π½Π½Π΅Ρ€ ΠΎΡ‡Π΅Π½ΡŒ просто. Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ инструкциям ΠΏΠΎ настройкС GitLab Runner Π² 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. ΠŸΡ€ΠΎΡΡ‚ΠΎ слСдуйтС инструкциям ΠΏΠΎ установкС ΠΈ запуску fastlane, особСнно Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΏΡ€ΠΎ Gemfile, вСдь Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ быстрый ΠΈ прСдсказуСмый запуск Ρ‡Π΅Ρ€Π΅Π· автоматичСский ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ CI.

Π’ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° запуститС эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

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 связаны с ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ подписания cert ΠΈ sigh. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ match ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅, внСситС измСнСния.

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

ВсС ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ! ΠœΡ‹ Π·Π°Π΄Π°Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ UTF-8 для fastlane, ΠΊΠ°ΠΊ ΠΈ трСбуСтся, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ 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

Π§Ρ‚ΠΎΠ±Ρ‹ cert ΠΈ sigh Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΈΠ½ΠΈΡ†Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ сСртификаты ΠΏΠΎ запросу, Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ FASTLANE_USER ΠΈ FASTLANE_PASSWORD. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ здСсь. Π­Ρ‚ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ подписания.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ всС это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΌΠΎΠ΅ΠΌ простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

НадСюсь, это Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΈ я Π²Π΄ΠΎΡ…Π½ΠΎΠ²ΠΈΠ» вас Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со сборками iOS Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ GitLab. Π’ΠΎΡ‚ Π΅Ρ‰Π΅ совСты ΠΏΠΎ CI для fastlane, Π½Π° всякий случай. ΠœΠΎΠΆΠ΅Ρ‚, Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ CI_BUILD_ID (для ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π½Ρ‹Ρ… сборок), Ρ‡Ρ‚ΠΎΠ±Ρ‹ автоматичСски ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ.

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° крутая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ fastlane β€” автоматичСскиС ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Ρ‹ для App Store, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‡Π΅Π½ΡŒ просто Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ.

РасскаТитС Π² коммСнтариях ΠΎ своСм ΠΎΠΏΡ‹Ρ‚Π΅ ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ идСями ΠΏΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ GitLab для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ iOS.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com