Lompat ke konten utama
Pengaturan CI/CD

Pembangunan Otomatis Capacitor IOS dengan GitHub tindakan menggunakan match

Cara Mengatur Pipa Pengaturan CI/CD untuk Aplikasi IOS Ionic Anda menggunakan fastlane dan GitHub Aksi dalam 5 menit (2022)

Martin Donadieu

Martin Donadieu

Pengembang Konten

Pembangunan Otomatis Capacitor IOS dengan GitHub tindakan menggunakan match

Pembangunan iOS Otomatis dengan GitHub Aksi menggunakan Match

Mengatur CI/CD untuk aplikasi Capacitor dapat kompleks dan memakan waktu. Berikut ini yang perlu Anda ketahui:

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

Capgo Bangun untuk CI/CD oleh Capgo

Lebihkan Fastlane Match, runner Xcode, sertifikat, profil pengaturan, dan skrip unggah. Capgo Bangun melakukan pembangunan iOS yang ditandatangani secara native dari pipeline CI/CD Anda:

  • Berfungsi dengan pipeline Anda: Aktifkan Capgo Bangun dari GitHub Actions, GitLab CI, Jenkins, atau skrip lokal setelah pembangunan web Anda dan npx cap sync.
  • Tanda tangan dari rahasia CI: Simpan kunci App Store Connect, sertifikat, profil pengaturan, kata sandi, dan ID tim di rahasia CI Anda sendiri.
  • Tidak ada pemeliharaan runner native: 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.

Pricing

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

Atur Capgo Build di CI/CD

Petunjuk Pengaturan Tangan

Berikut ini yang perlu Anda lakukan:

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

Persyaratan Sebelumnya

Sebelum melanjutkan dengan tutorial…

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 sebuah mesin macOS, Anda dapat melihat harga dan batasan (harga pada saat pembuatan tutorial, mereka mungkin mengalami perubahan di masa depan) Setelah diberi peringatan tentang persyaratan dan harga, jika Anda suka, kita melanjutkan…

🔴 Dalam postingan ini kita asumsikan bahwa kita telah membuat aplikasi di iTunes Connect, kita memiliki sertifikat dari ekosistem Apple, semuanya akan dicopy oleh Fastlane!

📣 Mari kita mulai!

Langkah-langkah yang perlu diikuti dalam postingan ini

Menggunakan App Store Connect __CAPGO_KEEP_0__ dengan Fastlane Match

  1. Using App Store Connect API with Fastlane Match
  2. Membuat Kunci App Store Connect __CAPGO_KEEP_0__
  3. Menggunakan Kunci App Store Connect API
  4. Menggunakan App Store Connect API dengan Fastlane Match
  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 Dukungan Apple

Mengawali dengan match memerlukan Anda untuk 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 hal.

  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 Pengguna dan Akses.

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 pembuat

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

App Store Connect API kunci pembuat 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. Kami merekomendasikan untuk memilih pengelola aplikasi.

7 — Klik Buat.

Akses API kunci tidak dapat dibatasi untuk 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> Kunci ID.
<3> Klik “Unduh API Kunci” 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 pengirim adalah diperlukan untuk membuat token JWT untuk otorisasi. Ada beberapa cara bahwa informasi-informasi ini dapat diinputkan ke Fastlane menggunakan aksi baru Fastlane, app_store_connect_api_key. Anda dapat belajar 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 library Ruby yang dibuat untuk otomatisasi 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 proyek 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 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.

Buat repositori pribadi baru bernama certificates, misalnya di akun pribadi atau organisasi Anda di GitHub.

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

Tetapkan 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 File Match harus diatur ke URL HTTPS repositori sertifikat. Jika diinginkan, Anda juga dapat menggunakan SSH, tetapi itu memerlukan langkah yang berbeda untuk dijalankan. Selanjutnya, kita akan mengenerate sertifikat dan memasukkan kreditensi Anda ketika diminta dengan Fastlane Match. _git_url_Anda akan diminta untuk memasukkan kata sandi. Ingatlah dengan benar karena akan digunakan nanti oleh __CAPGO_KEEP_0__ Actions untuk mengenkripsi repositori sertifikat Anda.

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

Jika semuanya berjalan dengan baik, Anda seharusnya melihat sesuatu seperti itu:

Jika Anda mengalami masalah dengan GitHub dan izin yang diperlukan, mungkin postingan ini

fastlane match appstore

ini

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

If you experienced any problem with GitHub and the necessary permissions, maybe this Sertifikat dan profil pengembangan yang dihasilkan diunggah ke sumber daya repositori sertifikat Sertifikat App Store Connect

Terakhir, buka

__CAPGO_KEEP_0__

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

Sertifikat XCode

Beberapa hal yang perlu diperhatikan 💡

MATCH

Untuk CI/CD dapat mengimport sertifikat dan profil pengaturan, ia harus 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, pergi ke PengaturanPengaturan PengembangToken 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.

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)

This will be used by GitHub Actions to import the certificates and provisioning profiles. And var will be set in GitHub Secrets, instead of hard-coding them in the file.

