fastlane을 왜 쓸까?

앱개발을 하면서 배포를 해본적이 있다면 인증서를 관리하는데 시간을 잡아먹힌 경험이 있을 것이다. 그리고 보통 앱을 만들고나면 시간이 지난 뒤 새로운 앱을 만들때 이전의 설정을 까먹는다. 기록을 잘 해놨다면 다행이지만 그렇지 않은 경우에는 또 시간이 한 세월 걸릴 것이다. fastlane은 한번 설정해 놓으면 다음 프로젝트에서 이를 차용하기도 쉽고, 여러 사람들과 인증서를 처리하는 과정도 있다.

 

그 뿐만 아니라 버전 올리는 것 부터 시작해서 TestFlight upload, 앱 아이콘에 몇 버전인지 적어주는 세세한 기능까지 터미널에서 명령어 한번만 쓰면 자동으로 진행된다. 수많은 기능 및 플러그인이 있고 사실상 프로젝트 관리에 있어서 한번 사용을 해보면 정말 편하다고 느낄 것이다. 필자도 회사에서 fastlane을 사용하지만 직접 설정한 경험이 없어서 이번 기회에 해보게 되었고, 설치 및 설정 그리고 테스트플라이트까지 올리는 과정을 공유하고자 한다.

fastlane 설치

문서에 보면 brew를 통해서도 가능하지만 추후에 dependencies conflict 등의 문제가 있을 가능성이 있어 Bundler로 설치를 권장해서 그대로 진행하였다.

 

gem install bundler

 

이때 ruby version이 낮아서 호환이 안되는 경우가 있는데 rbenv 를 통해서 루비 버전을 확인하고 업데이트 하자. bundler 를 설치했으면 Xcode 프로젝트로 가서 ./Gemfile을 다음과 같이 만들고 bundle update를 실행한다.

 

// ./Gemfile 을 Xcode 프로젝트 상단에 만든다.
source "https://rubygems.org"

gem "fastlane"

fastlane 설정

설치를 완료했다면 이제 바로 시작해보자. Xcode 프로젝트가 있는 곳에서 fastlane init 을 하고 일단 Manual Setup ( 4 번 )으로 시작해보려고 한다. 1 2 3 설정은 나중에 언제든지 할 수 있다. 참고로 최근에는 Swift를 통해서 설정하는 것도 나왔다고 하는데 다음 프로젝트는 그걸로 도전해보려고 한다.

위와 같은 화면이 나왔다면 여러가지 Fastlane을 위한 폴더와 파일들이 생성될 것이다. 간단하게만 짚고 넘어가보자.

  • fastlane/Appfile
    • App ID를 설정하는 파일으로 iOS를 예로 든다면 apple id 및 team id를 기입한다.
  • fastlane/Fastfile
    • fastfile은 각 lane을 설정하는 파일이고 각 lane은 어떤 Action을 실행할지 설정한다.
    • 따라서 Action 단위를 묶어서 lane을 만들고 이를 실행한다고 생각하면 된다.
  • Gemfile, Gemfile.lock
    • fastlane의 버전에 관한 설정을 하는 파일

기본 인증 설정하기

인증에는 두가지 방식이 있다고 한다. 기본적으로 로컬에 있는 값들을 이용하는 방법, 그리고 Match를 이용하는 방법이다. Match는 참고로 저장소에 올려둔 값을 가져오는 방식이라서 팀단위로 작업할때 유용할 것 같다. 일단 여기서는 기존 방식으로 해보고 나중에 Match로 하는 방식도 올리도록 하겠다.

 

fastlane/Appfile을 살펴보자. 문서에는 기본값이 app_identifier "net.sunapps.1" 형식으로 되어있는데 나의 경우 기본값 형식이 app_identifier("[[net.sunapps.1]]") 와 같이 되어있었다. 레퍼런스에서도 괄호에 넣는 방식으로 활용하는 것을 보니 이를 그대로 사용하면 될듯 하다. app_identifier는 app bundle id, 그리고 apple_id는 애플 로그인시 사용하는 아이디를 작성하면 된다.

lane 및 action 설정하기 + action : build_app

인증을 설정했으니 이제 lane을 설정할 차례이다. 일단 아무것도 없는 앱이지만 Testflight 에 올리는 것을 시도해보려고 한다. 순서로 따지자면 Action을 먼저 설정하고 lane에 놓는 것이 맞으니 문서에서 Action을 먼저 살펴보자.

 

일단 testFlight 에 올리는 것을 목표로 하고 Action 파일들을 봤다. 그리고 Beta쪽에 보면 upload_to_testflight 를 확인할 수 있다. pilot 과 testflight 또한 동일한 액션이라고 하니 아무거나 쓰면 될 것 같다. 일단 연습하는 단계이니 upload_to_testflight를 사용하도록 하겠다.

 

