본 콘텐츠로 바로 가기
CI/CD

인증서를 사용하는 Capacitor 액션으로 자동화된 GitHub IOS 빌드

How to set up a CI/CD pipeline for your IOS Ionic app using fastlane and GitHub Actions in 5 mins (2024)

기사 기여자

마틴 도나디우

작가

발레리아

리뷰어

조던

편집자

인증서를 사용하는 Capacitor 액션으로 자동화된 GitHub IOS 빌드

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

우리는 __CAPGO_KEEP_0__ 빌드 Capgo 빌드와 Capgo CLI 을 사용하여 네이티브 Capacitor 빌드를 생성합니다. 이 Fastlane 가이드는 기존 GitHub Actions pipeline 유지 관리하는 팀을 위해 유지되지만, 새로운 iOS 빌드는 Capgo CLI을 사용하여 Fastlane, Xcode runner, 인증서, 업로드 스크립트 유지 관리를 생략할 수 있습니다.

Capgo Build for CI/CD by Capgo

__CAPGO_KEEP_0__ 빌드는 __CAPGO_KEEP_1__ Capgo 빌드는 CI/CD pipeline에서 signed 네이티브 iOS 빌드를 실행합니다: __CAPGO_KEEP_0__ 빌드는 pipeline과 함께 작동합니다.

  • : __CAPGO_KEEP_0__ 빌드는 __CAPGO_KEEP_1__ Actions, GitLab CI, Jenkins, 또는 로컬 스크립트에서 웹 빌드 후에 트리거됩니다.: Trigger Capgo Build from GitHub Actions, GitLab CI, Jenkins, or local scripts after your web build and npx cap sync.
  • CI에서 서명하는 것: App Store Connect 키, 인증서, 배포 프로파일, 비밀번호 및 팀 ID를 CI 비밀에 저장하세요.
  • 자연어 실행기 유지 관리가 필요하지 않습니다: Capgo 빌드는 유지 관리되는 Apple 빌드 환경을 제공하므로 macOS 실행기, Xcode 이미지를 관리하거나 Fastlane 경로를 관리할 필요가 없습니다.
  • 아티팩트 및 제출: QA에서 다운로드한 서명된 아티팩트를 제출하거나 Capgo CLI를 통해 릴리스 빌드를 제출할 수 있습니다.

가격

  • : Capgo 플랜은 월 $12부터 시작합니다.
  • : __CAPGO_KEEP_0__ 플랜은 월 $12부터 시작합니다.
  • : __CAPGO_KEEP_0__ 플랜은 월 $12부터 시작합니다.

Set up Capgo Build in CI/CD

: __CAPGO_KEEP_0__ 빌드를 CI/CD에 설정하세요. __CAPGO_KEEP_0__ 빌드 설정 매뉴얼

이것을 해야 합니다:

iOS를 위한 지속적인 배포를 Fastlane과 GitHub 액션 및 인증서와 함께

필요한 조건

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

가격 __CAPGO_KEEP_0__ 액션

https://GitHub.com/features/actions

https://github.com/features/actions

__CAPGO_KEEP_0__무료 __CAPGO_KEEP_0__
한계까지, 선택한 기계에 따라 다릅니다. 우리는 macOS 기계를 사용할 것입니다. 스크린샷에서 가격과 제한을 볼 수 있습니다 (가격은 이 튜토리얼이 작성된 시점의 가격으로, 미래에 변경될 수 있습니다) 요구 사항과 가격에 대한 경고를 받은 후, 계속하세요.

주의: 이 포스트에서 앱이 App Store Connect에 생성되어 있다고 가정합니다. 중요한 정보는 Fastlane에 의해 복사됩니다!

이 튜토리얼에서 배울 내용

포스트에서 따르는 단계

App Store Connect __CAPGO_KEEP_0__를 Fastlane과 함께 사용하는 방법

  1. Using App Store Connect API with Fastlane
    • App Store Connect __CAPGO_KEEP_0__ Key를 생성하는 방법
      • API
      • 애플 스토어 연결 API 키 사용
  2. Fastlane 파일 복사
  3. GitHub 액션 구성