Dan variabel akan ditetapkan di __CAPGO_KEEP_1__ Secrets, bukan dengan mengkodekan mereka di file.

In GitHub Actions, Dalam __CAPGO_KEEP_0__ Actions, biaya Anda berdasarkan menit

yang telah digunakan untuk menjalankan alur kerja CI/CD Anda. Dari pengalaman, membutuhkan sekitar 10–15 menit sebelum bangun dapat diproses di App Store Connect. Untuk proyek pribadi, biaya perkiraan per bangun dapat mencapai$0,08/min x 15 menit = $1,2

, atau lebih, tergantung pada konfigurasi atau dependensi proyek Anda. skip_waiting_for_build_processing ke true.

Apa yang menjadi kelemahan? Anda harus memperbarui secara manual kompatibilitas aplikasi Anda di App Store Connect setelah proses pembangunan selesai, agar Anda dapat mendistribusikan hasil pembangunan ke pengguna.

Parameter ini hanya opsional untuk diperbarui jika Anda ingin menghemat waktu pembangunan untuk proyek pribadi. Untuk proyek gratis, ini tidak akan menjadi masalah sama sekali. Lihat harga.

3. Konfigurasi GitHub Aksi

Konfigurasi GitHub rahasia

Pernahkah Anda bertanya-tanya dari mana nilai-nilai ENV berasal? Nah, itu tidak lagi rahasia – itu dari rahasia proyek Anda. 🤦

Konfigurasi rahasia GitHub

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

2. DEVELOPER_APP_ID - di App Store Connect, pergi ke aplikasi → Informasi Aplikasi → Gulir ke bawah ke General Information bagian 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 berada di beberapa tim.

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

6. GIT_USERNAME & GIT_TOKEN - Nama pengguna 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 pengaturan.

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

9. TEMP_KEYCHAIN_USER & TEMP_KEYCHAIN_PASSWORD - tentukan pengguna dan kata sandi kunci sementara untuk alur kerja Anda.

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

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

12. APPLE_KEY_CONTENT — App Store Connect API Kunci 🔺 File Kunci atau Konten Kunci .p8 periksa, — URL repositori Anda untuk Match kunci (misal:

13. CERTIFICATE_STORE_URL https://__CAPGO_KEEP_0__.com/***/fastlane_match.git 4. Konfigurasi github workflow file)

Buat direktori GitHub workflow.

Create a GitHub workflow directory.

cd .github/workflows

dan tambahkan kode berikut. workflow Workflow ini harus diaktifkan setelah setiap __CAPGO_KEEP_0__ build-upload-ios.ymlkeep

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 tag, jika Anda membutuhkan untuk otomatisasi tag, silakan lihat Pembangunan otomatis dan rilis dengan GitHub aksi 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 harus dipilih.

5. Aktifkan alur kerja

Buat Komit

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.

Dimulai dengan komit

Setelah beberapa menit, konstruksi harus tersedia di dashboard App Store Connect Anda.

Dashboard Testflight

Bisa mengundeploy dari mesin lokal?

Ya, Anda bisa, dan itu 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.

Mari kita lakukan

Baik, terlebih dahulu kita perlu membuat my_project_path/fastlane alamat file yang disebut .env, di path yang sama dengan Fastfile, agar dapat membuat file yang sama rahasia sifat-sifat yang ditemukan di dalam _GitHub, yaitu:

.env file untuk deploy dari mesin lokal

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

fastlane closed_beta

❌ Penting tentang .env file, karena kami tidak ingin mengungkapkan data ini, kami harus menambahkannya di .gitignore, seperti itu: ❌

fastlane/*.env

Harus berfungsi sama seperti yang terjadi dari GitHub Aksi di mesin jarak jauh tetapi di mesin lokal Anda. 🍻

Penggunaan Fastlane lokal

Eksekusi terminal: $ Fastlane closed_beta

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

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

Buat pada perangkat Anda

Jika Anda masih perlu membangun pada perangkat Anda, Anda perlu menambahkannya secara manual ke pengaturan. Hubungkan perangkat Anda ke Mac Anda dan buka menu perangkat temukan menu perangkat ios Lalu salin identifikasi Anda temukan identifikasi ios Dan kemudian mulai perintah: fastlane register_new_device itu akan meminta Anda untuk menetapkan nama perangkat dan identifikasi: set identifikasi ios

jika Anda mengalami masalah

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

Ada perintah ajaib yang dapat menyelamatkan Anda:

fastlane match nuke development
fastlane match development

Lalu: Bersihkan proyek dengan menekan Shift(⇧)+Command(⌘)+K atau memilih Produk > Bersihkan (mungkin terlabel “Bersihkan Folder Pembangunan”)

Lalu coba jalankan aplikasi lagi di perangkat Anda.

Terima kasih

Blog ini berdasarkan artikel berikut:

Pembaruan Langsung untuk Capacitor aplikasi

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

Mulai Sekarang

Terbaru dari Blog kami

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