๐ŸŽ iOS & Swift

[CI/CD] fastlane ๋นŒ๋“œ ๋ฒˆํ˜ธ ์ฆ๊ฐ€ ์Šคํฌ๋ฆฝํŠธ

taeeekki 2022. 10. 4. 00:42

๊ทธ๋™์•ˆ ๋„ˆ๋ฌด ๋‚˜ํƒœํ•ด์กŒ๋˜ ๋‚˜ ์ž์‹ ์„ ๋ฐ˜์„ฑํ•˜๋ฉฐ ๋‹ค์‹œ ๊ณต๋ถ€๋„ ์—ด์‹ฌํžˆ ํ•˜๊ณ , ๊ธ€๋„ ๋‹ค์‹œ ๊พธ์ค€ํžˆ ์จ๋ณด๊ณ ์ž ํ•œ๋‹ค. ์˜ค๋Š˜์€ fastlane์„ ์ด์šฉํ•ด์„œ TestFlight์— ์ž๋™์œผ๋กœ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ธํŒ…์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ ํ”„๋กœ์ ํŠธ ๋‚ด ๋นŒ๋“œ ๋ฒˆํ˜ธ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ฃฐ์„ ๋‚ ์งœ + ๋นŒ๋“œ ํšŸ์ˆ˜(ex. 2210041, 2210042, ..., 22100499)๋กœ ํ•˜๊ณ  ์žˆ์–ด์„œ ์Šคํฌ๋ฆฝํŠธ์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ–ˆ๋‹ค. Ruby ๋ฌธ๋ฒ•์„ ์ž˜ ๋ชฐ๋ผ์„œ ์„œ์นญ์„ ํ•˜๋‹ค๊ฐ€ ๊ฐ์‚ฌํ•˜๊ฒŒ๋„ ์ž˜ ์“ฐ์—ฌ์ง„ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•˜์—ฌ ์ผ๋ถ€๋งŒ ์ˆ˜์ •ํ•ด์„œ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

 

ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‹ค๋ณด๋ฉด ์ˆ˜๋™์œผ๋กœ TestFilght์— ์—…๋กœ๋“œํ•˜๋Š” ์ž‘์—…์ด ๋„ˆ๋ฌด ๊ท€์ฐฎ์€ ์ž‘์—…์ด ๋œ๋‹ค. ๊ทœ๋ชจ๊ฐ€ ์ž‘์œผ๋ฉด ์ƒ๊ด€์ด ์—†๊ฒ ์ง€๋งŒ, ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ž๋™ํ™”๋ผ๋Š” ์ž‘์—…์ด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋งŒํผ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด ๋  ์ˆ˜ ๋ฐ–์— ์—†๊ฒ ๋‹ค๋ผ๊ณ  ๋А๋‚€๋‹ค. ์ดํ›„ ๊ธ€์€ fastlane์˜ ์†Œ๊ฐœ๋ถ€ํ„ฐ ํ™œ์šฉ ๋ฐฉ๋ฒ•๊นŒ์ง€ ์ฐจ๊ทผ์ฐจ๊ทผ ์ ์–ด๋ณผ ์˜ˆ์ •์ด๋‹ค. (๋น ๋ฅธ ์‹œ์ผ ๋‚ด์—...ใ…Žใ…Ž)

 

default_platform(:ios)

platform :ios do
  desc "Push a new beta build to TestFlight"
  lane :beta do
    increment_build_number(xcodeproj: "OOTD.xcodeproj", build_number: date_based_build_number)
    build_app(scheme: "OOTD")
    upload_to_testflight(skip_waiting_for_build_processing: true)
  end
end

require('date')

# ์˜ค๋Š˜ ๋‚ ์งœ
def today_formatted
  Date.today.strftime('%y%m%d')
end

# ๊ธฐ๋ณธ ๋‚ ์งœ ๊ธฐ๋ฐ˜ ๋นŒ๋“œ ๋„˜๋ฒ„
def default_build_number
  "#{today_formatted}1"
end

# ๋‚ ์งœ ๊ธฐ๋ฐ˜ ๋นŒ๋“œ ๋„˜๋ฒ„
def date_based_build_number
  current_build_number = get_build_number(xcodeproj: "OOTD.xcodeproj")

  build_date = current_build_number[0..5]
  build_version = current_build_number[6..-1]

  if (!build_date || !build_version) || (build_date.empty? || build_version.empty?)
    return default_build_number
  end

  begin
    build_date_object = Date.strptime(build_date, '%y%m%d')
  rescue
    return default_build_number
  end

  if build_date_object >= Date.today
    new_version = build_version.to_i + 1
    return "#{today_formatted}%d" % new_version
  end

  return default_build_number
end