Lompat ke konten utama
CD Automatis

Automatic Capacitor IOS build with GitHub actions using match

Cara mengatur pipeline CI/CD untuk aplikasi IOS Ionic Anda menggunakan fastlane dan GitHub dalam waktu 5 menit (2022)

Kredit artikel

Martin Donadieu

Pengarang

Valeria

Pengulas

Jordan

Pengedit

Automatic Capacitor IOS build dengan GitHub aksi menggunakan match

Automatic Build iOS dengan GitHub Menggunakan Match

Pengaturan CI/CD untuk aplikasi Capacitor dapat kompleks dan memakan waktu. Berikut adalah apa yang perlu Anda ketahui:

Sekarang kami merekomendasikan menggunakan Capgo Build dengan Capgo CLI untuk build native Capacitor. Petunjuk Panduan Fastlane Match ini dipertahankan untuk tim yang menjaga pipeline aksi GitHub yang sudah ada, tetapi build iOS baru harus menggunakan Capgo CLI sehingga Anda tidak perlu menjaga repositori Fastlane, Match, runner Xcode, sertifikat, dan skrip unggah sendiri.

Capgo Build untuk CI/CD oleh Capgo

Lebih baik menghindari pemeliharaan Fastlane Match, runner Xcode, sertifikat, profil pengaturan, dan skrip unggah. Capgo Pembangunan melakukan pembangunan iOS yang ditandatangani secara native dari pipeline CI/CD yang sudah ada:

  • Berfungsi dengan pipeline Anda: Aktifkan Capgo Pembangunan dari GitHub Actions, GitLab CI, Jenkins, atau skrip lokal setelah pembangunan web Anda dan npx cap sync.
  • Pengesahan dari rahasia CI: Simpan kunci App Store Connect, sertifikat, profil pengaturan, kata sandi, dan ID tim di rahasia CI Anda sendiri.
  • Tidak ada perawatan runner native: Capgo Pembangunan menyediakan lingkungan pembangunan Apple yang dipelihara, sehingga Anda tidak perlu mengelola runner macOS, gambar Xcode, Fastlane, atau repositori Match.
  • Artefak dan pengiriman: Unduh artefak yang ditandatangani untuk QA atau kirimkan rilis pembangunan melalui Capgo CLI.

Harga

  • : Halaman Harga Capgo mulai dari $12/bulan
  • Termasuk pembaruan OTA dan sekitar 15 build asli per bulan
  • Menit tambahan pembangunan dibebankan per menit melalui kredit

Setup Capgo Build di CI/CD

Panduan Setup Manual

Ini yang perlu Anda lakukan:

Penyaluran Terus-menerus untuk iOS menggunakan Fastlane dan GitHub Aksi menggunakan match

Prerequisites

Sebelum melanjutkan dengan tutorial...

  • Pastikan Anda memiliki Fastlane terpasang di mesin pengembangan Anda.
  • Anggota program pengembang iOS.
  • Keinginan untuk membaca 😆…
  • Sebuah tim banyak dev, jika tidak, kami merekomendasikan untuk menggunakan fastlane cert untuk alur kerja yang lebih sederhana.

Perlu diingat tentang harga

Harga GitHub Action

https://github.com/features/actions

Pelayanan ini 'gratis' hingga batas tertentu, tergantung pada mesin yang dipilih.
Kami akan menggunakan sebuah macOS mesin, Anda dapat melihat di screenshot harga dan batasan (harga sesuai dengan pembuatan tutorial, mereka mungkin mengalami perubahan di masa depan)

🔴 Setelah diingatkan tentang persyaratan dan harga, jika Anda suka, kami melanjutkan…

📣 In artikel ini kami asumsikan bahwa aplikasi telah dibuat di iTunes Connect, kami memiliki sertifikat dari ekosistem Apple, semua akan dicopy oleh Fastlane!

Mari kita mulai!

Langkah-langkah yang harus diikuti dalam artikel ini

  1. Menggunakan App Store Connect API dengan Fastlane Match
  2. Persyaratan
  3. Membuat Kunci App Store Connect API
  4. Menggunakan Kunci App Store Connect API
  5. Mengcopy File Fastlane
  6. Mengkonfigurasi Fastlane match

1. Menggunakan App Store Connect API dengan Fastlane Match

Pada Februari 2021, verifikasi dua faktor atau verifikasi dua langkah diperlukan untuk semua pengguna untuk masuk ke App Store Connect. Layer keamanan tambahan untuk ID Apple Anda membantu memastikan bahwa Anda adalah satu-satunya orang yang dapat mengakses akun Anda.
Dari Dukungan Apple

Mulai dengan match memerlukan Anda untuk membatalkan sertifikat yang sudah ada. Tapi jangan khawatir, Anda akan mendapatkan yang baru secara langsung.

