자동 __CAPGO_KEEP_0__ iOS 빌드와 __CAPGO_KEEP_1__ 액션을 사용하여 match
CI/CD

자동 Capacitor IOS 빌드와 GitHub 액션을 사용하여 match

5분 이내에 fastlane 및 GitHub 액션을 사용하여 IOS Ionic 앱에 대한 CI/CD PIPELINE을 설정하는 방법 (2022)

기사 저자

마틴 도나디유

작가

발레리아

리뷰어

조던

편집자

자동 Capacitor IOS 빌드와 GitHub 액션을 사용하여 match

자동 iOS 빌드와 Match를 사용하는 GitHub 액션

CI/CD를 위한 Capacitor 앱 설정은 복잡하고 시간이 많이 걸립니다. 알아야 할 점은 다음과 같습니다.

우리는 __CAPGO_KEEP_0__ 빌드와 __CAPGO_KEEP_1__ __CAPGO_KEEP_2__를 사용하는 것을 추천합니다. Capgo 빌드와 Capgo CLI를 사용하여 native Capgo 빌드를 생성합니다. 이 Fastlane Match 가이드는 기존 Capacitor 액션 PIPELINE을 유지하는 팀에게 유지됩니다. 그러나 새로운 iOS 빌드는 Fastlane, Match 저장소, Xcode 러너, 인증서, 업로드 스크립트 유지 관리를 생략할 수 있습니다. This Fastlane Match guide is kept for teams maintaining existing GitHub Actions pipelines, but new iOS builds should use the Capgo CLI so you do not have to maintain Fastlane, Match repositories, Xcode runners, certificates, and upload scripts yourself.

Capgo Build for CI/CD by Capgo

__CAPGO_KEEP_0__ 빌드 Capgo 빌드는 CI/CD PIPELINE에서 이미 존재하는 빌드를 생성합니다: __CAPGO_KEEP_0__ 빌드는 다음을 지원합니다:

  • pipeline와 함께 작동합니다: Capgo Build를 GitHub Actions, GitLab CI, Jenkins, 또는 로컬 스크립트에서 트리거하세요. npx cap sync.
  • __CAPGO_KEEP_0__ Build에서 CI 비밀을 사용하여 서명합니다.: __CAPGO_KEEP_0__ Build는 App Store Connect 키, 인증서, 배포 프로파일, 비밀번호 및 팀 ID를 관리하지 않습니다.
  • __CAPGO_KEEP_0__ Build는 유지 관리가 필요한 macOS 러너, Xcode 이미지, Fastlane, 또는 Match 저장소 관리를 하지 않습니다.: Capgo Build는 유지 관리가 필요한 macOS 러너, Xcode 이미지, Fastlane, 또는 Match 저장소 관리를 하지 않습니다.
  • __CAPGO_KEEP_0__ Build는 유지 관리가 필요한 macOS 러너, Xcode 이미지, Fastlane, 또는 Match 저장소 관리를 하지 않습니다.: Capgo Build는 signed artifact를 다운로드하여 QA에 사용하거나 Capgo CLI를 통해 릴리즈 빌드를 제출할 수 있습니다.

__CAPGO_KEEP_0__ 가격은 $12/월부터 시작됩니다.

  • Capgo 가격은 $12/월부터 시작됩니다.
  • : __CAPGO_KEEP_0__ 가격은 $12/월부터 시작됩니다.
  • : __CAPGO_KEEP_0__ 가격은 $12/월부터 시작됩니다.

: CI/CD에서 Capgo Build를 설정하세요.

설치 가이드

다음과 같은 작업이 필요합니다:

Continuous Delivery for iOS using Fastlane and GitHub Actions using match

필수 조건

이 튜토리얼을 계속하기 전에…

  • 개발 환경에 Fastlane이 설치되어야 합니다. iOS 개발자 프로그램 회원입니다. 읽고 싶은 마음이 있으시다면…
  • 많은 개발자 팀이 있다면, 우리는 fastlane cert를 사용하는 것을 추천합니다.
  • Continuous Delivery for iOS using Fastlane and __CAPGO_KEEP_0__ Actions using match
  • Prerequisites Before continuing with the tutorial… 더 간단한 워크플로우를 위해.

가격에 대한 중요한 사항.

