728x90
반응형

안녕하세요 욱승입니다 🙇🏻‍♂️

이번 포스팅은 미루고 미뤄왔던 Fastlane + Github Action을 활용한 자동배포를 진행 해볼거에요

이 두개의 tool은 무료로 사용 가능하며 강력한 기능을 제공하기 때문에 iOS 개발자들 사이에서 자동배포 tool로 자주 쓰이는 두개입니다.

그럼 준비 시작.

 

명수옹 당신은 대체..


들어가기 앞서

먼저, iOS의 원래 배포 및 TestFlight 업로드 절차에 대해 알아보자

원래대로라면 Xcode에서 프로젝트를 Archive하고 TestFlight에 업로드하고 (중간 내용 생략)

AppStore에 들어가서  배포에 필요한 내용들을 기입 및 업로드하고 TestFlight에 올라간 빌드버전으로 배포를 심사..

꽤나 복잡하죠?

 

그렇지만 Fastlane + Github Action이 도입이 된다면

'딸깍'으로 해당 절차들이 자동으로 배포된다는 사실..!

절차를 간단하게 얘기해보면 특정 branch에서 Push 작업이 이루어지면 자동으로 TestFlight 업로드 및 배포가 이루어집니다.

절차를 간단하게 얘기해서 쉬워보이지만 그 안에 또 작업들이 있기 때문에 잘 따라오셔야 합니다..!

 

???: 그런놈이 여기를 왜 다시 기어들어와!?

 

Fastlane이란?

Fastlane은 앱 개발자와 팀을 위한 오픈소스 자동화 도구 모음으로, Android 및 iOS 앱의 빌드, 배포, 테스트, 코드 서명 등 반복적인 작업을 자동화하여 생산성을 높이고 휴먼 에러를 줄이는 데 도움을 줍니다.

주요 기능

  • 빌드 및 배포 자동화: 앱스토어 및 Google Play에 업로드를 포함한 배포 작업을 간소화.
  • 코드 사이닝 및 인증서 관리: 인증서 생성, 갱신, 매칭 등을 자동화하여 복잡한 작업을 줄임.
  • 테스트 자동화: 베타 테스트 플랫폼(TestFlight, Firebase 등)과 연동 가능.
  • 스크린샷 생성: 앱의 스크린샷을 자동으로 생성하고 관리.

특징

  • 다양한 플러그인 지원으로 기능 확장 가능.
  • CI/CD 도구(GitHub Actions, Jenkins 등)와 연계하여 특정 브랜치 푸시 시 배포 가능.
  • Ruby 기반으로 작성되었으며, 간단한 명령어로 설정 및 실행 가능.

Fastlane은 특히 자주 업데이트되는 앱 환경에서 필수적인 도구로, 개발자들이 반복적인 작업에 소요되는 시간을 줄이고 릴리스 프로세스를 최적화하는 데 유용합니다.

 

Fastlane을 사용하게 된 이유?

Fastlane을 사용하게 된 이유는 다음과 같은 장점과 필요성 때문입니다:

1. 반복 작업의 자동화

  • 앱 배포 과정에서 발생하는 반복적이고 번거로운 작업(빌드, 아카이브, 업로드 등)을 자동화하여 개발 시간을 절약할 수 있습니다.
  • 예를 들어, TestFlight나 App Store에 업로드하는 과정, 인증서 관리, 스크린샷 생성 등을 자동으로 처리합니다.

2. 시간 및 비용 절약

  • 수동으로 처리해야 하는 작업을 자동화함으로써 개발자는 더 중요한 작업에 집중할 수 있습니다. 이는 생산성을 높이고, 업무 효율성을 극대화합니다.
  • 대기 시간이 줄어들고, 작업 완료 후 Slack 알림 등으로 진행 상황을 실시간 공유할 수 있어 협업에도 유리합니다.

