앱 배포 및 fastlane을 사용하여 출시 전 iOS 빌드를 더 빠르게 배포

1. 시작하기 전에

4cddd34bd261cea0.png

이 Codelab에서는 Firebase 앱 배포fastlane 플러그인을 사용하여 테스터에게 iOS 앱을 배포하고, 테스트 기기 UDID를 수집하고, 앱의 프로비저닝 프로필에 등록하여 테스터에게 임시 빌드를 빠르게 제공하는 방법을 알아봅니다.

학습할 내용

  • Firebase 앱 배포 및 fastlane을 사용하여 출시 전 iOS 앱(임시)을 테스터에게 업로드하고 배포하는 방법
  • 테스터로 가입하고 테스트 기기에 배포된 앱을 다운로드하는 방법
  • 앱 배포의 fastlane 플러그인을 사용하여 테스트 기기 UDID를 내보내 테스트 기기를 빠르게 등록하는 방법
  • 앱의 프로비저닝 프로필을 업데이트하고 배포를 위해 다시 업로드하는 방법

필요한 사항

  • Google 계정
  • XCode 11.7 이상이 설치된 Apple 컴퓨터
  • Xcode로 빌드된 임시 출시 전 iOS 앱
  • 유료 Apple 개발자 계정
  • 테스트용 실제 iOS 기기입니다.

iOS 시뮬레이터 앱은 대부분의 Codelab에서 작동하지만 시뮬레이터는 버전을 다운로드할 수 없습니다.

앱 배포 테스터 웹 앱에 '다운로드' 버튼이 표시되는지 확인하여 설정이 작동하는지 확인할 수 있습니다.

2. 시작하기

fastlane 설정

앱 배포는 fastlane과 통합되어 앱의 출시 전 빌드 배포를 자동화할 수 있습니다. 앱 배포는 fastlane 구성과 통합됩니다.

  1. fastlane을 설치하고 설정합니다.
  2. 설정 중에 프로젝트의 루트 디렉터리에서 fastlane init를 실행하고 '수동 설정'을 선택합니다. fastlane을 구성하는 데 사용할 Fastfile, Appfile, Pluginfile가 포함된 fastlane라는 하위 디렉터리가 표시됩니다.

Firebase CLI 설치

Firebase CLI도 설치해야 합니다. macOS 또는 Linux를 사용하는 경우 다음 cURL 명령어를 실행할 수 있습니다.

curl -sL https://firebase.tools | bash

Windows를 사용하는 경우 설치 안내를 읽고 독립형 바이너리를 가져오거나 npm를 통해 설치하세요.

CLI를 설치한 후 firebase --version를 실행하면 12.0.0 이상의 버전이 보고됩니다.

$ firebase --version
12.0.0

3. fastlane으로 앱 빌드

앱 빌드

  1. ./fastlane/Appfile.에서 fastlane에 전역 변수를 설정합니다. 앱 ID와 Apple ID를 포함합니다.
app_identifier("<your app's bundle identifier>")
apple_id("<your Apple id>")
  1. 첫 번째 레인을 만들고 fastlane의 build_app 작업 (gym라고도 함)을 사용하여 ./fastlane/Fastfile에 다음을 추가하여 앱을 빌드합니다.
default_platform(:ios)

lane :build do
    build_app(export_method: "ad-hoc")
end
  1. 배포를 위해 앱에 서명합니다.

이 Codelab에서는 get_certificates(cert라고도 함)를 사용하여 자체 인증 및 프로필을 관리합니다. get_certificates는 로컬에서 서명 인증서를 생성하고 모든 항목을 macOS 키체인에 저장합니다. 하지만 일반적으로 fastlane sync_code_signing action (match라고도 함)을 사용하여 팀의 코드 서명 인증서와 프로필을 안전하게 관리하는 것이 좋습니다.

lane :build do
    get_certificates()
    build_app(export_method: "ad-hoc")
end
  1. get_provisioning_profile 작업 (sigh이라고도 함)을 사용하여 앱의 프로비저닝 프로필을 설정합니다. 이렇게 하면 테스터와 앱을 공유할 수 있습니다.
lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true)
    build_app(export_method: "ad-hoc")
end
  1. [선택사항] 이전에 앱을 실행한 적이 없다면 다음 명령어를 실행하여 Apple 개발자 콘솔에서 앱을 만듭니다.

$ fastlane produce --skip_itc

  1. 마지막으로 차선을 실행하여 앱을 빌드합니다.

Apple ID, 비밀번호 (키체인에 저장됨) 및 앱의 번들 ID를 입력하라는 메시지가 표시됩니다.