1. 애플 스토어 연결 API을 Fastlane과 함께 사용

2021년 2월부터 모든 사용자가 애플 스토어 연결에 로그인하기 위해 2단계 인증 또는 2단계 인증이 필요합니다. 이 추가 보안 기능은 Apple ID에 대한 보안을 강화하여 계정에 액세스할 수 있는 사람을 단일 개인으로만 보장합니다.
From 애플 지원

요구 사항

Fastlane이 애플 스토어 연결 API을 사용하여 앱을 업로드할 수 있도록 하려면 다음 세 가지를 제공해야 합니다. 세 가지 발급자 ID

  1. Issuer ID
  2. __CAPGO_KEEP_0__ ID
  3. __CAPGO_KEEP_0__ 파일 또는 __CAPGO_KEEP_0__ 내용

App Store Connect API 키 획득

App Store Connect __CAPGO_KEEP_0__ 키를 생성하려면 App Store Connect에서 Admin 권한이 필요합니다. 권한이 없는 경우 관련 사람에게 이 문서를 안내해 주세요.

  1. 로그인 App Store Connect.

  2. 선택 사용자 및 액세스.

App Store Connect 사용자 액세스

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

App Store Connect API 통합

  1. API 키 생성하기 또는 (+) 버튼 클릭

애플 스토어 연결 API 키 생성

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

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

6 — 액세스에서 키에 대한 역할을 선택하세요. 키에 대한 역할은 팀 내 사용자에 대한 역할과 동일합니다. 자세한 내용은 역할 권한을 참조하세요. App manager.

  1. 생성하기.

API 키의 액세스는 특정 앱에 제한할 수 없습니다.

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

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

여기서 모든 세 가지 필요한 정보를 가져올 수 있습니다.
<1> 문제 ID. (APPLE_ISSUER_ID secret)
<2> 키 ID. (APPLE_KEY_ID secret)
<3> "다운로드 API 키"를 클릭하여 API 개인 키를 다운로드하세요. 개인 키가 다운로드되지 않은 경우 다운로드 링크만 표시됩니다. 애플은 개인 키의 복사본을 유지하지 않습니다. 따라서 개인 키를 한번만 다운로드할 수 있습니다.

🔴 Store your private key in a safe place. You should never share your keys, store keys in a code repository, or include keys in client-side code.

애플 스토어 연결 API 키

API 키 파일 (다운로드한 p8 파일), 키 ID, 발급자 ID가 JWT 토큰 인증을 위해 필요합니다. 이 정보를 Fastlane에 전달하는 방법은 여러 가지가 있습니다. Fastlane의 새로운 액션을 사용하여 전달했습니다. app_store_connect_api_keyFastlane 문서를 참조하여 다른 방법을 알아보세요. 이 방법을 사용하는 이유는 CI에서 가장 쉽게 작업할 수 있는 방법이라고 생각하기 때문입니다. 환경 변수를 설정할 수 있기 때문입니다.다운로드한 p8 파일을 Base64로 변환하여 secret로 저장하세요.

Please convert the p8 file that you download to Base64 and store it as a secret (APPLE_KEY_CONTENT).

base64 -i APPLE_KEY_CONTENT.p8 | pbcopy

이제 앱 스토어 연결을 Fastlane으로 관리할 수 있습니다. API 키를 사용하여, 정말 좋습니다!

2. 인증서

XCode를 열고 설정 > 계정 > 애플 ID > 팀을 선택하세요.

Code 서명 식별자

클릭하세요. 인증서 관리.

인증서가 아직 생성되지 않았다면 인증서를 생성할 수 있습니다.

클릭하세요. + 및 선택하세요. 애플 디스트리뷰션

애플 디스트리뷰션

그 다음 키체인으로 이동하여 인증서를 파일로 다운로드해야 합니다. .p12 이 작업을 수행하려면 키체인으로 이동하여 로그인 키체인으로 switch하고 탭을

