본문 바로가기

개발자의 삶

FastLane을 도입해봅시다.

728x90
반응형

FastLane을 도입해봅시다.

먼저 이 문서는 Mac 그리고 iOS 개발환경 기반으로 작성됐습니다.

참고 http://docs.fastlane.tools

1. 설치

Homebrew가 깔렸다고 가정하고 터미널에서

brew install fastlane  를 입력해줍니다.

도중 권한이 없다 같은 에러가 나오면 명령어 제일 앞에 sudo 를 붙여주면 됩니다.

⚠️ 프로젝트에 fastfile이 포함 됐다면 아래 내용은 무시하고 진행해주세요! ⚠️


설치가 완료됐으면 fastlane을 설치할 프로젝트로 이동해

fastlane init 을 갈겨줍니다.

그럼 어떤 fastlane을 깔 것인지 선택하라고 나오는데 “엇 나는 다 하고싶은데...” 하고 당황하지마세요. 나중에 세팅할 수 있습니다.

그냥 4 를 입력 후 넘깁니다.

2번이나 3번을 누르면 Apple ID를 물어볼 텐데요. 앱스토어에 배포하려면 앱커넥트 아이디를 연결해야하기 때문입니다.

4를 선택하라고 한 이유는 이미 저희 git에 이러한 세팅이 올라가 있기 때문에 굳이 할 필요가 없기 때문입니다.

2. 명령어 만들기 (Fastfile)

기본 설명

이제 프로젝트에서 Fastfile을 찾아 열어줍니다. fastlane은 이 fastfile에 정의한 명령어 기반으로 일을 수행하는데요. fastfile은 Ruby 기반이라 Ruby를 안다면 편집이 더 수월할 겁니다. 그치만 저는 잘 몰라서 감으로 대충 때려박고 있습니다.

default_platform(:ios)

platform :ios do
  desc "Generate new localized screenshots"
  lane :screenshots do
    capture_screenshots(workspace: "a.xcworkspace", scheme: "scheme")
    upload_to_app_store(skip_binary_upload: true, skip_metadata: true)
  end
end

이게 fastlane init 후에 1을 입력해 만들어진 최초의 형식이었습니다.

defualt_platform은 잘 모르겠고

desc는 아래 명령어가 어떤일을 하는지에 대한 설명을 적는 것 같습니다.

lane :screenshots 은 fastlane 명령어를 어떻게 입력할지에 대한 내용입니다.

위에 lane :호출할 명령어 형식이고 위의 명령어를 실행하기 위해선  fastlane screenshots 라고 입력하면 됩니다.

capture_screenshots, upload_to_app_store 은 이름 그대로 스크린을 캡쳐하는 것이고 앱스토어에 업로드하는건데 아직 앱스토어 업로드 명령어는 제대로 개발 및 테스트하지 않았습니다.

Firebase App Distribution에 테스트 버전 배포하기

우리 회사의 크루분들이 너무 많아졌습니다. 이전까지는 일일히 디바이스를 받아 넣어주었고(엄청난 병목) 이제는 Firebase App Distribution을 이용하기로 했습니다. 그치만 이건 또 Archive를 해줘야하고 ipa를 따서 firebase console에 들어가 올려주어야합니다(귀찮).

원하는 바는 간단합니다.

  1. 현재 개발환경에서 빌드 진행
  2. Archive
  3. Firebase App Distribution 에 배포.
  4. 배포 완료되면 슬랙에 노티하기.

자 이제 이 귀찮은 단순노동의 전쟁을 끝내러 가보실까요?

⚠️  Pluginfile에 gem 'fastlane-plugin-firebase_app_distribution’이 포함 됐다면 아래 내용은 무시하고 진행해주세요! ⚠️


  1. 플러그인 연결
    1. fastlane add_plugin firebase_app_distribution 을 입력해 플러그인을 연결합니다.
  2. Firebase 연결
    1. fastlane run firebase_app_distribution_login 을 입력합니다.
    2. URL이 나오는데 웹브라우저를 열어 URL에 들어갑니다.
    3. 지시대로 로그인을 진행하면 브라우저에 코드가 나오는데 그걸 터미널에 입력합니다.
    4. 터미널에 refresh token이 나올겁니다. 그게 firebase_cli_token인데 따로 저장해두세요!

자, firebase_app_distribution 플러그인 연결을 완료했습니다. 이제 해당 테스트 배포 명령을 작성해야겠죠?

module Constant
# 프로젝트 이름
APP_IDENTIFIERS = ["App Bundle Identifier"]

# 앱 올리고 나서 배포할 때 slack hook
SLACK_URL = "슬랙 webhook url"
SLACK_ICON = "슬랙 아이콘 주소"

# 파이어베이스 배포에 올릴 앱
FIREBASE_APP_ID = "1:123456789:ios:abcdefg로 구성된 APP ID"
FIREBASE_TOKEN = "파베 로그인하고 받은 refresh Token"
end

platform :ios do
  desc "Generate new localized screenshots"
  lane :screenshots do
    capture_screenshots(workspace: "a.xcworkspace", scheme: "scheme")
    upload_to_app_store(skip_binary_upload: true, skip_metadata: true)
  end

  desc "파이어베이스 테스트버전 배포"
	lane :test do
	update_code_signing_settings(use_automatic_signing: true)
    build_app(
        scheme: "scheme",
        workspace: "a.xcworkspace",
        configuration: "Debug",
        clean: true,
        silent: true,
        export_method:"ad-hoc",
        export_options: {
            iCloudContainerEnvironment: 'Development'
        }
    )
            
    firebase_app_distribution(
        app: Constant::FIREBASE_APP_ID,
        firebase_cli_token: Constant::FIREBASE_TOKEN,
        groups: "team1", #ex "team1, team2, team3",
        release_notes: "자동배포 테스트입니다.",
        debug: true
    )
    slack(
        username: “슬랙봇_이름”,
        icon_url: Constant::SLACK_ICON,
        message: "테스트버전 배포완료",
        channel: “슬랙채널”,
        slack_url: Constant::SLACK_URL
    )
end

module Constant 을 참고하여 자주 쓰는 값을 구성하면 됩니다.

module 모듈명

변수명 = 값

end로 마무리하고

쓸때는 모듈명::변수명 으로 사용하시면 됩니다.

밑으로 내려와 desc "파이어베이스 테스트버전 배포" 부터가 새로 추가된 코드입니다.

lane :test 로 정의했듯이 fastlane test 라는 명령어로 쉽게 테스트 버전 배포가 가능해졌습니다.

이제  test라는 명령어를 부르면 무슨 일을 하는지 한줄 한줄 보겠습니다.

  1. 사이닝
  2. update_code_signing_settings(use_automatic_signing: true) 을 가장 먼저 실행하는데요. 현재는 iOS 에서 signing을 따로 관리하지 않고 auto로 관리하고 있는데update_code_signing_settings  use_automatic_signing 디폴트가 false기 때문에 true 를 넣어줍니다.
  3. 빌드
  4. build_app 은 말그대로 앱을 빌드하는 명령어입니다. 다양한 옵션이있는데 직감적으로 아실거라 믿고 주의할 사항만 설명드리면 export_method:"ad-hoc"  ad-hoc으로 하였을 경우 export_options의 iCloudContainerEnvironment를 Development 혹은 Production으로 지정해주셔야한다는 겁니다.
  5. 배포groups: "team1", #ex "team1, team2, team3", 이와 같이 특정 그룹을 지정해 줄 수있습니다.
  6. firebase_app_distribution 파이어베이스에 배포
728x90
반응형