$ fastlane build

문제가 발생하면 fastlane 문제 해결 가이드를 참고하세요.

4. Firebase에 앱 업로드

이제 앱을 빌드했으므로 앱 배포에 업로드할 수 있습니다.

Firebase 프로젝트 만들기 및 설정

  1. Firebase에 로그인합니다.
  2. Firebase Console에서 새 프로젝트를 만들거나 추가한 후 프로젝트 이름을 'UDID Export Codelab'으로 지정합니다.

이 프로젝트에 Google 애널리틱스를 사용 설정할 필요가 없습니다.

  1. 프로젝트 만들기를 클릭합니다.

프로젝트에 iOS 앱 추가하기

  1. iOS 아이콘을 클릭하여 새 Firebase iOS 앱을 만들고 앱의 번들 ID를 입력합니다.

9c26c130a6c42212.png

  1. 다음 몇 단계를 건너뛰고 콘솔로 이동을 클릭합니다. 나중에 앱에 SDK를 추가합니다.

이제 프로젝트 개요 페이지에서 프로젝트와 앱을 사용할 수 있습니다.

66f79cc8a97fa8e9.png

앱 배포 사용 설정

  1. 출시 및 모니터링 섹션에서 앱 배포를 클릭합니다.
  2. 약관에 동의한 후 '시작하기'를 클릭하여 앱에 앱 배포를 사용 설정합니다.

460213326c2784ae.png

fastlane에서 배포 설정

  1. iOS 프로젝트의 루트에서 다음 명령어를 실행하여 fastlane 구성에 앱 배포를 추가합니다.

명령어에서 옵션을 선택하라는 메시지가 표시되면 옵션 3: RubyGems.org를 선택합니다.

$ fastlane add_plugin firebase_app_distribution

  1. 플러그인이 설치되었는지 확인합니다.

$ fastlane

설치된 플러그인 목록에 fastlane-plugin-firebase_app_distribution가 표시됩니다.

  1. 플러그인이 설치되었는지 확인한 후 옵션 0을 선택하여 취소합니다.

Firebase 프로젝트 인증

fastlane 플러그인을 사용하려면 먼저 Firebase 프로젝트를 인증합니다.

  1. 다음 명령어를 실행하여 CLI를 Google 계정에 연결합니다.

$ firebase login

  1. 명령어로 인증 링크가 출력되면 브라우저에서 링크를 엽니다.
  2. 메시지가 표시되면 Google 계정에 로그인하고 Firebase 프로젝트에 액세스할 수 있는 권한을 부여합니다.

앱 배포

이제 앱을 배포할 준비가 되었습니다.

  1. ./fastlane/Fastfile 상단에서 firebase_app_id라는 변수를 정의합니다. <your_app_id>를 생성한 앱의 Firebase 앱 ID로 바꿉니다(프로젝트 설정 페이지에서 확인할 수 있음).

Fastfile는 Ruby로 작성되므로 Ruby 문법을 사용하여 변수를 정의합니다.

firebase_app_id = "<your_app_id>"
  1. 빌드 레인을 호출하는 distribute라는 새 레인을 추가한 다음 firebase_app_distribution 작업을 사용하여 앱을 배포합니다.
lane :distribute do
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!",
    )
end
  1. 새로운 방법을 실행하여 앱을 빌드하고 배포를 만듭니다.

$ fastlane distribute

이 시점에서 Fastfile은 다음과 같이 표시됩니다.

firebase_app_id = "<your Firebase app ID>"

default_platform(:ios)

lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true)
    build_app(export_method: "ad-hoc")
end

lane :distribute do
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!",
    )
end

Firebase Console을 새로고침하면 앱의 새 출시 버전이 표시됩니다.

C59dc1a94de3bf3c.png

5. 테스터를 초대하여 앱 다운로드

테스터가 임시 빌드를 테스트하기 위한 초대를 수락하면 테스터의 UDID를 공유할 권한에 대한 요청을 받습니다. 테스터가 동의하면 앱 배포는 기기 정보를 수집하고 이메일로 알립니다. 이 섹션에서는 배포한 앱을 다운로드하고 테스트할 테스터로 자신을 추가합니다.

출시 버전에 테스터로 본인 추가

  1. Fastfile 상단의 firebase_app_id에서 테스터를 보관할 변수를 만들고 자체 이메일 주소 및 기타 사용해 보려는 이메일 주소(선택사항)를 포함합니다.
firebase_app_id = "<your Firebase app ID>"
app_testers = [
  "your@email.com",
  "another@email.com",
]
  1. Ruby의 Array#join 메서드를 적용하여 app_testers 배열을 testers 매개변수에서 예상하는 쉼표로 구분된 문자열로 변환합니다. 그런 다음 결과를 firebase_app_distribution.testers 매개변수에 전달합니다.
