소개

Fastlane은 루비 기반 클라이언트 자동빌드를 위한 오픈 소스 입니다.

만약 IOS에서 활용한다면 TestFlight 나 Appstore 업로드를 커맨드 라인으로 수행할 수 있고 또한 Code Signing 도 쉽게 관리할수 있습니다.

새로운 버전의 앱을 업데이트 한다고 가정하면, 그 일련의 과정들이 번거롭고 개발자가 일일히 신경 써야 하는 측면이 많습니다. 보통은 아래와 같은 배포과정을 거쳐야합니다.

  1. 앱스토어 커넥트에서 다음버전을 생성하고 필요하다면 미리 테스트플라이트에 업로드하여 새루오누 버전에 대한 빌드 검수를 받아놓는다.
  2. Info.plist 기입된 앱 버전과 빌드 번호를 증가 시켜야하며, 프로젝트의 타깃이 여러개만 모두 체크해서 동일하게 맞추어야 한다.
  3. 필요하다면 단위테스트 및 UI 테스트를 진행한다.
  4. Validation 을 체크하여 한참을 기다린 후 패스가 되면 프로비져닝 프로파일을 가지고 실제 빌드 및 테스트 플라이트(앱스토어)에 업로드를 한다(또 한참 기다린다).
  5. 테스트 플라이트에 완료되면 앱스토어 커넥트에서 해당 버전에 대한 Discratiopn 을 작성하고 배포 옵션을 선택하여 스토어에 실제 배포를 시작한다.

fastlane은 위의 복잡한 과정을 손쉽게 자동화 해주는 장점을 가지고 있습니다.

Fastlane 설정

fastlane 설치 후 프로젝트 폴더에서 fastlane init으로 설정을 시작합니다.

위와같이 여러 선택사항이 있지만 저는 여기서는 TestFlight 까지만 업로드 하고자 2번을 선택합니다.

그 다음에는 Apple 로그인을 위한 화면입니다. Apple store connect의 로그인 아이디와 패스워드를 모두 전달합니다. 그리고 앱에 대한 정보 이중인증 정보 등을 모두 전달하고 나면..

설정이 완료되고 ./fastlane 폴더에 FastFile 과 Appfile 이 생성 됩니다.

Fastfile 사용법

빌드 및 테스트 플라이트 배포를 위해서 fastfile에 아래와 같이 작성하면 됩니다.

    desc "upload a new  build to the TestFlight"
    lane :beta do    
	increment_build_number(
		build_number: "5")
	build_app(
		export_xcargs: "-allowProvisioningUpdates",
		scheme: "ci-demo-ios"
	)
	upload_to_testflight
end    
fastlane beta

이후 fastlane beta 터미널에 입력하면 위 스크립트를 실행합니다.

만약 스토어까지 베포를 하려면 ..

    desc "upload a new  build to the App Store"
    lane :release do    
	increment_build_number(
		build_number: "5")
	build_app(
		export_xcargs: "-allowProvisioningUpdates",
		scheme: "ci-demo-ios"
	)
	upload_to_app_store

위와 같이 스트립트를 변경 후 “fastlane release”를 입력 하면 됩니다.

또한 아래와 같이 해상도별로 스크린샷을 남겨 손쉽게 UI test를 할 수 있습니다.

https://docs.fastlane.tools (시뮬레이터로 해상도마다 일일히 확인해야하는 번거로움을 덜어준다.)

이 밖에도 여러 액션과 환경을 설정 할수 있으니 자세한 내용은 fastlane docs 에서 확인 하시면 됩니다.

결론

저는 Gitlab Runner 에서 fastlane까지 바로 동작하도록 설정을 했습니다. 이 과정에서 signing 오류, 2factor 인증 오류, multi developer Team 오류 등 여러 난관(?)에 봉착했습니다.

하지만 친절하게 해결방안의 링크를 제시해주고 결국에는 모두 설정이 완료되어 TestFlight에 자동으로 등록이 되었습니다. 앞으로 요긴하게 활용할 수 있을 것 같습니다.

Gitlab Runner의 수 많은 실패 끝에 드디어 Passed !!

sunyung's profile image

sunyung

2020-12-15 09:00

sunyung 님이 작성하신 글 더 보기