Lebih cepat 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 iOS Builds dengan GitHub Aksi menggunakan Match

Mengatur 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 pembangunan native Capacitor. Petunjuk Panduan Fastlane Match ini disimpan untuk tim yang menjaga pipeline aksi GitHub yang sudah ada, tetapi pembangunan 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

Lebihkan Fastlane Match, runner Xcode, sertifikat, profil pengaturan, dan skrip unggah. Capgo Build Menghasilkan aplikasi iOS yang ditandatangani secara native dari pipeline CI/CD yang sudah ada:

  • Bekerja sama dengan pipeline AndaSetelah Capgo Trigger, lakukan Build dari GitHub Actions, GitLab CI, Jenkins, atau skrip lokal setelah build web Anda npx cap sync.
  • Berfungsi dengan pipeline Anda: Aktifkan __CAPGO_KEEP_0__ Build dari __CAPGO_KEEP_1__ Actions, GitLab CI, Jenkins, atau skrip lokal setelah pembangunan web Anda dan
  • Penandatanganan dari rahasia CI: Capgo Build menyediakan lingkungan pembangunan Apple yang terjaga, sehingga Anda tidak perlu mengelola runner macOS, gambar Xcode, Fastlane, atau repositori Match.
  • Artikel dan pengiriman: Unduh artefak yang ditandatangani untuk QA atau kirimkan rilis build melalui Capgo CLI.

Pembayaran

  • Capgo plans start at $12/month
  • Termasuk pembaruan OTA dan sekitar 15 bangun natively per bulan
  • Menit pembangunan tambahan dikenakan biaya per menit melalui kredit

Atur Capgo Build di CI/CD

Petunjuk Pengaturan Manual

Berikut apa yang perlu Anda lakukan:

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

Prerequisites

Sebelum melanjutkan dengan tutorial…

  • Pastikan Anda telah menginstal Fastlane installed Anggota program pengembang iOS.
  • Kepentingan untuk membaca 😆…
  • Ingin membaca 😆…
  • Sebuah tim banyak pengembang, jika tidak, kami sarankan untuk menggunakan fastlane cert Hal penting tentang harga

Harga __CAPGO_KEEP_0__ Action

https://GitHub.com/features/actions

https://github.com/features/actions

Jasa ini gratis hingga batas tertentu, tergantung pada mesin yang dipilih.
Kita akan menggunakan mesin macOS mesin ini dapat dilihat pada screenshot harga dan batasan (harga pada saat pembuatan tutorial, harga dapat berubah di masa depan)

🔴 Setelah diberitahu tentang persyaratan dan harga, jika Anda suka, kita melanjutkan...

📣 Dalam artikel ini kita asumsikan bahwa aplikasi telah dibuat di iTunes Connect, kita memiliki sertifikat dari ekosistem Apple, semuanya akan dicopy oleh Fastlane!

Mari kita mulai!

Langkah-langkah yang perlu 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. Salin File Fastlane
  6. Konfigurasi Fastlane match

1. Menggunakan App Store Connect API dengan Fastlane Match

Mulai 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 Bantuan Apple

Untuk memulai dengan match, Anda harus membatalkan sertifikat yang ada. Tapi jangan khawatir, Anda akan memiliki yang baru secara langsung.

Persyaratan

Untuk dapat menggunakan App Store Connect API, Fastlane memerlukan tiga ID Penerbit.

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

Membuat Kunci App Store Connect API

Untuk menghasilkan kunci, Anda harus memiliki izin Admin di App Store Connect. Jika Anda tidak memiliki izin tersebut, Anda dapat mengarahkan orang yang relevan ke artikel ini dan mengikuti instruksi berikut.

1 — Masuk ke App Store Connect.

2 — Pilih Akses Pengguna App Store Connect.

Akses pengguna App Store Connect

3 — Pilih tab Integrasi.

Integrasi App Store Connect API

4 — Klik Generate API Key atau tombol (+) Tambah.

App Store Connect API kunci aplikasi buat

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

App Store Connect API kunci aplikasi buat nama

6 — Di bawah Akses, pilih peran untuk kunci. Peran yang berlaku untuk kunci sama dengan peran yang berlaku untuk anggota tim Anda. Lihat Izin akses peran. Kami merekomendasikan untuk memilih pengelola aplikasi.

7 — Klik Buat.