로 이동해야 합니다. 로그인 키체인 내 인증서.

내 인증서

그 다음에 원하는 인증서를 다운로드할 수 있습니다. (인증서의 날짜를 기준으로 검색하세요)

그 다음에 인증서의 개인 키를 오른쪽 클릭하고 선택하세요 Export.

파일 형식을 선택하세요 개인 정보 교환 (.p12).

그것은 인증서를 파일로 다운로드합니다. .p12 파일을 터미널에서 열어 다음 명령어를 사용하여 Base64로 변환하세요

이것이 당신의

base64 -i BUILD_CERTIFICATE.p12 | pbcopy

비밀입니다. 또한 인증서의 비밀번호를 제공하실 때, 이 비밀번호가 당신의 비밀번호가 될 것입니다. BUILD_CERTIFICATE_BASE64 비밀번호 P12_PASSWORD __CAPGO_KEEP_0__.

3. 프로비전 프로파일

열기 애플 개발자 그리고 올바른 팀을 선택하세요.

그런 다음 새로운 프로파일을 만들기 위해 +

새로운 프로파일 만들기

그리고 선택하세요 앱 스토어 연결.

앱 스토어 연결 선택

그런 다음 올바른 앱을 선택해야 합니다. 주의해야 합니다. 와일드 카드 사용하면 서명이 실패합니다.

올바른 앱 선택

올바른 인증서를 선택하세요. (유효기간이 오늘 날짜와 같은 날짜와 월일이 같은 인증서를 찾으세요) 계속.

올바른 인증서를 선택하세요

마지막으로 프로파일의 이름을 입력하고 프로파일을 생성하세요.

이름은 Fastlane에서 프로파일을 식별하는 데 사용됩니다. APPLE_PROFILE_NAME.

프로파일을 생성하세요

프로파일을 .mobileprovision 파일로 다운로드할 수 있습니다.

프로파일을 다운로드하세요

프로파일을 Base64로 변환하고 BUILD_PROVISION_PROFILE_BASE64).

base64 -i BUILD_PROVISION_PROFILE.mobileprovision | pbcopy

4. Fastlane 파일을 복사하세요

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

Capacitor/Ionic 프로젝트의 루트에 Fastlane 폴더를 만들고 Fastfile을 추가하세요:

  • 폴더: <project-root>/fastlane/
  • 파일: <project-root>/fastlane/Fastfile

이것은 package.json, capacitor.config.*, 그리고 ios/ 폴더와 동일한 레벨입니다. Fastlane 폴더를 ios/App/.

