Fastlane - Team-HGD/SniffMEET GitHub Wiki

image

๋„์ž… ๋ฐฐ๊ฒฝ

๋งค์ฃผ ๋ฐฐํฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

์ง€์†์ ์œผ๋กœ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ”„๋กœ๋•ํŠธ์— ํ†ตํ•ฉํ•˜๊ณ  ๋ฐฐํฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ Fastlane์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์˜€๋‹ค.

image 1

  • CI/CD๋ž€?

    ํŒŒ์ดํ”„๋ผ์ธ์€ ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์„ ์ถ”์ง„ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋ฉฐ, CI/CD๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

    ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•จ์œผ๋กœ์จ ์ธ์  ์˜ค๋ฅ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์†Œํ”„ํŠธ์›จ์–ด ์ถœ์‹œ ๋ฐฉ์‹์— ์ผ๊ด€๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ดํ”„๋ผ์ธ์— ํฌํ•จ๋œ ํˆด์—๋Š” ์ฝ”๋“œ ์ปดํŒŒ์ผ, ์œ ๋‹› ํ…Œ์ŠคํŠธ, ์ฝ”๋“œ ๋ถ„์„, ๋ณด์•ˆ, ๋ฐ”์ด๋„ˆ๋ฆฌ ์ƒ์„ฑ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

    https://www.redhat.com/ko/topics/devops/what-cicd-pipeline

๊ฐœ์š”

fastlane์€ ๊ฐœ๋ฐœ ์™ธ์— code signing, ๋ฆด๋ฆฌ์ฆˆ/๋ฐฐํƒ€ ๋ฐฐํฌ ๋“ฑ์˜ ์ง€๋ฃจํ•œ ์ž‘์—…์„ ์ž๋™ํ™” ํ•ด์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค.

์„ค๋ช…