lane :distribute do
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!"
        testers: app_testers.join(","),
    )
end

이 시점에서 Fastfile은 다음과 같이 표시됩니다.

firebase_app_id = "<your Firebase app ID>"
app_testers = [
  "your@email.com",
  "another@email.com",
]

default_platform(:ios)

lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true)
    build_app(export_method: "ad-hoc")
end

lane :distribute do
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!",
        testers: app_testers.join(","),
    )
end
  1. 차선을 다시 실행합니다.

$ fastlane distribute

레인을 실행하면 추가된 테스터는 앱 배포에서 새로 출시되는 버전을 알리는 초대 이메일을 받게 됩니다. 이제 Firebase Console에서 앱의 출시 버전 아래에 추가한 테스터를 확인할 수 있습니다.

2e0fc9603b868af8.png

이메일 주소를 포함했으므로 Firebase 앱 배포에서 앱 테스트를 초대하는 이메일을 받게 됩니다. 첫 번째 테스터가 되었습니다. 아래 섹션을 계속하여 테스트 기기에서 테스터로 설정하세요.

테스트 기기 등록

테스터가 테스트에 초대받은 앱 버전에 액세스하려면 테스트 기기에서 Google에 로그인해야 합니다. 테스트 빌드는 임시 출시이므로 Firebase 프로필을 설치하여 테스트 기기도 등록해야 합니다. 그런 다음 기기의 홈 화면에 추가된 웹 클립을 사용하여 앱 배포 테스터 웹 앱에서 사용 가능한 출시 버전에 액세스할 수 있습니다.

  1. iOS 테스트 기기에서 Firebase 앱 배포에서 보낸 이메일을 열고 시작하기 링크를 탭합니다. Safari에서 링크를 엽니다.
  2. 이제 앱 배포 테스터 웹 앱이 표시됩니다. 표시된 페이지에서 Google 계정으로 로그인하고 초대 수락을 탭합니다.

d833407de251b89f.png

  1. 이제 초대된 출시 버전을 확인할 수 있습니다. 출시 중 하나에서 기기 등록을 탭합니다.

fd141215e54a938d.png

  1. 메시지가 표시되면 Firebase 프로필을 다운로드한 후 설정 앱에서 프로필을 설치합니다.

프로필을 설치하면 Firebase에서 다음을 수행할 수 있습니다.

  • 기기의 고유 기기 ID(UDID)를 수집하여 테스트 기기를 등록합니다.

Firebase는 Firebase 프로젝트의 모든 소유자와 편집자에게 테스트 기기의 UDID가 포함된 이메일을 전송합니다.

  • 테스트 기기의 홈 화면에 웹 클립을 설치합니다. 웹 클립을 사용하면 모든 테스트 앱을 설치하고 액세스할 수 있는 앱 배포 테스터 웹 앱이 열립니다.

앱 배포 테스터 웹 앱에서 이제 테스트 기기가 앱 출시 버전에 등록됩니다.

Fe93d649DFA25877.png

이제 테스트 기기의 UDID를 Firebase에 공유했으므로 개발자로 다시 시작할 수 있습니다. 이제 앱 배포 대시보드테스터 탭에서 테스터 정보가 '수락됨' 상태로 앱 버전 아래에 표시됩니다.

7b9f665a63a384cf.png

다음 섹션에서는 앱의 프로비저닝 프로필에 기기 UDID를 추가한 후 테스트 기기에서 작동하는 앱 버전을 빌드합니다.

테스터 기기 UDID 내보내기

개발자는 Firebase로부터 테스트 기기의 UDID가 포함된 이메일을 받게 됩니다. 옵션으로 앱 배포를 사용하면 Firebase Console에서 원시 텍스트 파일로 직접 내보내 여러 새 기기 UDID를 한 번에 쉽게 수집할 수 있습니다.

  1. 모든 UDID를 내보내려면 테스터 및 그룹

241a9936898a2fc0.png

  1. Apple UDID 내보내기를 클릭합니다.

bcf0c26c522d9b4e.png

이 파일에는 테스트 기기의 UDID가 포함되어야 합니다.

Device ID            Device Name                            Device Platform
1234567890     udid.codelab.tester@gmail.com - iPhone SE 2nd Gen        ios

fastlane을 사용하여 명령줄에서 UDID를 내보낼 수도 있습니다. 이 작업은 다음 섹션에서 수행합니다.