가격 GitHub 액션

https://github.com/features/actions

서비스는 제한에 따라 선택한 기계에 따라 '무료'입니다.
우리는 macOS를 사용할 것입니다. 기계의 가격과 제한을 볼 수 있습니다 (가격은 이 튜토리얼이 생성된 시점의 가격으로, 미래에 변경될 수 있습니다) 요구 사항과 가격에 대해 경고한 후, 계속하려면 좋습니다.

🔴 애플 에코 시스템의 인증서가 있는 iTunes Connect에서 앱을 생성했다고 가정합니다. Fastlane이 모든 것을 복사합니다!

📣 앱을 생성하고 Apple 에코 시스템의 인증서를 생성했다고 가정합니다.

Let's dive in

이 포스트에서 따르는 단계

  1. App Store Connect API을 사용하는 방법
  2. 필요 조건
  3. App Store Connect API 키 생성
  4. App Store Connect API 키 사용
  5. Fastlane 파일 복사
  6. Fastlane match 설정

1. App Store Connect API을 사용하는 방법

2021년 2월부터 App Store Connect에 로그인하는 모든 사용자는 2단계 인증 또는 2단계 인증이 필요합니다. 이 추가 보안 기능은 Apple ID를 보호하여 계정에 액세스하는 사람을 단일 사용자로만 보장합니다.
From Apple Support

match에 대한 시작을 위해 기존 인증서를 취소해야 하는데, 걱정하지 마세요. 새로운 인증서를 바로 받을 수 있습니다.

필요 조건

애플 스토어 연결 API을 사용할 수 있도록 하려면, Fastlane은 세 가지 것을 필요로 합니다. 세 가지. 발급자 ID.

  1. 키 ID.
  2. 키 파일 또는 키 내용.
  3. 애플 스토어 연결 __CAPGO_KEEP_0__ 키 생성

Creating an App Store Connect API Key

1 — 애플 스토어 연결에 로그인하세요.

2 — 사용자 및 액세스 선택하세요. 3 — 사용자 및 액세스에서 Admin 권한을 가진 사용자를 선택하세요..

4 — Admin 권한을 가진 사용자의 프로필에서 '인증서, 프로파일, 및 권한'을 선택하세요. 5 — '인증서' 탭에서 '+' 버튼을 클릭하세요..

애플 스토어 연결 사용자 접근

3 — 통합 탭을 선택하세요.

애플 스토어 연결 API 통합

4 — Generate API 키 또는 (+) 버튼을 클릭하세요.

애플 스토어 연결 API 키 생성

5 — 키 이름을 입력하세요. 키 이름은 키 자체의 일부가 아니며, 사용자만의 참조용입니다.

애플 스토어 연결 API 키 생성 이름

6 — 액세스에서 키의 역할을 선택하세요. 키의 역할은 팀 내 사용자에 대한 역할과 동일합니다. 자세한 내용은 역할 권한을 참조하세요. 우리는 앱 매니저.

를 추천합니다. 7 — Generate 버튼을 클릭하세요.

API 키의 접근 권한은 특정 앱으로 제한할 수 없습니다.

__CAPGO_KEEP_0__ 키의 이름, 키 ID, 다운로드 링크 및 기타 정보가 페이지에 나타납니다.

애플 스토어 연결 다운로드 키

여기서 세 가지 필요한 정보를 모두 가져올 수 있습니다.
<1> 이슈 ID.
<2> 키 ID.
<3> API 키를 다운로드하려면 "API 개인 키 다운로드" 버튼을 클릭하세요. 다운로드 링크는 개인 키가 다운로드되지 않은 경우에만 나타납니다. 애플은 개인 키의 복사본을 유지하지 않습니다. 따라서 개인 키를 한 번만 다운로드할 수 있습니다.

🔴 개인 키를 안전한 곳에 저장하세요. 키를 공유하지 않도록 하며, code 저장소에 키를 저장하거나 code에 키를 포함하지 마세요.

API 키 사용