Akses kunci API tidak dapat dibatasi pada aplikasi tertentu.

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

App Store Connect download kunci

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 Anda. Tautan unduh 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 code repository, atau termasuk kunci di sisi klien code.

Menggunakan Kunci API App Store Connect

File Kunci API (p8 file yang Anda download), ID kunci, dan ID penggung adalah diperlukan untuk membuat token JWT untuk otorisasi. Ada beberapa cara bahwa informasi-informasi ini dapat dimasukkan ke dalam Fastlane menggunakan aksi baru Fastlane app_store_connect_api_key. Anda dapat mengetahui cara lainnya di Dokumentasi Fastlane. Saya menunjukkan metode ini karena saya pikir ini adalah cara yang paling mudah untuk bekerja dengan CI yang paling umum, di mana Anda dapat menetapkan variabel lingkungan.

Sekarang kita dapat mengelola Fastlane dengan menggunakan kunci App Store Connect API, bagus!

2. Salin File Fastlane

Fastlane adalah sebuah library Ruby yang dibuat untuk mengotomatisasi tugas pengembangan mobile yang umum. Dengan menggunakan Fastlane, Anda dapat mengonfigurasi jalur kustom yang dapat menggabungkan serangkaian aksi yang melakukan tugas-tugas yang biasanya Anda lakukan menggunakan Android Studio. Anda dapat melakukan banyak hal dengan Fastlane, tetapi untuk tujuan tutorial ini, kita hanya akan menggunakan beberapa aksi inti.

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"])

Mengonfigurasi Fastlane match

Fastlane match adalah pendekatan baru untuk tanda tangan code iOS. Fastlane match membuatnya mudah bagi tim untuk mengelola sertifikat dan profil pengembangan yang diperlukan untuk aplikasi iOS Anda.

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

Menginisialisasi 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?

Mengasign URL repositori baru yang telah 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 di dalam folder Fastlane sebuah file bernama Matchfile dan _git_url_harus diatur ke URL HTTPS repositori sertifikat. Jika diinginkan, Anda juga dapat menggunakan SSH, tetapi itu memerlukan langkah yang berbeda untuk dijalankan.

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

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

Anda akan diminta untuk memasukkan kata sandi. Ingatlah dengan benar karena itu akan digunakan kemudian oleh GitHub Actions untuk mengenkripsi repositori sertifikat Anda.

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 postingan ini bantuan akan membantu Anda untuk menghasilkan token autentikasi untuk git.

Sertifikat dan profil pengembangan yang dihasilkan diunggah ke repositori sumber

Sertifikat App Store Connect

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

Sertifikat XCode

Beberapa hal yang perlu diperhatikan 💡

MATCH

Untuk CI/CD untuk mengimport sertifikat dan profil pengaturan, 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.

Di GitHub, buka Pengaturan → Pengaturan Pengembang → Token akses pribadi → klik Generate New Token → centang repo ruang lingkup → kemudian klik Generate token.

Buat Token Akses Pribadi

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

Kemudian 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 provisioning. Dan variabel akan ditetapkan di GitHub Rahasia, bukan dengan mengkodekan mereka di file.

Pengolahan Build

Di GitHub Actions, Anda dikenakan biaya berdasarkan menit Anda telah digunakan untuk menjalankan alur kerja CI/CD. Dari pengalaman, membutuhkan sekitar 10–15 menit sebelum sebuah build dapat diproses di App Store Connect.

Untuk proyek pribadi, biaya perkiraan per build dapat mencapai $0,08/min x 15 menit = $1,2, atau lebih, tergantung pada konfigurasi atau dependensi proyek Anda.

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

Apa yang membuatnya istimewa? Anda harus memperbarui secara manual kelayakan aplikasi Anda di App Store Connect setelah proses build selesai, agar Anda bisa mendistribusikan build ke pengguna.

Parameter ini opsional untuk memperbarui jika Anda ingin menghemat waktu build untuk proyek pribadi. Untuk proyek gratis, ini tidak akan menjadi masalah. harga.

3. Konfigurasi GitHub

Konfigurasi rahasia GitHub

Ever wonder where the values of the ENV Mereka datang dari mana? Nah, rahasia sudah tidak lagi – itu dari rahasia proyek Anda.

Konfigurasi rahasia GitHub