Requirements

Untuk dapat menggunakan App Store Connect API, Fastlane memerlukan three tiga

  1. hal.
  2. ID Penerbit.
  3. Kunci File atau Kunci Konten.

Membuat Kunci App Store Connect API

To generate keys, you must have Admin permission in App Store Connect. If you don’t have that permission, you can direct the relevant person to this article and follow the following instructions.

1 — Masuk ke akun App Store Connect.

2 — Pilih Pengguna dan Akses.

Akses Pengguna App Store Connect

3 — Pilih tab Integrasi.

App Store Connect API Integrasi

4 — Klik Buat API Kunci atau tombol (+) Tambah.

App Store Connect API kunci membuat

5 — Masukkan nama untuk kunci. Nama hanya untuk referensi Anda dan bukan bagian dari kunci itu sendiri.

App Store Connect API kunci membuat nama

6 — Di bawah Akses, pilih peran untuk kunci. Peran yang berlaku untuk kunci sama dengan peran yang berlaku untuk pengguna di tim Anda. Lihat izin penggunaan peran. Kami merekomendasikan untuk memilih Manajer Aplikasi.

7 — Klik Generate.

Kunci API tidak dapat dibatasi aksesnya untuk aplikasi tertentu.

Nama kunci baru, ID kunci, tautan download, dan informasi lainnya muncul di halaman.

Unduh Kunci App Store Connect

Anda dapat mengambil semua informasi yang diperlukan di sini.
<1> ID Masalah.
<2> ID Kunci.
<3> Klik "Unduh Kunci API" untuk mengunduh kunci pribadi API. Tautan download hanya muncul jika kunci pribadi belum diunduh. Apple tidak menyimpan salinan kunci pribadi. Jadi, Anda hanya dapat mengunduhnya sekali.

🔴 Simpan kunci pribadi Anda di tempat yang aman. Anda tidak boleh berbagi kunci, menyimpan kunci di repositori code, atau menyertakan kunci di sisi klien code.

Menggunakan Kunci API App Store Connect

Kunci API Key (file p8 yang Anda download), ID kunci, dan ID pengemis diperlukan untuk membuat token JWT untuk otorisasi. Ada beberapa cara bahwa informasi-informasi ini dapat diinputkan ke dalam Fastlane menggunakan aksi baru Fastlane. app_store_connect_api_keyAnda dapat belajar cara lainnya di Dokumentasi FastlaneSaya menunjukkan metode ini karena saya pikir ini adalah cara yang paling mudah untuk bekerja dengan CI kebanyakan, di mana Anda dapat menetapkan variabel lingkungan.

Sekarang kita dapat mengelola Fastlane dengan kunci App Store Connect API.

2. Salin file Fastlane

Fastlane is a Ruby library created to automate common mobile development tasks. Using Fastlane, you can configure custom “lanes” which bundle a series of “actions” that perform tasks that you’d normally perform using Android studio. You can do a lot with Fastlane, but for the purposes of this tutorial, we’ll be using only a handful of core actions.

Buat folder Fastlane di root project Anda dan salin file-file berikut: 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"])

Konfigurasi Fastlane match

Fastlane match is a new approach to iOS’s code signing. Fastlane match membuatnya mudah bagi tim untuk mengelola sertifikat dan profil pengembangan yang diperlukan untuk aplikasi iOS Anda.

Buat repositori pribadi baru bernama certificates, for example on your GitHub personal account or organization.

Mulai Fastlane match untuk aplikasi iOS Anda.

fastlane match init

Lalu pilih opsi #1 (Penyimpanan Git).

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

Tentukan URL repositori yang baru saja dibuat.

[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>

Sekarang Anda memiliki sebuah file bernama di dalam folder Fastlane Matchfile dan _git_url_context: Halaman/area: Situs web pemasaran Capgo. Peran: Label UI pendek atau item navigasi. Dilihat di: halaman trust.astro. Kunci pesan `and` (Dan).

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

Selanjutnya, kita akan menghasilkan sertifikat dan memasukkan kreditensi Anda ketika diminta dengan Fastlane Match.

You will be prompted to enter a passphrase. Remember it correctly because it will be used later by GitHub Actions to decrypt your certificates repository.

fastlane match appstore

Jika semuanya berjalan lancar, Anda seharusnya melihat sesuatu seperti itu:

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

Jika Anda mengalami masalah dengan GitHub dan izin yang diperlukan, mungkin posting ini posting akan membantu Anda untuk menghasilkan token autentikasi untuk git.

Sertifikat dan profil provisioning yang dihasilkan diunggah ke repositori sumber daya sertifikat

Sertifikat App Store Connect

Terakhir, buka aplikasi project di Xcode, dan perbarui profil provisioning untuk konfigurasi rilis aplikasi Anda.

Sertifikat XCode

Beberapa hal yang perlu diperhatikan 💡

MATCH

Untuk CI/CD untuk mengimpor sertifikat dan profil provisioning, perlu memiliki akses ke repositori sertifikat. Anda dapat melakukannya dengan menghasilkan token akses pribadi (harus digunakan sebelumnya) yang memiliki ruang lingkup untuk mengakses atau membaca repositori pribadi.

In GitHub, pergi ke Settings → Pengaturan Pengembang → Token Akses Pribadi → klik Generate New Token → centang repo scope → kemudian klik Generate token.

Buat Token Akses Pribadi

Sudah memiliki salinan token akses pribadi yang dihasilkan. Anda akan menggunakan itu kemudian untuk variabel lingkungan GIT_TOKEN.

Lalu ganti file match yang dihasilkan di folder Fastlane dengan 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)