API 키 파일 (다운로드한 p8 파일), 키 ID, 발급자 ID가 필요하여 JWT 토큰을 생성하기 위해 Fastlane을 사용할 수 있습니다. Fastlane의 새로운 액션을 사용하여 이러한 정보를 입력하는 방법은 여러 가지가 있습니다. app_store_connect_api_keyFastlane 문서를 참조하여 다른 방법을 알아보세요. Fastlane 문서CI를 사용하는 대부분의 경우에서 가장 쉬운 방법으로 생각합니다. 환경 변수를 설정할 수 있기 때문입니다.

App Store Connect API 키를 사용하여 Fastlane을 관리할 수 있습니다. 정말 좋습니다!

2. Fastlane 파일 복사

Fastlane은 Ruby 라이브러리로 모바일 개발을 자동화하는 데 사용됩니다. Fastlane을 사용하면 Android Studio에서 수행하는 작업을 수행하는 '액션'을 포함하는 '레인'을 구성할 수 있습니다. Fastlane은 많은 작업을 수행할 수 있지만 이 튜토리얼의 목적은 Fastlane의 핵심 액션만 사용하는 것입니다.

프로젝트의 루트 폴더에 Fastlane 폴더를 생성하고 다음 파일을 복사하세요: Fastfile

default_platform(:ios)

DEVELOPER_APP_IDENTIFIER = ENV["DEVELOPER_APP_IDENTIFIER"]
DEVELOPER_APP_ID = ENV["DEVELOPER_APP_ID"]
PROVISIONING_PROFILE_SPECIFIER = ENV["PROVISIONING_PROFILE_SPECIFIER"]
TEMP_KEYCHAIN_USER = ENV["TEMP_KEYCHAIN_USER"]
TEMP_KEYCHAIN_PASSWORD = ENV["TEMP_KEYCHAIN_PASSWORD"]
APPLE_ISSUER_ID = ENV["APPLE_ISSUER_ID"]
APPLE_KEY_ID = ENV["APPLE_KEY_ID"]
APPLE_KEY_CONTENT = ENV["APPLE_KEY_CONTENT"]
GIT_USERNAME = ENV["GIT_USERNAME"]
GIT_TOKEN = ENV["GIT_TOKEN"]

def delete_temp_keychain(name)
  delete_keychain(
    name: name
  ) if File.exist? File.expand_path("~/Library/Keychains/#{name}-db")
end

def create_temp_keychain(name, password)
  create_keychain(
    name: name,
    password: password,
    unlock: false,
    timeout: 0
  )
end

def ensure_temp_keychain(name, password)
  delete_temp_keychain(name)
  create_temp_keychain(name, password)
end

platform :ios do
  lane :build do
    build_app(
      configuration: "Release",
      workspace: "./ios/App/App.xcworkspace",
      scheme: "App",
      export_method: "app-store",
      export_options: {
        provisioningProfiles: { 
            DEVELOPER_APP_ID => "#{PROVISIONING_PROFILE_SPECIFIER}"
        }
      }
    )
  end
  lane :refresh_profiles do
    match(
      type: "development",
      force: true)
    match(
      type: "adhoc",
      force: true)
  end
  desc "Register new device"
  lane :register_new_device do  |options|
      device_name = prompt(text: "Enter the device name: ")
      device_udid = prompt(text: "Enter the device UDID: ")
      device_hash = {}
      device_hash[device_name] = device_udid
      register_devices(
                       devices: device_hash
                       )
    refresh_profiles
  end
  lane :closed_beta do
    keychain_name = TEMP_KEYCHAIN_USER
    keychain_password = TEMP_KEYCHAIN_PASSWORD
    ensure_temp_keychain(keychain_name, keychain_password)

    api_key = app_store_connect_api_key(
      key_id: APPLE_KEY_ID,
      issuer_id: APPLE_ISSUER_ID,
      key_content: APPLE_KEY_CONTENT,            
      duration: 1200,            
      in_house: false
    )

    match(
      type: 'appstore',
      git_basic_authorization: Base64.strict_encode64("#{GIT_USERNAME}:#{GIT_TOKEN}"),
      readonly: true,
      keychain_name: keychain_name,
      keychain_password: keychain_password,
      api_key: api_key
    )

    gym(
      configuration: "Release",
      workspace: "./ios/App/App.xcworkspace",
      scheme: "App",
      export_method: "app-store",
      export_options: {
        provisioningProfiles: { 
            DEVELOPER_APP_ID => "#{PROVISIONING_PROFILE_SPECIFIER}"
        }
      }
    )

    pilot(
      apple_id: "#{DEVELOPER_APP_ID}",
      app_identifier: "#{DEVELOPER_APP_IDENTIFIER}",
      skip_waiting_for_build_processing: true,
      skip_submission: true,
      distribute_external: false,
      notify_external_testers: false,
      ipa: "./App.ipa"
    )

    delete_temp_keychain(keychain_name)
  end
  lane :submit_review do
    version = ''
    Dir.chdir("..") do
      file = File.read("package.json")
      data = JSON.parse(file)
      version = data["version"]
    end
    deliver(
      app_version: version,
      submit_for_review: true,
      automatic_release: true,
      force: true, # Skip HTMl report verification
      skip_metadata: false,
      skip_screenshots: false,
      skip_binary_upload: true
    )
  end
