앱 배포 및 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 Developer Console에서 앱을 만듭니다.

$ 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를 원시 텍스트 파일로 직접 내보내 한 번에 여러 개의 새 기기 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

UDID는 fastlane을 사용하여 명령줄에서 내보낼 수도 있습니다. 이는 다음 섹션에서 다룹니다.

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 Developer Console의 기기 목록에 UDID를 추가하면 fastlane의 register_devices 작업을 사용하여 프로비저닝 프로필에 UDID를 추가할 수 있습니다.
lane :add_new_devices do
    register_devices(devices_file: tester_udids_file)
end
  1. 그런 다음 차선을 실행합니다.

$ 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 Developer Console로 이동하여 기기 목록이나 프로비저닝 프로필을 업데이트할 필요가 없습니다. XCode를 열 필요도 없습니다.

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

추가 자료