6. 앱의 프로비저닝 프로필 업데이트 및 다시 빌드

이제 테스트 기기 UDID를 앱의 프로비저닝 프로필에 추가하고, 기기에서 작동하는 앱 버전을 다시 빌드하고, 새 버전을 배포합니다.

UDID 내보내기 레인 추가

  1. Fastfile 상단에 다른 변수를 추가하고 테스터의 기기의 UDID가 다운로드됩니다.
firebase_app_id = "<your Firebase app ID>"
app_testers = [
  "your@email.com",
  "another@email.com",
]
tester_udids_file = "tester_udids.txt"
  1. 콘솔에서와 마찬가지로 앱 배포 플러그인의 UDID 내보내기 작업을 사용하여 테스터 UDID를 다운로드하는 새로운 방법을 설정합니다.
lane :download_udids do
    firebase_app_distribution_get_udids(
        app: firebase_app_id,
        output_file: tester_udids_file,
    )
end
  1. 다음 레인을 실행하여 UDID를 다운로드합니다.

$ fastlane download_udids

  1. 다운로드한 파일을 출력합니다. 이 파일에는 테스트 기기 UDID가 포함되어야 합니다.

$ cat tester_udids.txt

Apple Developer Console에 기기 추가

  1. 다음 레인을 만들어 Apple 개발자 콘솔의 기기 목록에 UDID를 추가하면 fastlane의 register_devices 작업을 사용하여 프로비저닝 프로필에 UDID를 추가할 수 있습니다.
lane :add_new_devices do
    register_devices(devices_file: tester_udids_file)
end
  1. 그런 다음 lane을 실행합니다.

$ fastlane add_new_devices

그러면 개발자 콘솔의 기기 목록에 새 기기가 표시됩니다.

프로비저닝 프로필에 기기 추가하기

  1. 빌드할 때마다 새 기기를 선택하도록 build 레인의 프로비저닝 프로필 단계에 force 인수를 추가합니다.
lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true, force: true)
    build_app(export_method: "ad-hoc")
end

레인을 다시 실행하여 빌드 및 업로드

이제 프로비저닝 프로필에 기기를 추가하고 앱을 다시 빌드한 후 배포하기 위해 distribute 차선을 새 차선으로 업데이트합니다.

  1. distribute에서 새 차선을 호출합니다.
lane :distribute do
    download_udids
    add_new_devices
    build
    firebase_app_distribution(
        app: "1:123456789:ios:abcd1234",
        release_notes: "Try out this app!"
        testers: app_testers.join(","),
    )
end
  1. distribute 차선을 실행합니다.

$ fastlane distribute

이 시점에서 Fastfile은 다음과 같이 표시됩니다.

firebase_app_id = "<your Firebase app ID>"
app_testers = [
  "your@email.com",
  "another@email.com",
]
tester_udids_file = "tester_udids.txt"

default_platform(:ios)

lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true, force: true)
    build_app(export_method: "ad-hoc")
end

lane :distribute do
    download_udids
    add_new_devices
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!",
        testers: app_testers.join(","),
    )
end

lane :download_udids do
    firebase_app_distribution_get_udids(
        app: firebase_app_id,
        output_file: tester_udids_file,
    )
end

lane :add_new_devices do
    register_devices(devices_file: tester_udids_file)
end

테스트 기기에서 출시 버전 다운로드하기

이제 앱에 테스트 기기 UDID가 포함되었으므로 테스트 기기에 설치할 수 있습니다.

e275f73d57cc8fb1.png

  1. 테스트 기기에서 이메일에 있는 링크 또는 기기 홈 화면의 아이콘을 사용하여 앱 배포 테스터 웹 앱으로 돌아갑니다.

UDID Codelab 앱으로 이동하면 출시 버전을 다운로드할 수 있습니다.

dad6d03b6ad78746.png

  1. 실제 기기를 사용 중인 경우 다운로드를 누른 다음 앱을 설치하고 실행하세요.

7. 축하합니다

이제 앱 배포 및 fastlane을 구성하여 출시 전 테스트 프로세스를 자동화했습니다. 이제 테스터를 더 초대하거나 테스터의 UDID를 앱에 추가하려면 fastlane distribute 명령어 하나만 실행하면 됩니다.

따라서 더 이상 테스터로부터 UDID를 개별적으로 수집하거나 Apple 개발자 콘솔로 이동하여 기기 목록 또는 프로비저닝 프로필을 업데이트할 필요가 없습니다. XCode를 열 필요도 없습니다.

이 워크플로는 지속적 통합 환경에서 시간별 또는 매일 실행하도록 쉽게 설정할 수 있습니다.

추가 자료