platform :ios do
  desc 'Export ipa and submit to TestFlight'
  lane :beta do
    keychain_info = { keychain_name: "ios-build-#{Time.now.to_i}.keychain", keychain_password: SecureRandom.uuid }
    
    begin
      setup_signing(keychain_info)
      bump_build_number
      build_app_with_signing(keychain_info)
      submit_to_testflight
    ensure
      cleanup_keychain(keychain_info)
    end
  end

  private_lane :setup_signing do |options|
    create_keychain(
      name: options[:keychain_name],
      password: options[:keychain_password],
      unlock: true,
      timeout: 0,
      lock_when_sleeps: false, 
      add_to_search_list: true
    )
    import_cert(options)
    install_profile
    update_project_settings
  end

  lane :bump_build_number do
		file = File.read('../package.json')
		data_hash = JSON.parse(file)
		api_key = app_store_connect_api_key(
      key_id: ENV['APPLE_KEY_ID'],
      issuer_id: ENV['APPLE_ISSUER_ID'],
      key_content: ENV['APPLE_KEY_CONTENT'],
      is_key_content_base64: true,
      duration: 1200,
      in_house: false
    )
		build_num = app_store_build_number(
      api_key: api_key,
			app_identifier: ENV['BUNDLE_IDENTIFIER'],
			live: false
    )
		build_num = build_num + 1
		UI.message("Bumped build number to #{build_num}")
		increment_build_number(
			build_number: build_num,
			xcodeproj: "./ios/App/App.xcodeproj",
			skip_info_plist: true
		)
	end

  private_lane :import_cert do |options|
    cert_path = "#{Dir.tmpdir}/build_certificate.p12"
    File.write(cert_path, Base64.decode64(ENV['BUILD_CERTIFICATE_BASE64']))
    import_certificate(
      certificate_path: cert_path,
      certificate_password: ENV['P12_PASSWORD'] || "",
      keychain_name: options[:keychain_name],
      keychain_password: options[:keychain_password],
      log_output: true
    )
    File.delete(cert_path)
  end  
  
  private_lane :cleanup_keychain do |options|
    delete_keychain(
      name: options[:keychain_name]
    )
  end  

  private_lane :install_profile do
    profile_path = "#{Dir.tmpdir}/build_pp.mobileprovision"
    File.write(profile_path, Base64.decode64(ENV['BUILD_PROVISION_PROFILE_BASE64']))
    UI.user_error!("Failed to create provisioning profile at #{profile_path}") unless File.exist?(profile_path)
    ENV['PROVISIONING_PROFILE_PATH'] = profile_path
    install_provisioning_profile(path: profile_path)
    File.delete(profile_path)
  end

  private_lane :update_project_settings do
    update_code_signing_settings(
      use_automatic_signing: false,
      path: "./ios/App/App.xcodeproj",
      code_sign_identity: "iPhone Distribution",
      profile_name: ENV['APPLE_PROFILE_NAME'],
      bundle_identifier: ENV['BUNDLE_IDENTIFIER'],
      team_id: ENV['APP_STORE_CONNECT_TEAM_ID']
    )
    update_project_team(
      path: "./ios/App/App.xcodeproj",
      teamid: ENV['APP_STORE_CONNECT_TEAM_ID']
    )
  end

  private_lane :build_app_with_signing do |options|
    unlock_keychain(
      path: options[:keychain_name],
      password: options[:keychain_password],
      set_default: false
    )
    build_app(
      workspace: "./ios/App/App.xcworkspace",
      scheme: "App",
      configuration: "Release",
      export_method: "app-store",
      output_name: "App.ipa",
      export_options: {
        provisioningProfiles: {
          ENV['BUNDLE_IDENTIFIER'] => ENV['APPLE_PROFILE_NAME']
        }
      },
      xcargs: "-verbose",
      buildlog_path: "./build_logs",
      export_xcargs: "-allowProvisioningUpdates",
    )
  end   

  private_lane :submit_to_testflight do
    api_key = app_store_connect_api_key(
      key_id: ENV['APPLE_KEY_ID'],
      issuer_id: ENV['APPLE_ISSUER_ID'],
      key_content: ENV['APPLE_KEY_CONTENT'],
      is_key_content_base64: true,
      duration: 1200,
      in_house: false
    )
    pilot(
      api_key: api_key,
      skip_waiting_for_build_processing: true,
      skip_submission: true,
      distribute_external: false,
      notify_external_testers: false,
      ipa: "./App.ipa"
    )
  end
end

5. 비밀 설정

GitHub Actions는 다음 단계에서 구성한 저장소 비밀을 사용합니다. 로컬 파일이 필요하지 않습니다. Fastlane을 로컬에서 실행하거나 테스트하려면 로컬 파일이 필요합니다. .env 로컬 테스트를 위해

__CAPGO_KEEP_0__ 폴더에 <project-root>/fastlane/.env __CAPGO_KEEP_0__ 폴더의 Fastfile. 이 파일은 커밋하지 마세요. Add fastlane/.env.gitignore 첫 번째 (또는 이미 무시되어 있는지 확인하세요). 여기 예시가 있습니다:

APP_STORE_CONNECT_TEAM_ID=UVTJ336J2D
BUNDLE_IDENTIFIER=ee.forgr.testfastlane
# See previous section for these secrets
BUILD_CERTIFICATE_BASE64=
BUILD_PROVISION_PROFILE_BASE64=
APPLE_KEY_ID=
APPLE_ISSUER_ID=
APPLE_KEY_CONTENT=
P12_PASSWORD=
APPLE_PROFILE_NAME=

APP_STORE_CONNECT_TEAM_ID를 가져오기

Developer Center로 이동하세요. 스크롤 다운하여 부분을 찾으세요. Membership details 이 값은 Team ID secret APP_STORE_CONNECT_TEAM_ID app-store-connect-team-id

BUNDLE_IDENTIFIER를 가져오기

이름

  1. Xcode 열기
  2. 프로젝트 탐색기에서 이 아이콘을 두 번 클릭하세요. App 프로젝트 탐색기에서 이 아이콘을 두 번 클릭하세요.
  3. 그런 다음 탭을 클릭하세요. Signing and Capabilities
  4. secret에 설정해야 하는 값입니다. Bundle identifierbundle-identifier-xcode BUNDLE_IDENTIFIER 6. 빌드 처리
Actions에서 __CAPGO_KEEP_0__에서 빌드 처리가 완료되는데 약 10-15분 정도 소요됩니다. 이 시간 동안 사용한 CI/CD 워크플로우의 분량에 따라 요금이 청구됩니다.

Actions에서 __CAPGO_KEEP_0__에서 빌드 처리가 완료되는데 약 10-15분 정도 소요됩니다. 이 시간 동안 사용한 CI/CD 워크플로우의 분량에 따라 요금이 청구됩니다.

Actions에서 GitHub에서 빌드 처리가 완료되는데 약 10-15분 정도 소요됩니다. 이 시간 동안 사용한 CI/CD 워크플로우의 분량에 따라 요금이 청구됩니다. Actions에서 __CAPGO_KEEP_0__에서 빌드 처리가 완료되는데 약 10-15분 정도 소요됩니다. 이 시간 동안 사용한 CI/CD 워크플로우의 분량에 따라 요금이 청구됩니다. Actions에서 __CAPGO_KEEP_0__에서 빌드 처리가 완료되는데 약 10-15분 정도 소요됩니다. 이 시간 동안 사용한 CI/CD 워크플로우의 분량에 따라 요금이 청구됩니다.

개인 프로젝트의 경우, 빌드에 대한 예상 비용은 1분당 $0.08 x 15분 = $1.2 또는 그 이상으로, 프로젝트의 구성 및 의존성에 따라 달라질 수 있습니다. $0.08/분 x 15분 = $1.2또는 더 비용이 들 수 있습니다.

개인 프로젝트의 비용에 대한 걱정이라면, skip_waiting_for_build_processing 을 설정할 수 있습니다. true이 설정을 활성화하면 App Store Connect가 빌드를 처리하는 것을 기다리지 않고 빌드 시간을 절약할 수 있습니다.

그러나, 이 설정을 활성화하면 App Store Connect에서 앱의 준수 정보를 수동으로 업데이트해야 하며, 사용자에게 빌드를 배포하기 전에 빌드를 업데이트해야 합니다.

This optimization is mainly useful for private projects where build minutes cost money. For public/free projects, the build minutes are free so there’s no need to enable this setting. See GitHub’s 더 많은 정보는 페이지를 참조하세요.

7. Setup GitHub Actions

Configure GitHub secrets

비밀 키를 __CAPGO_KEEP_0__ .env 파일에서 복사하고 GitHub

로 이동하세요. 설정 &gt; Secrets and variables &gt; Actions &gt; New repository secret

github-secrets

2. BUILD_CERTIFICATE_BASE64 - Base64 encoded certificate.

3. BUILD_PROVISION_PROFILE_BASE64 - Base64 encoded provisioning profile.

4. BUNDLE_IDENTIFIER - 앱의 번들 식별자.

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

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

7. APPLE_KEY_CONTENT — App Store Connect API Key 🔺 앱의 인증서 내용. .p8, 확인하세요.