end

Appfile

app_identifier(ENV["DEVELOPER_APP_IDENTIFIER"])
apple_id(ENV["FASTLANE_APPLE_ID"])
itc_team_id(ENV["APP_STORE_CONNECT_TEAM_ID"])
team_id(ENV["DEVELOPER_PORTAL_TEAM_ID"])

Fastlane match 구성

Fastlane match iOS의 code 인증서에 대한 새로운 접근 방식입니다. Fastlane match는 iOS 앱의 인증서와 배포 프로파일을 관리하는 팀을 위한 간단한 방법입니다.

새로운 개인 저장소 이름을 생성하세요, 예를 들어 __CAPGO_KEEP_0__ 개인 계정 또는 조직에서. certificates, for example on your GitHub personal account or organization.

iOS 앱에 대해 Fastlane match를 초기화하세요.

fastlane match init

그 다음 Git Storage 옵션 #1을 선택하세요.

[01:00:00]: fastlane match supports multiple storage modes, please select the one you want to use:1. git2. google_cloud3. s3?

새로 생성된 저장소의 URL을 Assign하세요.

[01:00:00]: Please create a new, private git repository to store the certificates and profiles there[01:00:00]: URL of the Git Repo: <YOUR_CERTIFICATES_REPO_URL>

Fastlane 폴더 내에 Matchfile이라는 파일이 생성되었습니다. Matchfile 그리고 _git_url_Certificates 저장소의 HTTPS URL을 Matchfile에 설정하세요. SSH를 사용할 수도 있지만, SSH를 사용하려면 추가 단계를 실행해야 합니다.

# ios/Matchfilegit_url("https://github.com/gitusername/certificates")storage_mode("git")type("appstore")

다음으로 인증서를 생성하고 Fastlane Match를 사용하여 자격 증명을 입력하세요.

인증서를 암호화할 때 암호를 입력하라는 메시지가 표시됩니다. 암호를 정확하게 기억하세요. 나중에 GitHub Actions가 암호화된 인증서 저장소의 암호를 사용하기 때문입니다.

fastlane match appstore

모든 단계가 성공적으로 완료되면 다음과 같은 화면이 표시됩니다.

[01:40:52]: All required keys, certificates and provisioning profiles are installed 🙌

이미지나 GitHub와 관련된 문제가 발생하여 권한이 부족한 경우 이 포스트를 참조하세요. 이 포스트 Git 인증 토큰을 생성하는 데 도움이 될 것입니다.

생성된 인증서와 프로비저닝 프로파일은 인증서 리소스 저장소에 업로드됩니다.

앱 스토어 연결 인증서

마지막으로, Xcode에서 앱의 릴리스 구성에 대한 프로비저닝 프로파일을 업데이트하십시오. project XCode 인증서

💡 몇 가지 사항을 참고하십시오.

MATCH

CI/CD가 인증서와 프로비저닝 프로파일을 가져올 수 있도록 인증서 저장소에 접근할 수 있도록 하려면, 개인 접근 토큰을 생성하여 (이전 사용) private 저장소에 읽기/쓰기 접근 권한이 있는 토큰을 생성하십시오.

이곳 __CAPGO_KEEP_0__에서

In GitHub, go to 개발자 설정Settings개인 접근 토큰 → 클릭 Generate New Token → 체크박스 repo 권한 범위 → 다음에 클릭 Generate token.

개인 접근 토큰 생성

