[Flutter]fastlane 구축하기

서론

최근에(라고 쓰고 한달 전) 자동 배포라는 것이 대체 무엇인가… 해서 한번 해봐야겠다! 라는 마음이 들었다. 자동배포자동배포… 그게 대체 뭐지?

내가 내린 정의는 앱을 각 스토어에 배포하기 위해선, 일련의 과정들이 있는데 그 과정들을 명령어 한 번으로 처리해주는 것이라고 생각한다. 한번 구축해놓기만 하면, 앱을 배포하기 위해 기다리던 시간을 아끼고 더 효율적으로 시간을 활용 할 수 있다!

그래서 처음에는 서버에서 사용하는 githubAction을 활용해서 테스트 앱을 배포하고 있는 firebase distribute에 배포할 수 있도록 구축하려고 시도 했다. 그러나 많이 없는 자료와 한번 실행 시킬 때마다 10분씩 넘어가는 실행시간이 오히려 로컬에서 후다닥 만들어서 업로드하면 훨씬 시간도 적게 걸리고, 편했기 때문에 의도와 맞지 않는다고 생각했다. 특히 apk를 만들어서 firebase distribute에 올리는 과정에서 자꾸 apk 경로를 못찾아서😢 굉장히 짜증이 났다. 꼭 서버와 같은 서비스를 쓸 필요는 없다고 생각하고 CD구축 방법을 찾아보니 fastlane이 편하고 쉽다더라~! 그래서 fastlane으로 CD 구축한 경험을 이야기해보려고 한다~

fastlane 구축하기

  1. firebase CLI 설치

여기선 firebas가 다 세팅 되어 있다는 걸 가정하고, 이후에 해야할 행동만 작성하겠다! 먼저 firebase CLI를 설치한다.

//firebase cli 설치 명령어
$ curl -sL https://firebase.tools | bash
//firebase 로그인
$ firebase login
//firebase cli 인증
$ firebase login:ci
  1. fastlane을 설치한다
  2. IOS fastlane 구축
    1. 터미널에서 flutter 프로젝트 폴더의 ios 폴더에 진입한다.
    2. fastlane을 초기화 한다
     $ fastlane init
    

    c. firebase distribute에 올릴 명령어를 Fastfile에 작성한다.

     default_platform(:ios)
     buildDir = "./build"
        
     desc "Firebase QA용 BETA 빌드 "
     lane :iosDistribute do
        
       # 코코아팟 업데이트
       cocoapods(
         repo_update: true,
         use_bundle_exec: false
       )
        
       build_app(
         scheme: "dev",
         output_directory: buildDir,
         export_method:"ad-hoc",
         # uncomment this for detailed build error
         #xcargs: "-verbose"
       )
        
       firebase_app_distribution(
           app: "firebase 앱 세팅에 있는 ios 앱 app id를 작성",
     			//테스터도 기본적으로 세팅하고 싶다면 firebase distribute에서 테스터 그룹을 만들거나 한명씩 추가 
           groups: "iosTester",
           ipa_path: buildDir + "/Runner.ipa",
     			//이 파일에서 릴리즈노트를 작성할 경로 및 txt
           release_notes_file: "../release_notes.txt"
       )
     	end
     end
    

    d. 터미널을 ios 폴더에 위치 시킨 후 실행 명령어 작성하면 끝!

     $ fastlane iosDistribute
    
  3. android fastlane 구축
    1. 터미널에서 flutter 프로젝트 폴더의 android 폴더에 진입
    2. fastlane을 초기화 한다
     $ fastlane init
    

    c. firebase distribute에 올릴 명령어 작성!

     default_platform(:android)
        
     platform :android do
       desc "Submit a new DevRelease Build to Crashlytics Beta"
       lane :androidDistribute do
     		//flavor 설정 값에 따라 실행되는 gradle 다르다 
         gradle(task: "clean assembleDevRelease")
         firebase_app_distribution(
                 app: "firebase disrtibute에 올라갈 android app id",
                 groups: 'androidTester',
                 apk_path: '../build/app/outputs/flutter-apk/app-dev-release.apk',
                 release_notes_file: "../release_notes.txt"
         )
        
       end
     end
    

    d. 터미널을 android 폴더에 위치 시킨 후 실행 명령어!

     $ fastlane androidDistribute
    

    # 후기

    githubAction으로 끙끙 거리다가 fastlane으로 만들어 놓으니 금방 만들어내서 솔직히 좀 허탈했다. 그래도 잘 동작하고 실제로 배포하는데 시간이 많이 줄어서(ios가 배포하는게 영 귀찮았는데, 정말 간편해졌다!) 보람도 있다. 아직 실배포는 수동배포로 진행하는데, 이쪽도 구축 해놓으면 많이 편해지겠지!

    +) ios 프로비저닝 프로필에 새로운 ios 기기를 등록하는 이슈가 있었다. 그냥 가볍게(?) apple developer에 기기를 등록하고 배포를 했는데, 새로 등록한 분 기기에 설치가 안됐다!! 계속 기기 등록이 됨 상태만 뜨고, 개발자가 업데이트를 해주면 다운받을 수 있다고만 떠서 이게 대체 뭔가 검색을 해도 뚜렷한 답이 안나왔다 😡

    해결 방법은 기존에 받아져 있던 프로비저닝 프로필을 지우고 다시 만들면 되는 것이었다.

    xcode 에서 runner - signing&capabilities - automatically manage signing 을 전부 끄고 /Users/user 이름/Library/MobileDevice/Provisioning Profiles 에서 생성된 .mobileprovision 을 전부 삭제한다. 그리고 다시 xcode로 돌아와서 automatically manage signing 를 다시 켜주면 apple developer에 등록된 기기들을 다시 받아와서 새로운 파일을 만든다! 이 상태에서 다시 ios 앱을 배포해주면, 앱이 다운 받아진다!

    별거 아닌거 였지만, ios 환경에 대한 개념이 부족하다보니 뭐가 문제인지 포착하는게 항상 어렵게 느껴진다😢 그래도 좋은 경험이었다!

카테고리:

업데이트:

댓글남기기