fastlane์ด ํฌํจ๋ GitLab์ด iOS ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ง, ์๋ช ๋ฐ App Store์ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ.
์ฐ๋ฆฌ๋ ์ต๊ทผ์
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ๊ฑธ๋ฆด ๊ฒ์
๋๋ค
Apple Store ๊ตฌ์ฑ์ ๋ํ ๋ช ๋ง๋
๋ชจ๋ ๊ฒ์ ํ๋๋ก ๋ฌถ์ผ๋ ค๋ฉด App Store ์ฑ, ๋ฐฐํฌ ์ธ์ฆ์ ๋ฐ ํ๋ก๋น์ ๋ ํ๋กํ์ด ํ์ํฉ๋๋ค.
์ฌ๊ธฐ์ ๊ฐ์ฅ ์ด๋ ค์ด ๊ฒ์ App Store์์ ์๋ช ๊ถํ์ ์ค์ ํ๋ ๊ฒ์ ๋๋ค. ๋๋ ๋น์ ์ด ์ด๊ฒ์ ์ค์ค๋ก ์์๋ผ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ฒ์ ์ค์ ๋ถ์ด๋ผ๋ฉด ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค. ํ์ง๋ง ์ฌ๊ธฐ์๋ Apple ์ธ์ฆ์ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ์ ๋ํด ์ธ๊ธํ์ง ์๊ฒ ์ต๋๋ค. ์ธ์ฆ์๋ ๋์์์ด ๋ณํํ๊ณ ์์ต๋๋ค. ์ด ๊ฒ์๋ฌผ์ ์์ํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๋์ ์ฑ๋ค
๊ตฌ์ฑ์ ์ํ ID๋ฅผ ๊ฐ์ง๋ ค๋ฉด App Store Connect์ ์ฑ์ด ํ์ํฉ๋๋ค. .xcodebuild
. ํ๋กํ๊ณผ ์ ํ๋ฆฌ์ผ์ด์
ID๋ ์ฌ์ฉ์์๊ฒ ํ
์คํธ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํ๊ธฐ ์ํ ์ฝ๋ ๋น๋, ๊ฐ๊ฒฉ ๋ฐ ๊ฐ์ฉ์ฑ, TestFlight ๊ตฌ์ฑ์ ๊ฒฐํฉํฉ๋๋ค. ๊ณต๊ฐ ํ
์คํธ๋ฅผ ์ํํ์ง ๋ง์ญ์์ค. ์๊ท๋ชจ ๊ทธ๋ฃน์ด ์๊ณ ์ค์ ์ด ์ฝ๊ณ Apple์ ์ถ๊ฐ ๊ถํ์ด ํ์ํ์ง ์์ ๊ฒฝ์ฐ ๋น๊ณต๊ฐ ํ
์คํธ๋ก ์ถฉ๋ถํฉ๋๋ค.
์ด๊ธฐํ ํ๋กํ
์ฑ ์ค์ ์ธ์๋ Apple ๊ฐ๋ฐ์ ์ฝ์์ ์ธ์ฆ์, ์๋ณ์ ๋ฐ ํ๋กํ ์น์ ์์ ์์ฑ๋ iOS ๋ฐฐํฌ ๋ฐ ๊ฐ๋ฐ ํค๊ฐ ํ์ํฉ๋๋ค. ์ด๋ฌํ ์ธ์ฆ์๋ ๋ชจ๋ ํ๋์ ํ๋ก๋น์ ๋ ํ๋กํ๋ก ๊ฒฐํฉ๋ ์ ์์ต๋๋ค.
์ธ์ฆ๋ฐ์ ์ฌ์ฉ์๋ ์ธ์ฆ์๋ฅผ ์์ฑํ ์ ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์.
๋ค๋ฅธ ์ต์
์ด ๊ฐ๋จํ ๋ฐฉ๋ฒ ์ธ์๋ ์ธ์ฆ์์ ํ๋กํ์ ๊ตฌ์ฑํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ค๋ฅด๊ฒ ์ผํ๋ค๋ฉด ์ ์ํด์ผ ํ ์๋ ์์ต๋๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๊ตฌ์ฑ์ด ํ์ํ๋ค๋ ๊ฒ์
๋๋ค. .xcodebuild
, ์ด๋ ํ์ํ ํ์ผ์ ๊ฐ๋ฆฌํค๋ฉฐ ์คํ๊ธฐ๊ฐ ์คํ๋๋ ์ด๋ฆ์ ์ฌ์ฉ์๋ฅผ ์ํด ๋น๋ ์ปดํจํฐ์์ ํค์ฒด์ธ์ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. ๋์งํธ ์๋ช
์๋ fastlane์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ, ๋ฌธ์ ๊ฐ ์๊ฑฐ๋ ์์ธํ ๋ด์ฉ์ ์๊ณ ์ถ์ผ๋ฉด ํด๋น ์ธ๋ถ ์ ๋ณด๋ฅผ ํ์ธํ์ธ์.
์ด ์์์๋ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
GitLab ๋ฐ fastlane ์ค๋น
CI Runner ์ค๋น
์ด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์์งํ ํ MacOS ์ฅ์น์์ GitLab ์คํ๊ธฐ ๊ตฌ์ฑ์ผ๋ก ์ด๋ํฉ๋๋ค. ์ํ๊น๊ฒ๋ iOS ์ฑ์ MacOS์์๋ง ๋ง๋ค ์ ์์ต๋๋ค. ํ์ง๋ง ๋ชจ๋ ๊ฒ์ ๋ณํ ์ ์์ต๋๋ค. ์ด ๋ถ์ผ์์ ์ง์ ์ด ์์ ๊ฒ์ผ๋ก ์์๋๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ก์ ํธ๋ฅผ ์ฃผ์ํ์ธ์.
๋ฌ๋๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ํ์ฌ๋ฅผ ๋ฐ๋ฅด์ญ์์ค
๋ฉ๋ชจ. ์คํ์๋ ์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. 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
Xcode๊ฐ ๋น๋ํ๋ ๋ฐ ํ์ํ ํค์ ์ก์ธ์คํ๋ ค๋ฉด ์ด ํธ์คํธ์์ Apple ํค์ฒด์ธ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ํ ์คํธํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋น๋๋ฅผ ์คํํ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธํ์ฌ ์๋์ผ๋ก ๋น๋ํด ๋ณด๋ ๊ฒ์ ๋๋ค. ์์คํ ์์ ํค์ฒด์ธ ์ก์ธ์ค๋ฅผ ์์ฒญํ๋ฉด CI๊ฐ ์๋ํ๋๋ก ํญ์ ํ์ฉ์ ์ ํํฉ๋๋ค. ๋ ์ด์ ํค์ฒด์ธ์ ์๊ตฌํ์ง ์๋์ง ํ์ธํ๊ธฐ ์ํด ์ฒ์ ๋ช ๊ฐ์ ํ์ดํ๋ผ์ธ์ ๋ค์ด๊ฐ์ ์ดํด๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ฌธ์ ๋ Apple์ด ์๋ ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ฝ๊ฒ ๋ง๋ค์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋จ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ๋ ๊ฒ์ ๋๋ค.
ํจ์ค ํธ๋ ์ธ ์ด๊ธฐํ
ํ๋ก์ ํธ์์ 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
App Store์์ ์ธ์ฆํ๊ณ TestFlight์ ์
๋ก๋ํ๋ ค๋ฉด fastlane์ ๋ํ ์ธ์ฆ์ด ํ์ํฉ๋๋ค. ์ด๋ฅผ ์ํํ๋ ค๋ฉด CI์์ ์ฌ์ฉํ ์ ํ๋ฆฌ์ผ์ด์
์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ฑํ์ญ์์ค. ์ธ๋ถ
XNUMX๋จ๊ณ ์ธ์ฆ์ด ์๋ ๊ฒฝ์ฐ ๋ณ์๋ฅผ ์์ฑํ์ธ์. FASTLANE_SESSION
(๊ฑฐ๊ธฐ์ ์ง์นจ์ด ์์ต๋๋ค).
FASTLANE_USER
ะธ FASTLANE_PASSWORD
๊ทธ FASTLANE_USER
ะธ FASTLANE_PASSWORD
. ์ธ๋ถ
๊ฒฐ๋ก ์ ์ผ๋ก
๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณผ ์ ์์ต๋๋ค.
์ด๊ฒ์ด GitLab ํ๋ก์ ํธ์์ iOS ๋น๋ ์์
์ ๋์์ด ๋์๊ณ ์๊ฐ์ ์ฃผ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ฌ๊ธฐ ๋ ์์ด์ CI_BUILD_ID
(์ฆ๋ถ ๋น๋์ ๊ฒฝ์ฐ)
fastlane์ ๋ ๋ค๋ฅธ ๋ฉ์ง ๊ธฐ๋ฅ์
๊ทํ์ ๊ฒฝํ์ ๋๊ธ๋ก ์๋ ค์ฃผ๊ณ iOS ์ฑ ๊ฐ๋ฐ์ ์ํ GitLab ๊ฐ์ ์ ์ํ ์์ด๋์ด๋ฅผ ๊ณต์ ํด ์ฃผ์ธ์.
์ถ์ฒ : habr.com