뚝딱뚝딱 모바일

[Flutter] Fastlane으로 배포 자동화를 해보자 (2) 본문

Flutter 지식

[Flutter] Fastlane으로 배포 자동화를 해보자 (2)

규석 2023. 11. 10. 13:49
 

[Flutter] Fastlane으로 배포 자동화를 해보자 (1)

안녕하세요...! 오늘은 Fastlane을 알아보겠습니다. https://docs.fastlane.tools/ fastlane docs fastlane fastlane is the easiest way to automate beta deployments and releases for your iOS and Android apps. 🚀 It handles all tedious tasks, lik

nkstar-ios.tistory.com

 

이어서, iOS 설정에 대해서도 알아보겠습니다.


똑같이 Flutter project 내부의 iOS 폴더로 이동해서 init 해주겠습니다.

fastlane init

어떤 작업을 목적으로 fastlane을 사용할 것이냐 하는데, 본인 목적에 맞게 하시면 됩니다.

전 TestFlight까지 업로드를 목적으로 사용하기에 TestFlight를 선택하였습니다.

Apple Developer 계정도 로그인하시면, 기본 설정은 끝났습니다.

 

Android에서의 Secret Json Key 과정이 없으니 매우 간단해 보입니다.

일단, iOS의 Fastfile도 수정해 봅시다.

(이 부분은 지극히 개인적인 내용이고, 본인 입맛에 맞게 작성하시면 됩니다. Docs에 잘 정리되어 있으니, 참고하시면 됩니다.)

 

default_platform(:ios)

platform :ios do
  desc "Push a new beta build to TestFlight"
  lane :beta do
    pubspec = YAML.load_file("../../pubspec.yaml")
    version = pubspec["version"].split('+')
    version_number = version[0]
    build_number = version[1]
     
    increment_version_number(
	version_number: version_number,
	xcodeproj: "Runner.xcodeproj"
    )
    increment_build_number(
	build_number: build_number,
	xcodeproj: "Runner.xcodeproj"
    )

    match(type: "appstore")
    build_app(workspace: "Runner.xcworkspace", scheme: "Runner")
    pilot(
	api_key_path: "fastlane/AppStoreConnect.json",
	skip_waiting_for_build_processing: true
    )
  end
end

Android처럼 pubspec.yaml의 version과 build number 값을 가져와 변경시켜 주었고, match를 통해서 인증서 관리를 해주었습니다.

match에 관한 내용은 여기를 참고하였습니다. build_app 함수 이후 pilot을 활용해 testflight로 업로드하여 주었습니다.

 

앗 여기도 json이 있는데요...? 네 만들러 가봅시다. Android보다 훨씬 쉽습니다.

App Store Connect -> 사용자 및 액세스 -> 키

App Store Connect로 들어가 사용자 및 액세스 -> 키 탭으로 이동해 줍니다.

App Store Connect API를 클릭해 API 키를 만들어 줍니다. 만든 후 p8파일을 다운로드하여, 안전한 곳에 보관해 둡니다.

그리고 json 파일을 하나 생성해 작성해 줍시다. 

{
  "key_id": "(API Key ID)",
  "issuer_id": "(Issuer ID)",
  "key": "(p8파일의 키 값)",
  "duration": 1200, # 옵션값, 최대 1200
  "in_house": false # 옵션값, 하지만 match/sigh를 사용할 때는 필수값
}

 

이 json 파일 또한 보관해 두고 pilot 함수에 경로를 연결해 주시면 됩니다. 

p8파일을 열었을 때, 보이는 모양처럼 개행이 잘 되어야 합니다. 그래서 각 개행 부분에 \n을 추가하여 주시면 됩니다. 그렇지 않으면 오류가 발생합니다!

 

이제 Fastfile을 저장하고 fastlane beta를 실행시켜 준다면...

두둥

iOS는 역시 시간이 좀 걸리는군요... App Store Connect에 들어가 보면 새로운 버전으로 업로드된 Testflight를 보실 수 있습니다!


이렇게 Flutter로 Fastlane 적용하는 법을 알아보았습니다.

이제 업데이트할 때마다 앱 번들 만들고... Xcode에서 아카이브 올리고... 그러다가 버전 꼬이고... 할 일 없이 간단하게 올릴 수 있게 되었습니다!

이렇게만 사용하셔도 되고, Github Action이나 Zenkins 같은 툴을 활용해 특정 트리거를 통해 바로 업데이트되도록 하실 수도 있습니다. 전 작은 프로젝트여서 아직은 필요성을 못 느꼈고, zshrc 파일에 명령어를 하나 만들어 두 fastlane 명령을 하나로 묶어서 사용하였습니다.

function app_update() {
    cd /APP_PROJECT_PATH/ios && fastlane beta
    cd /APP_PROJECT PATH/android && fastlane deploy
}

alias app_update="app_update"

source ~/.zshrc 이후 app_update 명령어를 터미널에 치면 잘 실행되는 걸 보실 수 있습니다!