File ini akan digunakan oleh GitHub Actions untuk mengimport sertifikat dan profil pengembangan. Dan variabel akan ditetapkan di GitHub Rahasia, bukan dengan mengkodekan mereka secara keras di file.

Pengolahan Pembangunan

Dalam Aksi GitHub Anda akan dikenakan biaya berdasarkan menit. you have used for running your CI/CD workflow. From experience, it takes about 10–15 minutes before a build can be processed in App Store Connect.

Untuk proyek pribadi, biaya perkiraan per build dapat mencapai , atau lebih, tergantung pada konfigurasi atau dependensi proyek Anda.Jika Anda memiliki kekhawatiran yang sama dengan saya untuk proyek pribadi, Anda dapat mempertahankan

Jika Anda memiliki kekhawatiran yang sama tentang harga seperti saya untuk proyek pribadi, Anda dapat mempertahankan skip_waiting_for_build_processing context true.

halaman: Halaman produk Live Update. Peran: Label UI singkat atau item navigasi. Pesan kunci `live_update_dynamic_label_to` (Label Dinamis Live Update To).

Apakah ada kelemahan? Anda harus memperbarui kompatibilitas aplikasi Anda di App Store Connect setelah build telah diproses, agar Anda dapat mendistribusikan build ke pengguna Anda. pricing.

3. Konfigurasi Aksi GitHub

Konfigurasi GitHub rahasia

Jadi, kamu ingin tahu dari mana nilai-nilai dari ENV Mengapa rahasia itu datang? Nah, itu tidak lagi rahasia – itu dari rahasia proyek Anda.

Set GitHub rahasia

1. APP_STORE_CONNECT_TEAM_ID - ID tim App Store Connectmu jika kamu memiliki beberapa tim.

2. DEVELOPER_APP_ID - di App Store Connect, pergi ke aplikasi → Aplikasi Informasi → Gulir ke bawah ke bagian General Information bagian aplikasi Anda dan cari Apple ID.

3. DEVELOPER_APP_IDENTIFIER ID aplikasi bundel Anda.

4. DEVELOPER_PORTAL_TEAM_ID ID tim Developer Portal Anda jika Anda bergabung dengan beberapa tim.

5. FASTLANE_APPLE_ID - ID tim Portal Pengembangmu jika kamu memiliki beberapa tim.

6. GIT_USERNAME &amp; GIT_TOKEN - Username Git Anda dan token akses pribadi Anda.

7. MATCH_PASSWORD - Kata sandi yang Anda tentukan ketika menginisialisasi match, akan digunakan untuk mendekripsi sertifikat dan profil pengembang.

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

9. TEMP_KEYCHAIN_USER &amp; TEMP_KEYCHAIN_PASSWORD - Tambahkan pengguna dan kata sandi keychain sementara untuk alur kerja Anda.

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

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

12. APPLE_KEY_CONTENT — App Store Connect API Key 🔺 File Kunci atau Konten Kunci dari .p8, periksa