3. 휴먼 에러 감소

  • 인증서 관리나 배포 과정에서 발생할 수 있는 실수를 방지합니다. Fastlane은 코드 서명, 프로비저닝 프로파일 등을 자동으로 처리하여 오류를 줄입니다.

4. CI/CD 통합

  • Fastlane은 GitLab Runner, Jenkins 등 CI/CD 도구와 쉽게 통합되어 지속적인 배포 환경을 구축하는 데 유용합니다.

5. 다양한 플랫폼 및 플러그인 지원

  • iOS와 Android 모두에서 사용할 수 있으며, TestFlight, Firebase, App Store 등 다양한 배포 플랫폼과 연동 가능합니다.

결론적으로 Fastlane은 개발자들이 반복적이고 복잡한 작업을 자동화하여 시간과 노력을 절약하고, 배포 과정의 효율성과 정확성을 높이기 위해 사용됩니다.

 

 

 

fastlane - App automation done right

The easiest way to build and release mobile apps. fastlane handles tedious tasks so you don’t have to. Developer hours saved 10,558,200

fastlane.tools

 

 

Github Action이란?

GitHub Actions는 GitHub에서 제공하는 자동화 CI/CD(Continuous Integration/Continuous Deployment) 플랫폼입니다. 이를 통해 소프트웨어 개발 및 배포 과정을 자동화하고, 특정 이벤트(Push, Pull Request 등)에 따라 작업을 실행할 수 있습니다.

주요 구성 요소

  1. 워크플로우(Workflow):
    • 작업의 전체 흐름을 정의하는 YAML 파일입니다.
    • 이벤트가 발생하면 실행되며, 빌드, 테스트, 배포 등의 작업을 단계별로 설정합니다.
  2. 이벤트(Event):
    • 워크플로우를 트리거하는 요소입니다. 예를 들어, 코드 푸시, 풀 리퀘스트 생성 등이 포함됩니다.
  3. 작업(Job):
    • 워크플로우 내에서 수행되는 개별 작업 단위입니다.
    • 여러 작업을 병렬 또는 순차적으로 실행할 수 있습니다.
  4. 액션(Action):
    • 작업 내에서 실행되는 재사용 가능한 코드 조각입니다.
    • GitHub Marketplace에서 제공되는 액션을 활용하거나 사용자 정의 액션을 작성할 수 있습니다.
  5. 실행 환경(Runner):
    • 워크플로우가 실행되는 가상 환경으로, GitHub에서 제공하거나 사용자 지정 환경을 사용할 수 있습니다.
  6. 시크릿(Secret):
    • API 키, 비밀번호 등 보안 정보 저장 및 사용을 위한 암호화된 값입니다.

GitHub Actions의 장점

  • 강력한 GitHub 통합: 저장소와 직접 연동되며 설정이 간편합니다.
  • 비용 효율성: 별도의 인프라 구축 없이 호스팅된 환경을 제공합니다.
  • 확장성: 다양한 액션 라이브러리를 통해 기능 확장이 가능합니다.
  • 보안: 시크릿 관리로 민감한 정보를 안전하게 보호합니다.

활용 사례

  • CI/CD 파이프라인 구축: 코드 푸시 시 자동 빌드 및 테스트 실행.
  • 배포 자동화: 프로덕션 환경에 코드 배포.
  • Fastlane과 연동하여 앱 배포 및 인증서 관리.

GitHub Actions는 개발자들이 반복적인 작업을 줄이고 효율적으로 프로젝트를 관리할 수 있도록 돕는 강력한 도구입니다.

 

프로젝트 적용방법

Fastlane init

우선 프로젝트를 만들어주고 프로젝트 경로에 가서

incross0915@incross0915-MacBook-Air Fastlane-Example2 % ls

Fastlane-Example2		Fastlane-Example2Tests
Fastlane-Example2.xcodeproj	Fastlane-Example2UITests
incross0915@incross0915-MacBook-Air Fastlane-Example2 % pwd