개인 접근 토큰을 생성한 후 복사해 두세요. 나중에 환경 변수로 사용하겠습니다. GIT_TOKEN.

Fastlane 폴더에서 생성된 match 파일을 대체하세요. Matchfile

CERTIFICATE_STORE_URL = ENV["CERTIFICATE_STORE_URL"]
GIT_USERNAME = ENV["GIT_USERNAME"]
GIT_TOKEN = ENV["GIT_TOKEN"]
FASTLANE_APPLE_ID = ENV["FASTLANE_APPLE_ID"]

git_url(CERTIFICATE_STORE_URL)
storage_mode("git")
type("appstore")
git_basic_authorization(Base64.strict_encode64("#{GIT_USERNAME}:#{GIT_TOKEN}"))
username(FASTLANE_APPLE_ID)

이것은 GitHub Actions에서 인증서 및 배포 프로파일을 가져오기 위해 사용됩니다. 그리고 GitHub Secrets에서 변수가 설정되며, 파일에 직접 하드 코딩하지 않습니다.

빌드 처리

In GitHub Actions에서, CI/CD 워크플로우를 실행하는 데 사용한 분의 수에 따라 요금이 청구됩니다. 애플 스토어 커넥트에서 빌드를 처리하는 데 약 10-15분이 걸립니다.

개인 프로젝트의 경우, 빌드당 비용은 최대 $0.08/분 x 15분 = $1.2또는 더 많은 비용이 발생할 수 있습니다. 이는 프로젝트의 구성 또는 의존성에 따라 달라집니다.

가격에 대한 걱정은 제가 개인 프로젝트에 대해 하는 것과 같습니다. skip_waiting_for_build_processing 을 유지하고 싶다면, true.

을 유지하세요.

그런데 뭐가 문제일까요? 빌드가 처리된 후에, 빌드 결과를 사용자에게 배포하기 위해서는 앱 스토어 연결에서 앱의 준수성을 수동으로 업데이트해야 합니다. 이것은 빌드 분량을 절약하기 위해 개인 프로젝트에만 사용할 수 있는 옵션입니다. 무료 프로젝트의 경우, 이 문제는 전혀 발생하지 않습니다..

3. Setup GitHub Actions

Configure GitHub secrets

설정 ENV 설정된

 GitHub  설정

1. APP_STORE_CONNECT_TEAM_ID - 애플 스토어 연결 팀의 ID (여러 팀에 속해 있다면)

2. DEVELOPER_APP_ID - 애플 스토어 연결에서 앱으로 이동 앱 정보 → 앱의 정보를 아래로 스크롤하여 General Information 앱의 정보를 확인하고 Apple ID.

3. DEVELOPER_APP_IDENTIFIER - 앱의 번들 식별자.

4. DEVELOPER_PORTAL_TEAM_ID - 개발자 포털 팀의 ID (여러 팀에 속해 있다면)

5. FASTLANE_APPLE_ID - 앱을 관리하는 데 사용하는 애플 ID 또는 개발자 이메일.

6. GIT_USERNAME & GIT_TOKEN - Git 사용자 이름과 개인 액세스 토큰.

7. MATCH_PASSWORD - match를 초기화할 때 assign한 패스 프레이즈가 사용되며, 인증서 및 배포 프로파일을 암호화하는 데 사용됩니다.

8. PROVISIONING_PROFILE_SPECIFIER - match AppStore <YOUR_APP_BUNDLE_IDENTIFIER>eg. match AppStore com.domain.blabla.demo.

9. TEMP_KEYCHAIN_USER &amp; TEMP_KEYCHAIN_PASSWORD - workflow workflow에 임시 키체인 사용자 및 비밀번호 assign합니다.

10. APPLE_KEY_ID — App Store Connect API Key 🔺Key ID.

11. APPLE_ISSUER_ID — App Store Connect API Key 🔺Issuer ID.

12. APPLE_KEY_CONTENT — App Store Connect API Key 🔺 Key file or Key content of .p8, check it