ํ•ต์‹ฌ ๊ธฐ๋Šฅ

  • ๋นŒ๋“œ ์ž๋™ํ™”:
    • Fastlane์€ gym์„ ํ†ตํ•ด iOS ๋ฐ Android ์•ฑ์˜ ๋นŒ๋“œ๋ฅผ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ˆ˜๋™์œผ๋กœ ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋น ๋ฅด๊ณ  ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์•ฑ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐฐํฌ ์ž๋™ํ™”:
    • Fastlane์€ ์•ฑ์„ Apple App Store๋‚˜ Google Play Store์— ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. deliver์™€ supply ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ† ์–ด์— ์•ฑ์„ ์—…๋กœ๋“œํ•˜๊ณ  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ž๋™ํ™”:
    • scan์„ ์‚ฌ์šฉํ•ด iOS ๋ฐ Android ์•ฑ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Fastlane์€ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ์„œ ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•˜์—ฌ, ์˜ค๋ฅ˜๋‚˜ ๋ฌธ์ œ๋ฅผ ์‹ ์†ํžˆ ํŒŒ์•…ํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.
  • ์•ฑ ์„œ๋ช… ๋ฐ ์ธ์ฆ์„œ ๊ด€๋ฆฌ:
    • match๋Š” ์ฝ”๋“œ ์„œ๋ช… ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ, ์ธ์ฆ์„œ ๋ฐ ํ”„๋กœ๋น„์ €๋‹ ํ”„๋กœํ•„์„ ์•ˆ์ „ํ•˜๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐํฌ ์ „ํ›„ ์ž‘์—… ์ž๋™ํ™”:
    • Fastlane์€ ์•ฑ์„ ๋ฐฐํฌํ•˜๊ธฐ ์ „ํ›„์˜ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, snapshot์„ ํ†ตํ•ด iOS ์•ฑ์˜ ์Šคํฌ๋ฆฐ์ƒท์„ ์ž๋™์œผ๋กœ ์ฐ๊ฑฐ๋‚˜, sigh๋ฅผ ์‚ฌ์šฉํ•ด ์ž๋™์œผ๋กœ ์„œ๋ช…๋œ ํ”„๋กœ๋น„์ €๋‹ ํ”„๋กœํ•„์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CI/CD ํ†ตํ•ฉ:
    • Fastlane์€ ๋‹ค์–‘ํ•œ CI/CD ์‹œ์Šคํ…œ(Jenkins, GitLab CI, GitHub Actions ๋“ฑ)๊ณผ ์‰ฝ๊ฒŒ ํ†ตํ•ฉ๋˜์–ด, ์ž๋™ํ™”๋œ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์„ฑ

  1. Fastfile:
    • Fastfile์€ Fastlane์˜ ํ•ต์‹ฌ ์„ค์ • ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์—์„œ๋Š” ์ž๋™ํ™”ํ•˜๋ ค๋Š” ๋‹ค์–‘ํ•œ ์ž‘์—…(์˜ˆ: ๋นŒ๋“œ, ๋ฐฐํฌ, ํ…Œ์ŠคํŠธ ๋“ฑ)์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. Ruby ๊ธฐ๋ฐ˜์˜ DSL(Domain Specific Language)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ํ๋ฆ„์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•ฑ์„ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•œ ํ›„ ๋ฐฐํฌํ•˜๋Š” ์ผ๋ จ์˜ ์ž‘์—…์„ Fastfile์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. Action:
    • Fastlane์˜ ์ž‘์—… ๋‹จ์œ„๋กœ, ๊ฐ ์ž‘์—…์€ ํŠน์ •ํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, gym์€ ์•ฑ ๋นŒ๋“œ๋ฅผ, deliver๋Š” ์•ฑ ๋ฐฐํฌ๋ฅผ, scan์€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. Fastlane์€ ๋งŽ์€ ๋‚ด์žฅ ์•ก์…˜์„ ์ œ๊ณตํ•˜๋ฉฐ, ํ•„์š”์— ๋”ฐ๋ผ ์ปค์Šคํ…€ ์•ก์…˜์„ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ํ”Œ๋Ÿฌ๊ทธ์ธ:
    • Fastlane์€ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•ฑ ๋ฐฐํฌ ํ›„ ์ž๋™์œผ๋กœ ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜, ์•ฑ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๊ฐฑ์‹ ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. CI/CD ์‹œ์Šคํ…œ ํ†ตํ•ฉ:
    • Fastlane์€ ์—ฌ๋Ÿฌ CI/CD ๋„๊ตฌ์™€ ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, GitHub Actions, Jenkins, CircleCI์™€ ์—ฐ๋™ํ•˜์—ฌ ์ž๋™ํ™”๋œ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•

  1. ์„ค์น˜

    brew install fastlane ๋ช…๋ น์–ด๋กœ fastlane์„ ์„ค์น˜ํ•œ๋‹ค.

    gem install bundler ๋ช…๋ น์–ด๋กœ bundler๋„ ์„ค์น˜ํ•œ๋‹ค.

  2. fastlane ๊ธฐ๋ณธ ์„ค์ •ํ•˜๊ธฐ

    fastlane init ๋ช…๋ น์–ด ์ž…๋ ฅํ•œ๋‹ค.

    4๊ฐ€์ง€ ์„ค์ • ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์•ผํ•œ๋‹ค.

    1. ์ž๋™ํ™”๋œ ์Šคํฌ๋ฆฐ์ƒท ์˜ต์…˜ (์–ธ์–ด๋ณ„๋กœ ๋ฒˆ์—ญ๋œ ์•ฑ ๋ชจ์Šต ์บก์ฒ˜)
    2. ๋ฒ ํƒ€ ๋ฐฐํฌ ์ž๋™ํ™”
    3. ์•ฑ ๋ฐฐํฌ ์ž๋™ํ™” (์‹ฌ์‚ฌ ํฌํ•จ)
    4. ์‚ฌ์šฉ์ž ์ž„์˜ ์˜ต์…˜

    2, 3๋ฒˆ์˜ ๊ฒฝ์šฐ ์ธ์ฆํ•˜๊ธฐ - Apple ID์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ทธ๋ฆฌ๊ณ  ์ธ์ฆ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

  3. ์„ค์ • ํŒŒ์ผ

    - `fastlane/Appfile`
    - `fastlane/Fastfile`
    - `Gemfile`
    - `Gemfile.lock`
    
    • Appfile: ์•ฑ์˜ ๋ฒˆ๋“ค ID, app ID, team ID ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ์Œ
      • ํŒ€์›๋“ค์ด ์—ฌ๋Ÿฌ ์•„์ด๋””๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, fastlane์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ .env ๋ฅผ ์ด์šฉํ•˜๋ฉด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•˜์—ฌ ๊ด€๋ฆฌ๊ฐ€๋Šฅ
    • Fastfile: ๋ฐฐํฌ์™€ ๊ด€๋ จ๋œ ์ž๋™ํ™” ๋ช…๋ น์–ด๋“ค์ด ๋‹ด๊ฒจ์žˆ์Œ
      • ๋ฐฐํฌ ์ž๋™ํ™”, ๋นŒ๋“œ ๋ฒ„์ „ ์˜ฌ๋ฆฌ๊ธฐ, ์Šฌ๋ž™ ๋ฉ”์„ธ์ง€
    • Gemfile: gem ๋ชฉ๋ก์ด ๋‹ด๊ฒจ์žˆ์Œ
    • Gemfil.lock: ์˜์กด์„ฑ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ์Œ

    ์œ„ ํŒŒ์ผ์„ ํ†ตํ•ด์„œ ๋ฐฐํฌ๋ฅผ ์„ค์ •ํ•œ๋‹ค.

  4. ๋ฐฐํฌ fastlane [lane name] ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋ฐฐํฌํ•œ๋‹ค.

Ref.

https://gyuios.tistory.com/241

https://oliveyoung.tech/blog/2021-09-08/Automatic-Distribution-iOS-Test-App-To-Fastlane/