/Users/incross0915/Desktop/PrivateProject/Fastlane-Example2
incross0915@incross0915-MacBook-Air Fastlane-Example2 % fastlane init

 

그럼 이렇게 선택지가 나오는데 기본 코드를 자동으로 생성 해주는 단계입니당

 

1. 스크린샷 자동화 (UI 테스트를 활용하여 앱 스크린샷을 찍고 정리)

2. TestFlight에 앱을 자동 배포

3. App Store에 앱을 자동 배포

4. 수동 설정 (필요한 기능을 직접 설정)

 

 

저는 TestFlight배포를 먼저 해볼까해요

(여기서 골랐던 것은 코드를 자동으로 생성해주기 위함이지 나중에 변경 및 수정이 가능하니 자유롭게 골라도 상관X)

 

ID / PW 입력

보안코드 6자리 입력

 

이후에 Appfile, Fastfile, Gemfile, Gemfile.lock이 생성됨

 

그럼 이렇게 코드가 작성이 될 것임..!

 

이 코드를 실행하려면 프로젝트 루트 경로로 이동해서 아래 명령어를 입력해주면됨

fastlane beta

 

저 beta는 코드에 있는 lane :beta << 임

함수명 같은거지..

 

실행해보면..

 

오류남 ㅠ

오류를 읽어보니, 현재 Fastlane에서 upload_to_testflight 단계에서 인증 오류가 발생!

이는 App Store Connect 로그인 인증 문제로 인해 발생하는 것으로 보입니다.

 

####### app_store_connect_api_key 관련 #######
APP_STORE_CONNECT_API_KEY_KEY_ID = ENV['APP_STORE_CONNECT_API_KEY_KEY_ID']
APP_STORE_CONNECT_API_KEY_ISSUER_ID = ENV['APP_STORE_CONNECT_API_KEY_ISSUER_ID']
APP_STORE_CONNECT_API_KEY_CONTENT = ENV['APP_STORE_CONNECT_API_KEY_CONTENT']

default_platform(:ios)

platform :ios do
  desc "Push a new beta build to TestFlight"
  lane :beta do
    app_store_connect_api_key(
       key_id: "#{APP_STORE_CONNECT_API_KEY_KEY_ID}",
       issuer_id: "#{APP_STORE_CONNECT_API_KEY_ISSUER_ID}",
       key_content: "#{APP_STORE_CONNECT_API_KEY_CONTENT}"
    )
    increment_build_number(xcodeproj: "Fastlane-Example2.xcodeproj")
    build_app(scheme: "Fastlane-Example2")
    upload_to_testflight
  end
end

 

app_store_connect_api_key를 추가하고 재시도

추가하는 이유는 appstore 2factor를 우회? pass?하는 방법임

 

코드를 보다보면 "엥?" 할 것임 

ENV['APP_STORE_CONNECT_API_KEY_KEY_ID'] << 이건 뭐지 싶을거임

그거는 이제 이 .env 파일에서 가져오는거에욥

상수를 저장할 수 있는 파일이라고 보면 됨

모자이크 처리

 

 

저 값들은 여기서 확인 가능

 

관련자료

 

app_store_connect_api_key - fastlane docs

<!-- This file is auto-generated and will be re-generated every time the docs are updated. To modify it, go to its source at https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb --> app_store_connect_a

docs.fastlane.tools

 

 

 

해결하고 시도하니 앱 아이콘을 등록하지 않아서 올라가지 않는다는 내용

 

Xcode에서 앱 아이콘 업로드하고 재시도..

 

진짜 마지막 시도 끝에 성공 ㅋ

이제까지 한거는 로컬 환경에서 명령어 한줄로 TestFlight까지 배포한거고..

갈길이 멀긴해..

 

글이 좀 길어져서 목차를 나눠서 진행해야겠음..ㅠ

728x90
반응형

'iOS > Fastlane' 카테고리의 다른 글

[iOS] Fastlane + Github Action을 활용한 자동배포 [2]  (0) 2025.04.01
욱승