다행히도 Getting Started 쪽에 Beta Deployment 를 확인할 수 있었고 여기서 testFlight 업로드까지는 해볼 수 있을 것 같다. 문서를 보면 업로드전에 build 를 먼저 해야한다고 한다. 그래서 lane 에 다음과 같이 처리해보았다.

default_platform(:ios)

platform :ios do
  desc "Test Flight Test"
  lane :howard_tf do
    build_app(scheme: "{{AppSheme}}")
  end
end

설정은 이제 어느정도 마무리 했으니 실행을 시켜보자. fastlane이 속해있는 디렉토리에서 fastlane [lanename] 을 실행한다.

 


 

상황에 따라서 몇가지 오류가 발생할 수 있다. 첫번째로 필자의 경우는 하단 문서에 scheme이 없는걸 보고 단순히 build_app만 사용했다가 조금 헤맸었다 scheme도 같이 적어줘야 한다.

 

두번째로는 Xcode를 찾을 수 없다는 에러가 보인다면 DEVELOPER_DIR 설정이 안되어 있을 가능성이 있다. 터미널에서 아래를 한번 확인해보자.

// Error : [!] Unable to locate Xcode. Please make sure to have Xcode installed on your machine

echo $DEVELOPER_DIR
// 확인용. 아마 아무것도 출력되지 않을 가능성이 높다.
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
// 설정 완료

이후 profiles와 cert 설정을 제대로 했다면 문제 없이 빌드가 될 것이다.

action : upload_to_testflight

이후 testFlighit도 한번 추가해보았다.

platform :ios do
  desc "Test Flight Test"
  lane :howard_tf do
    build_app(scheme: "{{AppSheme}}")
    upload_to_testflight(username: "{{yourEmail}}")
  end
end

 

처음으로 빌드를 하게되면 이메일 비밀번호 등을 입력하고 이중인증 메시지까지 입력하라는 메시지가 나올 것이다. 원하는대로 입력을 해주고 마지막 난관을 맞이할 차례이다. 분명히 로그인과 이중인증까지 했는데 authorization이 실패했다고 한다.

 

Unable to upload archive. Failed to get authorization for username '{{YourEmail}}' and password.

 

레퍼런스는 아래에 둘테니 관심이 있다면 확인해보자 결론만 말하자면 앱 암호를 설정해줘야 한다. 개발자 계정의 애플 아이디 보안 설정쪽에 들어가면 앱암호라는 섹션이 있다. 앱 암호를 하나 추가하면서 값을 복사해두자 이름은 크게 중요하지 않았다. 그 다음 복사한 암호를 fastlane 에 알려줘야 하는데 Bash-Profile 에도 설정할 수 있고 Fastfile 쪽에도 설정할 수 있다. 여기서는 Fastfile에서 설정하는 것을 설명하려고 한다. Bash-profile 설정은 하단 레퍼런스를 참고해보면 된다.

// 1. 프로젝트의 fastlane 폴더에 간다.
// 2. .env.default 라는 파일을 만들어준다.
// 3. 아래와 같이 .env.default 를 설정해준다.

FASTLANE_USER={{YourEmail}}
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD={{abcd-abcd-abcd-abcd}}

 

 

그리고 나서 실행하기 전 TestFlight에 올리는 부분이다보니 아무것도 없는 프로젝트라면 몇가지 설정해줘야 할 부분들이 있을 수 있다. Xcode 에서 Archive - validate 를 먼저 해보고 유효성을 검증해보자. 이후 Validate를 확인해보고 프로젝트 상 문제가 없다고 판단이 된다면 명령어를 다시 실행해보자. 다음과 같은 화면을 보게 될 것이다.

 

 

마무리

생각보다 쉬울줄 알았는데 역시나 설정을 하는데 생각보다 많은 허들이 있어서 시간을 많이 썼다. 생각보다 글이 길어져서 더 많은 내용은 담지 못하고 다음에는 직접 사용해보면서 유용한 액션들에 대한 글을 써볼까 한다. 도움을 많이 받은 블로그와 레퍼런스는 하단에 작성해두었다.

 

Reference

fastlane docs
Swift 를 통한 fastlane
Setup - fastlane docs
Beta Deployment - fastlane docs
fastlane 기본 액션 페이지
appfile 문서

참고 블로그 - 다나와 기술 블로그
참고 블로그 - iOS — 배포 자동화, Fastlane 시작부터 적용까지. Fastlane의 설치 방법부터 인증 방법, beta, release… | by Heechan | HcleeDev | Medium

참고 블로그 - ruby version이 낮아서 호환이 안되는 경우

authorization 이슈 관련 - 깃허브 이슈
authorization 이슈 관련 - 스택오버플로우

+ Recent posts