8. GitHub 워크플로 파일을 구성하세요.

GitHub 워크플로 디렉토리를 생성하세요.

cd .github/workflows

폴더 안에 파일을 생성하세요. workflow 그리고 다음을 추가하세요. build-upload-ios.yml__CAPGO_KEEP_0__

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: '3.0'
          bundler-cache: true
      - uses: maierj/fastlane-action@v3.1.0
        env:
          APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }}
          BUNDLE_IDENTIFIER: ${{ secrets.BUNDLE_IDENTIFIER }}
          BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
          BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}
          APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }}
          APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }}
          APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }}
          P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
          APPLE_PROFILE_NAME: ${{ secrets.APPLE_PROFILE_NAME }}
        with:
          lane: ios beta
      - name: Upload release bundle
        uses: actions/upload-artifact@v6
        with:
          name: ios-release
          path: ./App.ipa
          retention-days: 10

이 워크플로우는 각 GitHub 후에 트리거되어야 합니다. 태그태그를 자동화하려면, 참조하십시오. 자동 빌드 및 릴리즈와 GitHub 액션 먼저.

그런 다음 이 워크플로우는 NodeJS 의존성을 가져와, 설치하고, 자바스크립트 앱을 빌드합니다.

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

앱은 Ionic을 사용하지 않아도 됩니다. 단, Capacitor 베이스만 필수입니다. 오래된 Cordova 모듈을 사용할 수 있지만, Capacitor JS 플러그인은 선호됩니다.

8. 워크플로우를 트리거하세요.

커밋을 생성하세요.

커밋을 생성하세요. 커밋을 생성하세요.자동 빌드가 시작되면, __CAPGO_KEEP_0__에서 활성 워크플로를 확인할 수 있습니다.

워크플로 트리거

브랜치에 새로운 커밋을 푸시하세요 main 또는 development Capacitor Live-Update Alternatives 비교 페이지에서 Capgo 제품/브랜드 및 개발자 용어를 정확하게 보존하세요.

Appflow 비교/이동 마케팅 복사본에서 Capgo 제품/브랜드 및 개발자 용어를 정확하게 보존하세요.

Capawesome 비교 페이지에서 Capgo 제품/브랜드 및 개발자 용어를 정확하게 보존하세요.

컨설팅 서비스 페이지에서 Capgo 제품/브랜드 및 개발자 용어를 정확하게 보존하세요.

Appflow 비교/이동 마케팅 복사본에서 Capgo 제품/브랜드 및 개발자 용어를 정확하게 보존하세요.

워크플로 트리거

커밋 __CAPGO_KEEP_0__으로 시작되었습니다.

CI/CD 설정 매뉴얼

대안 CI/CD 플랫폼

실시간 업데이트 & 배포

감사합니다

이 블로그는 다음 기사에 기반합니다:

자동 Capacitor IOS 빌드와 GitHub 액션으로 인증서를 사용하여 계속 진행하세요

자동 __CAPGO_KEEP_0__ IOS 빌드와 __CAPGO_KEEP_1__ 액션으로 인증서를 사용하여 계속 진행하세요 자동 Capacitor IOS 빌드와 GitHub 액션으로 인증서를 사용하여 계속 진행하세요 __CAPGO_KEEP_0__ CI/CD와 연결하세요 Capgo CI/CD Capgo Native Builds Capgo Native Builds Capgo Integrations Capgo Integrations for the product workflow in Capgo Integrations, CI/CD 통합 CI/CD 통합 구현 세부 사항과 GitHub 액션 통합 GitHub 액션 통합 구현 세부 사항과

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

웹层 버그가 활성화된 경우 Capgo를 통해 픽스를 배포하는 대신 앱 스토어 승인까지 며칠 기다리지 마십시오. 사용자는 배경에서 업데이트를 받으며 네이티브 변경 사항은 일반적인 검토 경로에 남게 됩니다.

마틴의 인간 지원

시작하기

최신 뉴스

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