13. CERTIFICATE_STORE_URL — URL repo kunci Match Anda (misal: https://github.com/***/fastlane-match.git)

4. Konfigurasi file GitHub workflow

Buattlah direktori workflow GitHub.

cd .github/workflows

Dalam workflow Workflow ini harus diaktifkan setelah setiap __CAPGO_KEEP_0__ tag. build-upload-ios.ymldan tambahkan hal berikut.

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

Automatic build dan rilis dengan GitHub actions terlebih dahulu. tagJika Anda memerlukan otomatisasi tag, silakan refer ke Buat build dan rilis otomatis dengan aksi GitHub first.

Kemudian alur kerja ini akan menarik ketergantungan NodeJS Anda, menginstalnya, dan membangun aplikasi JavaScript Anda.

Setiap kali Anda mengirimkan komit baru, rilis akan dibuat di TestFlight.

Aplikasi Anda tidak perlu menggunakan Ionic, hanya basis Capacitor yang wajib, dan dapat memiliki modul Cordova lama, tetapi plugin Capacitor JS harus dipilih.

5. Aktifkan alur kerja

Create a Commit

Buat komit, Anda harus melihat alur kerja aktif di repository.

Aktifkan alur kerja

Push komit baru ke cabang main atau development untuk mengaktifkan alur kerja.

Dibuat dengan komit

Setelah beberapa menit, pembangunan seharusnya tersedia di dashboard App Store Connect Anda.

Dashboard Testflight

Apakah bisa mendeploy dari mesin lokal?

Ya, Anda bisa, dan itu sangat mudah.

Bayangkan Anda memiliki repositori pribadi, dan Anda telah menggunakan menit gratis dari rencana dan Anda tidak ingin membayar untuk rilis baru, atau mungkin Anda lebih suka mengirimkan aplikasi secara manual.

Marilah kita melakukannya

Baik, pertama kita perlu membuat file bernama my_project_path/fastlane di path yang sama dengan Fastfile, hanya di jalur yang sama Fastfile, agar dapat membuat yang sama rahasia Sifat-sifat yang ditemukan di dalam _GitHub_, yaitu:

file .env untuk mendeploy dari mesin lokal

Sekarang, Anda dapat pergi ke terminal dan meluncurkan dan meluncurkan di mesin Anda: dari mesin Anda:

fastlane closed_beta

❌ Hal yang Paling Penting tentang file .env data file, karena kita tidak ingin mengungkapkan data ini, kita harus menambahkannya di sini .gitignoreTidak seperti itu: ❌

fastlane/*.env

Itu harus berfungsi sama seperti yang terjadi dari GitHub Actions pada mesin jarak jauh tetapi di mesin lokal kita. 🍻

Penggunaan Fastlane lokal

Eksekusi terminal: $ Fastlane closed_beta

Jika Anda telah mencapai tahap ini, selamat, sekarang Anda memiliki proses otomatis penuh untuk aplikasi iOS Anda dengan Fastlane dan GitHub Actions.

Setiap kali Anda mengirimkan komit baru, rilis akan dibangun di Google Play console, saluran beta. Saya akan memperbaiki blog ini dengan umpan balik Anda, jika Anda memiliki pertanyaan atau saran, silakan beritahu saya melalui email martin@capgo.app

Bangun di perangkat Anda

Jika Anda masih perlu membangun di perangkat, Anda perlu menambahkannya secara manual ke pengaturan provisi. Hubungkan perangkat Anda ke Mac Anda dan buka menu perangkat Cari menu perangkat iOS Kemudian salin identifier Anda Temukan identifier ios Dan kemudian mulai perintah: fastlane register_new_device Itu akan meminta Anda untuk menetapkan nama perangkat dan identifier: Set identifier ios

Jika Anda mengalami masalah

Jika Anda mengalami masalah dengan perangkat pengembang tidak dapat diuji, dll. yang biasanya dapat diperbaiki.

Ada perintah ajaib yang dapat menyelamatkan Anda:

fastlane match nuke development
fastlane match development

Kemudian : Bersihkan proyek dengan menekan Shift(⇧)+Command(⌘)+K atau memilih Product &gt; Bersihkan (mungkin terlabel 'Bersihkan Folder Pembangunan')

Kemudian coba jalankan aplikasi lagi pada perangkat Anda.

Thanks

Blog ini didasarkan pada artikel berikut:

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

Jika Anda menggunakan Automatic Capacitor IOS build with GitHub actions using match Untuk merencanakan otomatisasi CI/CD, hubungkan dengan Capgo CI/CD untuk alur kerja produk di Capgo Otomatisasi CI/CD, Capgo Bangun Natively untuk alur kerja produk di Capgo Bangun Natively, Capgo Integrasi untuk alur kerja produk di Capgo Integrasi, Integrasi CI/CD untuk detail implementasi di Integrasi CI/CD, dan GitHub Integrasi Aksi untuk detail implementasi di GitHub Integrasi Aksi.

Live updates untuk Capacitor aplikasi

Ketika bug layer web masih aktif, kirimkan perbaikan melalui Capgo daripada menunggu hari-hari untuk persetujuan toko aplikasi. Pengguna mendapatkan update di latar belakang sementara perubahan native tetap dalam jalur review normal.

Dukungan manusia dari Martin

Mulai Sekarang

Terbaru dari Blog Kami

Capgo memberikan Anda wawasan terbaik yang Anda butuhkan untuk membuat aplikasi mobile yang profesional.