1. APP_STORE_CONNECT_TEAM_ID - ID tim App Store Connect Anda jika Anda bergabung dengan tim-tim yang berbeda.

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

3. DEVELOPER_APP_IDENTIFIER - identifikasi paket aplikasi Anda.

4. DEVELOPER_PORTAL_TEAM_ID - ID tim Portal Pengembang Anda jika Anda bergabung dengan beberapa tim.

5. FASTLANE_APPLE_ID - ID Apple atau alamat email pengembang yang Anda gunakan untuk mengelola aplikasi.

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

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

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 - tentukan pengguna dan kata sandi keychain sementara untuk alur kerja Anda.

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

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

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

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

4. Konfigurasi GitHub file workflow.

Buat direktori GitHub workflow.

cd .github/workflows

Dalam workflow dan tambahkan kode berikut. build-upload-ios.ymlWorkflow ini harus diaktifkan setelah setiap __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: 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

Ini aliran kerja harus diaktifkan setelah setiap GitHub tag, jika Anda perlu otomatisasi tag, silakan lihat Automatic build dan rilis dengan GitHub actions pertama.

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

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

Aplikasi Anda tidak perlu menggunakan Ionic, hanya dasar Capacitor yang wajib, aplikasi Anda dapat memiliki modul Cordova lama, tetapi Capacitor plugin JavaScript disarankan.

5. Aktifkan alur kerja

Create a Commit

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

Trigger aliran kerja

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

Dibuat dengan komit

Sesudah beberapa menit, hasil build harus tersedia di dashboard App Store Connect Anda.

Dashboard Testflight

Apakah bisa mengundeploy dari mesin lokal?

Ya, bisa, dan sangat mudah.

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

Marilah kita lakukan itu

Pertama-tama, kita perlu membuat path projek saya/my_lane path sebuah file yang bernama .env, hanya di path yang sama dengan Fastfile, untuk dapat membuat properti yang sama seperti sifat rahasia Sifat-sifat yang ditemukan di dalam _GitHub_, yaitu:

file .env untuk mendeploy dari mesin lokal

Sekarang, Anda dapat pergi ke terminal dan menjalankan Fastlane dari mesin Anda:

fastlane closed_beta

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

fastlane/*.env

Akan berjalan sama seperti halnya dari GitHub Actions di mesin jarak jauh tetapi di mesin lokal kami.

Jalankan Fastlane Lokal

Eksekusi Terminal: $ Fastlane closed_beta

Jika Anda telah mencapai tahap ini, saya ingin mengucapkan selamat, sekarang Anda memiliki proses otomatisasi yang lengkap untuk aplikasi iOS Anda dengan Fastlane dan GitHub.

Jika Anda telah mencapai tahap ini, selamat, sekarang Anda memiliki proses otomatis yang lengkap untuk aplikasi iOS Anda dengan Fastlane dan Actions. martin@capgo.app

Bangun di perangkat Anda

Jika Anda masih perlu membangun di perangkat Anda, Anda perlu menambahkannya secara manual ke provisioning. Cari Perangkat iOS Cari menu iOS perangkat Lalu salin identifikasi Anda Cari identifikasi iOS fastlane register_new_device Akan meminta Anda untuk menentukan nama perangkat dan identifier: set identifier ios

Set identifikasi iOS

If you have issue with dev device not able to test etc that usually fix it.

Ada perintah ajaib yang dapat menyelamatkan Anda:

fastlane match nuke development
fastlane match development

Lalu : Membersihkan proyek dengan menekan Shift(⇧)+Command(⌘)+K atau memilih Product > Bersihkan (mungkin terlabel sebagai "Folder Bersih Pembangunan")

Lalu coba jalankan aplikasi lagi di perangkat Anda.

Terima kasih.

Blog ini berdasarkan artikel berikut:

Teruskan dari Automatic Capacitor build IOS otomatis dengan aksi GitHub menggunakan match

Jika Anda menggunakan Automatic Capacitor build IOS otomatis dengan aksi GitHub menggunakan match untuk merencanakan otomatisasi CI/CD, hubungkannya dengan Capgo CI/CD untuk alur kerja produk di Capgo CI/CD, Capgo Pembangunan Nativ untuk alur kerja produk di Capgo Pembangunan Nativ, 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.

Pembaruan instan untuk aplikasi Capacitor

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

Terbaru dari Blog Kami

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