13. CERTIFICATE_STORE_URL — Match 키의 repo url (예: https://__CAPGO_KEEP_0__.com/***/fastlane_match.git) 4. github workflow 파일을 configure합니다.)

Create a GitHub workflow directory.

Create a GitHub workflow directory.

cd .github/workflows

안에 workflow 폴더를 만들고, 그 안에 파일 이름이 __CAPGO_KEEP_0__인 파일을 생성하세요. build-upload-ios.yml그리고 다음 항목을 추가하세요.

name: Build source code on ios

on:
  push:
    tags:
      - '*'

jobs:
  build_ios:
    runs-on: macOS-latest
    steps:
      - uses: actions/checkout@v6
      - name: set Node.js
        uses: actions/setup-node@v6
        with:
          node-version: '24'
          cache: npm
      - name: Install dependencies
        id: install_code
        run: npm ci
      - name: Build
        id: build_code
        run: npm run build
      - uses: actions/cache@v5
        with:
          path: ios/App/Pods
          key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-pods-
      - name: Sync
        id: sync_code
        run: npx cap sync
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: 2.7.2
      - uses: maierj/fastlane-action@v2.3.0
        env:
          DEVELOPER_APP_IDENTIFIER: ${{ secrets.DEVELOPER_APP_IDENTIFIER }}
          DEVELOPER_APP_ID: ${{ secrets.DEVELOPER_APP_ID }}
          PROVISIONING_PROFILE_SPECIFIER: match AppStore ${{ secrets.DEVELOPER_APP_IDENTIFIER }}
          TEMP_KEYCHAIN_USER: ${{ secrets.TEMP_KEYCHAIN_USER }}
          TEMP_KEYCHAIN_PASSWORD: ${{ secrets.TEMP_KEYCHAIN_PASSWORD }}
          APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }}
          APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }}
          APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }}
          CERTIFICATE_STORE_URL: https://github.com/${{ secrets.CERTIFICATE_STORE_REPO }}.git
          GIT_USERNAME: ${{ secrets.GIT_USERNAME }}
          GIT_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
          FASTLANE_APPLE_ID: ${{ secrets.FASTLANE_APPLE_ID }}
          MATCH_USERNAME: ${{ secrets.FASTLANE_APPLE_ID }}
          MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
          APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }}
          DEVELOPER_PORTAL_TEAM_ID: ${{ secrets.DEVELOPER_PORTAL_TEAM_ID }}
        with:
          lane: closed_beta
      - name: Upload release bundle
        uses: actions/upload-artifact@v2
        with:
          name: ios-release
          path: ./App.ipa
          retention-days: 60

이 워크플로우는 각 GitHub 후에 트리거되어야 합니다. 태그자동화 태그를 자동화하기 위해서는 자동화 태그를 자동화하는 방법을 참조하세요. 자동 빌드 및 릴리즈와 함께 GitHub 액션 첫 번째 단계.

노드 JS 의 종속성을 pulls 하여 설치하고 자바 스크립트 앱을 빌드합니다.

각 새 커밋을 보낼 때마다 테스트 플라이트에서 릴리즈가 빌드됩니다.

애플리케이션은 Ionic을 사용하지 않아도 됩니다. Capacitor의 기본 버전만 필수적이며, 옛 Cordova 모듈을 사용할 수 있지만 Capacitor JS 플러그인은 선호됩니다.

5. 워크플로우 트리거

자동으로 iOS 빌드를 위한 Capacitor GitHub Action을 만들기

Make a commit, repository에서 활성 워크플로를 볼 수 있습니다.

워크플로를 트리거하세요

브랜치에 새로운 커밋을 푸시하거나 main 또는 development 워크플로를 트리거하기

새로운 커밋을 푸시하여

몇 분 후에 App Store Connect 대시보드에서 빌드를 확인할 수 있습니다.

Testflight 대시보드

로컬 머신에서 배포할 수 있나요?

네, 가능합니다. 그리고 그것은 매우 쉬워요.

개인 저장소가 있다고 가정해 보겠습니다. 무료 플랜의 분량을 모두 사용했으며 새로운 릴리즈를 위해 돈을 지불하지 않으려는 경우, 또는 애플리케이션을 수동으로 제출하는 것을 선호하는 경우가 있습니다.

그럼 가보죠

좋아, 우선 my_project_path/fastlane 경로에 .env 파일을 생성해야 합니다. Fastfile 와 동일한 경로에 위치해야 합니다. 우리 ___CAPGO_KEEP_0__ 에서 찾을 수 있는 properties found in our _GitHub, a_s below:

