Fastlane - Team-HGD/SniffMEET GitHub Wiki
๋์ ๋ฐฐ๊ฒฝ
๋งค์ฃผ ๋ฐฐํฌ๋ฅผ ์ํํด์ผ ํ๋ค.
์ง์์ ์ผ๋ก ์ฝ๋์ ๋ณ๊ฒฝ์ฌํญ์ ํ๋ก๋ํธ์ ํตํฉํ๊ณ ๋ฐฐํฌํด์ผ ํ๋ฏ๋ก ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ๊ธฐ ์ํ์ฌ Fastlane์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์๋ค.
-
CI/CD๋?
ํ์ดํ๋ผ์ธ์ ์ฝ๋๋ฅผ ๋น๋, ํ ์คํธ, ๋ฐฐํฌํ๋ ๊ณผ์ ์ ๊ฑฐ์ณ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ถ์งํ๋ ํ๋ก์ธ์ค์ด๋ฉฐ, CI/CD๋ผ๊ณ ๋ ํฉ๋๋ค.
ํ๋ก์ธ์ค๋ฅผ ์๋ํํจ์ผ๋ก์จ ์ธ์ ์ค๋ฅ๋ฅผ ์ต์ํํ๊ณ ์ํํธ์จ์ด ์ถ์ ๋ฐฉ์์ ์ผ๊ด๋ ํ๋ก์ธ์ค๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ํ์ดํ๋ผ์ธ์ ํฌํจ๋ ํด์๋ ์ฝ๋ ์ปดํ์ผ, ์ ๋ ํ ์คํธ, ์ฝ๋ ๋ถ์, ๋ณด์, ๋ฐ์ด๋๋ฆฌ ์์ฑ ๋ฑ์ด ์์ต๋๋ค.
๊ฐ์
fastlane์ ๊ฐ๋ฐ ์ธ์ code signing, ๋ฆด๋ฆฌ์ฆ/๋ฐฐํ ๋ฐฐํฌ ๋ฑ์ ์ง๋ฃจํ ์์ ์ ์๋ํ ํด์ฃผ๋ ํ๋ ์์ํฌ๋ค.
์ค๋ช
ํต์ฌ ๊ธฐ๋ฅ
- ๋น๋ ์๋ํ:
- Fastlane์
gym
์ ํตํด iOS ๋ฐ Android ์ฑ์ ๋น๋๋ฅผ ์๋ํํฉ๋๋ค. ์ด๋ฅผ ํตํด ์๋์ผ๋ก ๋น๋๋ฅผ ์งํํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋น ๋ฅด๊ณ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ฑ์ ๋น๋ํ ์ ์์ต๋๋ค.
- Fastlane์
- ๋ฐฐํฌ ์๋ํ:
- Fastlane์ ์ฑ์ Apple App Store๋ Google Play Store์ ์๋์ผ๋ก ๋ฐฐํฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
deliver
์supply
๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์คํ ์ด์ ์ฑ์ ์ ๋ก๋ํ๊ณ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- Fastlane์ ์ฑ์ Apple App Store๋ Google Play Store์ ์๋์ผ๋ก ๋ฐฐํฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ํ
์คํธ ์๋ํ:
scan
์ ์ฌ์ฉํด iOS ๋ฐ Android ์ฑ์ ํ ์คํธ๋ฅผ ์๋ํํ ์ ์์ต๋๋ค. Fastlane์ ์๋ํ๋ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ์ ํํ๋ก ์ ๊ณตํ์ฌ, ์ค๋ฅ๋ ๋ฌธ์ ๋ฅผ ์ ์ํ ํ์ ํ๊ณ ์์ ํ ์ ์๋๋ก ๋์์ค๋๋ค.
- ์ฑ ์๋ช
๋ฐ ์ธ์ฆ์ ๊ด๋ฆฌ:
match
๋ ์ฝ๋ ์๋ช ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ, ์ธ์ฆ์ ๋ฐ ํ๋ก๋น์ ๋ ํ๋กํ์ ์์ ํ๊ณ ๊ฐํธํ๊ฒ ๊ด๋ฆฌํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
- ๋ฐฐํฌ ์ ํ ์์
์๋ํ:
- Fastlane์ ์ฑ์ ๋ฐฐํฌํ๊ธฐ ์ ํ์ ์์
์ ์๋ํํ๋ ์ฌ๋ฌ ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด,
snapshot
์ ํตํด iOS ์ฑ์ ์คํฌ๋ฆฐ์ท์ ์๋์ผ๋ก ์ฐ๊ฑฐ๋,sigh
๋ฅผ ์ฌ์ฉํด ์๋์ผ๋ก ์๋ช ๋ ํ๋ก๋น์ ๋ ํ๋กํ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
- Fastlane์ ์ฑ์ ๋ฐฐํฌํ๊ธฐ ์ ํ์ ์์
์ ์๋ํํ๋ ์ฌ๋ฌ ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด,
- CI/CD ํตํฉ:
- Fastlane์ ๋ค์ํ CI/CD ์์คํ (Jenkins, GitLab CI, GitHub Actions ๋ฑ)๊ณผ ์ฝ๊ฒ ํตํฉ๋์ด, ์๋ํ๋ ๋น๋ ๋ฐ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
๊ตฌ์ฑ
- Fastfile:
- Fastfile์ Fastlane์ ํต์ฌ ์ค์ ํ์ผ์ ๋๋ค. ์ด ํ์ผ์์๋ ์๋ํํ๋ ค๋ ๋ค์ํ ์์ (์: ๋น๋, ๋ฐฐํฌ, ํ ์คํธ ๋ฑ)์ ์ ์ํฉ๋๋ค. Ruby ๊ธฐ๋ฐ์ DSL(Domain Specific Language)์ ์ฌ์ฉํ์ฌ ์์ ํ๋ฆ์ ๊ตฌ์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฑ์ ๋น๋ํ๊ณ ํ ์คํธํ ํ ๋ฐฐํฌํ๋ ์ผ๋ จ์ ์์ ์ Fastfile์ ์ค์ ํ ์ ์์ต๋๋ค.
- Action:
- Fastlane์ ์์
๋จ์๋ก, ๊ฐ ์์
์ ํน์ ํ ๊ธฐ๋ฅ์ ์ํํ๋ ๋จ์์
๋๋ค. ์๋ฅผ ๋ค์ด,
gym
์ ์ฑ ๋น๋๋ฅผ,deliver
๋ ์ฑ ๋ฐฐํฌ๋ฅผ,scan
์ ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค. Fastlane์ ๋ง์ ๋ด์ฅ ์ก์ ์ ์ ๊ณตํ๋ฉฐ, ํ์์ ๋ฐ๋ผ ์ปค์คํ ์ก์ ์ ์์ฑํ ์๋ ์์ต๋๋ค.
- Fastlane์ ์์
๋จ์๋ก, ๊ฐ ์์
์ ํน์ ํ ๊ธฐ๋ฅ์ ์ํํ๋ ๋จ์์
๋๋ค. ์๋ฅผ ๋ค์ด,
- ํ๋ฌ๊ทธ์ธ:
- Fastlane์ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ ์ธ์๋ ๋ค์ํ ํ๋ฌ๊ทธ์ธ์ ํตํด ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฑ ๋ฐฐํฌ ํ ์๋์ผ๋ก ๋ฆด๋ฆฌ์ฆ ๋ ธํธ๋ฅผ ์์ฑํ๊ฑฐ๋, ์ฑ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๊ฐฑ์ ํ๋ ํ๋ฌ๊ทธ์ธ ๋ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- CI/CD ์์คํ
ํตํฉ:
- Fastlane์ ์ฌ๋ฌ CI/CD ๋๊ตฌ์ ์ฝ๊ฒ ํตํฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, GitHub Actions, Jenkins, CircleCI์ ์ฐ๋ํ์ฌ ์๋ํ๋ ๋น๋ ๋ฐ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
์ฌ์ฉ๋ฒ
-
์ค์น
brew install fastlane
๋ช ๋ น์ด๋ก fastlane์ ์ค์นํ๋ค.gem install bundler
๋ช ๋ น์ด๋ก bundler๋ ์ค์นํ๋ค. -
fastlane ๊ธฐ๋ณธ ์ค์ ํ๊ธฐ
fastlane init
๋ช ๋ น์ด ์ ๋ ฅํ๋ค.4๊ฐ์ง ์ค์ ์ค ํ๋๋ฅผ ์ ํํด์ผํ๋ค.
- ์๋ํ๋ ์คํฌ๋ฆฐ์ท ์ต์ (์ธ์ด๋ณ๋ก ๋ฒ์ญ๋ ์ฑ ๋ชจ์ต ์บก์ฒ)
- ๋ฒ ํ ๋ฐฐํฌ ์๋ํ
- ์ฑ ๋ฐฐํฌ ์๋ํ (์ฌ์ฌ ํฌํจ)
- ์ฌ์ฉ์ ์์ ์ต์
2, 3๋ฒ์ ๊ฒฝ์ฐ ์ธ์ฆํ๊ธฐ - Apple ID์ ๋น๋ฐ๋ฒํธ ๊ทธ๋ฆฌ๊ณ ์ธ์ฆ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ค.
-
์ค์ ํ์ผ
- `fastlane/Appfile` - `fastlane/Fastfile` - `Gemfile` - `Gemfile.lock`
- Appfile: ์ฑ์ ๋ฒ๋ค ID, app ID, team ID ์ ๋ณด๊ฐ ๋ด๊ฒจ์์
- ํ์๋ค์ด ์ฌ๋ฌ ์์ด๋๋ฅผ ์ฌ์ฉํ ๋, fastlane์์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค
.env
๋ฅผ ์ด์ฉํ๋ฉด ํ๊ฒฝ ๋ณ์๋ก ์ค์ ํ์ฌ ๊ด๋ฆฌ๊ฐ๋ฅ
- ํ์๋ค์ด ์ฌ๋ฌ ์์ด๋๋ฅผ ์ฌ์ฉํ ๋, fastlane์์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค
- Fastfile: ๋ฐฐํฌ์ ๊ด๋ จ๋ ์๋ํ ๋ช
๋ น์ด๋ค์ด ๋ด๊ฒจ์์
- ๋ฐฐํฌ ์๋ํ, ๋น๋ ๋ฒ์ ์ฌ๋ฆฌ๊ธฐ, ์ฌ๋ ๋ฉ์ธ์ง
- Gemfile: gem ๋ชฉ๋ก์ด ๋ด๊ฒจ์์
- Gemfil.lock: ์์กด์ฑ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ํ ์ ๋ณด๊ฐ ๋ด๊ฒจ์์
์ ํ์ผ์ ํตํด์ ๋ฐฐํฌ๋ฅผ ์ค์ ํ๋ค.
- Appfile: ์ฑ์ ๋ฒ๋ค ID, app ID, team ID ์ ๋ณด๊ฐ ๋ด๊ฒจ์์
-
๋ฐฐํฌ
fastlane [lane name]
๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ๋ฐฐํฌํ๋ค.
Ref.
https://gyuios.tistory.com/241
https://oliveyoung.tech/blog/2021-09-08/Automatic-Distribution-iOS-Test-App-To-Fastlane/