.env 파일을 사용하여 로컬 머신에서 배포하기

현재, 로컬 머신에서 배포하기 위해 .env 파일을 사용할 수 있습니다. 터미널 로컬 머신에서 배포하기 위해 .env 파일을 사용할 수 있습니다. Fastlane을 실행하세요. ❌ .env 파일에 대한 필수 사항, 데이터를 노출시키지 않으려면 .gitignore에 추가해야 합니다.

fastlane closed_beta

❌ .env 파일에 대한 필수 사항, 데이터를 노출시키지 않으려면 .gitignore에 추가해야 합니다. ❌ .env 파일에 대한 필수 사항, 데이터를 노출시키지 않으려면 .gitignore에 추가해야 합니다. ❌ .env 파일에 대한 필수 사항, 데이터를 노출시키지 않으려면 .gitignore에 추가해야 합니다. ❌ .env 파일에 대한 필수 사항, 데이터를 노출시키지 않으려면 .gitignore에 추가해야 합니다.❌ .env 파일에 대한 필수 사항, 데이터를 노출시키지 않으려면 .gitignore에 추가해야 합니다.

fastlane/*.env

It should work the same as it happens from GitHub Actions on the remote machine but in our local machine. 🍻

Local Fastlane run

Terminal execution: $ Fastlane closed_beta

이렇게까지 왔으면 축하합니다. 이제는 Fastlane과 GitHub Actions를 사용하여 iOS 앱에 대한 완전 자동화된 프로세스를 갖게되었습니다.

매번 새로운 커밋을 보내면, Google Play 콘솔에서 베타 채널에 릴리즈가 자동으로 빌드됩니다. 이 블로그를 개선하기 위해, 여러분의 피드백을 기다리고 있습니다. 질문이나 제안이 있으시면, 이메일로 알려주세요. martin@capgo.app

장치에서 빌드하기

장치에서 빌드가 필요하다면, 수동으로 프로비저닝에 추가해야합니다. 맥에 장치를 연결하고 장치 메뉴를 열어주세요. 장치 ios 메뉴 찾기 그리고 identifier를 복사해주세요. identifier ios 찾기 그리고 다음 명령어를 실행해주세요: fastlane register_new_device 이것은 장치 이름과 identifier를 설정하라고 물어볼 것입니다. 세팅 식별자 ios

문제가 있으신가요

개발 장치 문제가 있으시면, 일반적으로 이 문제를 해결할 수 있습니다.

There는 마법의 명령어가 있습니다. 그게 당신을 구할 수 있습니다:

fastlane match nuke development
fastlane match development

그런 다음: 프로젝트를 정리하기 위해 Shift(⇧)+Command(⌘)+K를 눌러거나 Product > Clean(이름이 Clean Build Folder일 수 있음)을 선택하십시오.

그런 다음 다시 장치에서 앱을 실행하십시오.

감사합니다.

이 블로그는 다음 기사에 기반하고 있습니다:

Keep going from Automatic Capacitor IOS build with GitHub actions using match

If you are using Automatic Capacitor IOS build with GitHub actions using match CI/CD를 자동화하기 위해 match를 사용하여 CI/CD 자동화 계획을 수립하고 Capgo CI/CD 제품 워크플로우에서 Capgo CI/CD를 연결합니다. 제품 워크플로우에서 Capgo Native Builds 제품 워크플로우에서 Capgo Native Builds Capgo Integrations 제품 워크플로우에서 Capgo Integrations CI/CD 통합 CI/CD 통합 CI/CD 통합 구현 세부 사항에 대해 설명하고 GitHub Actions Integration GitHub Actions Integration을 위한 구현 세부 사항.

Capacitor 앱에 대한 실시간 업데이트

웹-layer 버그가 활성화된 경우 Capgo을 통해修정 내용을 배포하는 대신 앱 스토어 승인까지 며칠 기다리지 마세요. 사용자는 배경에서 업데이트를 받으면서 네이티브 변경 사항은 일반적인 검토 경로에 남아 있습니다.

마틴의 인간 지원

시작하기

최신 뉴스

Capgo은 전문적인 모바일 앱을 만들기 위해 필요한 최고의洞察력을 제공합니다.