Lebih lanjut ke konten utama
CI/CD

Automatic Capacitor IOS build with GitHub actions using match

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

Kredit artikel

Martin Donadieu

Pengarang

Valeria

Pengulas

Jordan

Editor

Pembangunan Otomatis Capacitor IOS dengan GitHub menggunakan match

Pembangunan Otomatis iOS dengan GitHub menggunakan Match

Pengaturan CI/CD untuk aplikasi Capacitor dapat rumit 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 Match Fastlane ini dipertahankan untuk tim yang menjaga pipeline GitHub Actions 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 melakukan build iOS native yang ditandatangani dari pipeline CI/CD yang ada:

  • Berfungsi dengan pipeline Anda: Trigger Capgo Build dari GitHub Actions, GitLab CI, Jenkins, atau skrip lokal setelah build web Anda dan npx cap sync.
  • Penandatanganan 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 Build menyediakan lingkungan build Apple yang dipelihara, sehingga Anda tidak perlu mengelola runner macOS, gambar Xcode, Fastlane, atau repositori Match.
  • Artikel dan pengiriman: Unduh artikel yang ditandatangani untuk QA atau kirimkan build rilis melalui Capgo CLI.

Harga

  • Capgo plans start at $12/month
  • Navigation/label for the Pricing page. Page/area: Capgo Builder / native cloud build product page. Role: Section subtitle or tagline. Seen in: page native-build.astro. Message key `native_build_builder_pricing_eyebrow` (Native Build Builder Pricing Eyebrow). | Navigation/label for the Pricing page. Page/area: Capgo marketing website. Role: Call-to-action button or link label. Seen in: component BlogMidArticleCta.astro. Message key `blog_mid_article_china_cta_pricing_button` (Blog Mid Article China CTA Pricing Button). | Navigation/label for the Pricing page. Page/area: Capgo marketing website. Role: Short UI label or navigation item. Seen in: site footer, site header, page pricing.astro. Message key `pricing` (Pricing).
  • Menit pembangunan tambahan dikenakan biaya per menit melalui kredit

Konfigurasi Capgo Pembangunan di CI/CD

Panduan Konfigurasi Manual

Ini yang perlu Anda lakukan:

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

Prasyarat

Sebelum melanjutkan dengan tutorial...

  • Pastikan Anda telah menginstal Fastlane di mesin pengembangan Anda. Anggota program pengembang iOS.
  • Kepada yang ingin membaca 😆...
  • Penggunaan __CAPGO_KEEP_0__ Actions menggunakan match
  • A tim team banyak pengembang, 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 waktu pembuatan tutorial, mereka mungkin mengalami perubahan di masa depan)

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

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

Mari masuk ke dalamnya 🤿

Langkah-langkah untuk diikuti dalam postingan 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

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

Mulai dengan match memerlukan Anda untuk membatalkan sertifikat yang sudah ada. Tapi jangan khawatir, Anda akan mendapatkan 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 yang berikut.

1 — Masuk ke App Store Connect.

2 — Pilih Pengguna dan Akses.

Akses Pengguna App Store Connect

3 — Pilih tab Integrasi.

App Store Connect API Integrasi

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

App Store Connect API kunci membuat

5 — Masukkan nama untuk kunci. Nama ini 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 adalah sama peran yang berlaku untuk pengguna di tim Anda. Lihat izin peran. Kami merekomendasikan untuk memilih Manajer Aplikasi.

7 — Klik Buat.

Tidak mungkin membatasi akses kunci API ke aplikasi tertentu.

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

Unduh Kunci App Store Connect

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

🔴 Simpan kunci pribadi kamu di tempat yang aman. Kamu tidak boleh berbagi kunci, menyimpan kunci di code repository, atau menyertakan kunci di code sisi klien.

Menggunakan Kunci API App Store Connect

File kunci API (file p8 yang kamu download), ID kunci, dan ID penggugat diperlukan untuk membuat token JWT untuk otorisasi. Ada beberapa cara untuk memasukkan informasi-informasi ini ke dalam Fastlane menggunakan aksi baru Fastlane. app_store_connect_api_keyKamu bisa belajar cara lainnya di Documentasi FastlaneSebab saya pikir cara ini adalah cara termudah untuk bekerja dengan CI yang paling umum, di mana kamu bisa mengatur variabel lingkungan.

Sekarang kita bisa mengelola Fastlane dengan kunci App Store Connect API, hebat!

2. Salin file Fastlane

Fastlane adalah sebuah library Ruby yang dibuat untuk mengotomatisasi tugas pengembangan mobile yang umum. Dengan menggunakan Fastlane, kamu bisa mengonfigurasi jalur

lanes

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

yang mengumpulkan serangkaian

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

actions

yang melakukan tugas yang biasanya kamu lakukan menggunakan Android Studio. Kamu bisa melakukan banyak hal dengan Fastlane, tetapi untuk tujuan tutorial ini, kita hanya akan menggunakan beberapa aksi inti. Buat folder Fastlane di root project dan salin file-file berikut: Fastfile is a new approach to iOS’s code signing. Fastlane match makes it easy for teams to manage the required certificates and provisioning profiles for your iOS apps.

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

Initiliasikan 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 di folder Fastlane sebuah file bernama Matchfile dan _git_url_context: Halaman/area: Situs web pemasaran Capgo. Peran: Label UI singkat atau item navigasi. Dilihat di: halaman trust.astro. Kunci pesan `dan` (Dan).

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

harus diset ke URL HTTPS repositori sertifikat. Jika Anda ingin menggunakan SSH, Anda dapat melakukannya, tetapi itu memerlukan langkah tambahan untuk dijalankan.

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

Anda akan diminta untuk memasukkan kata sandi. Ingatlah dengan benar karena kata sandi tersebut akan digunakan nanti oleh __CAPGO_KEEP_0__ Actions untuk mengenkripsi repositori sertifikat Anda.

[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 dapat membantu Anda untuk menghasilkan token autentikasi untuk Git. posting akan membantu Anda untuk menghasilkan token autentikasi untuk Git.

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

Sertifikat App Store Connect

Terakhir, buka sertifikat Anda di Xcode, dan perbarui profil pengembangan untuk konfigurasi rilis aplikasi Anda. project Sertifikat XCode

Beberapa hal yang perlu diperhatikan 💡

MATCH

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

Dalam __CAPGO_KEEP_0__, buka

In GitHub, go to Pengaturan → Pengaturan Pengembang → Akses Token Pribadi → klik Generate New Token → centang repo ruang lingkup → 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.

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)

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__ Rahasia, bukan dengan mengkodekan mereka secara keras di file.

In GitHub Actions, anda dibebankan berdasarkan menit anda telah digunakan untuk menjalankan alur kerja CI/CD. Dari pengalaman, membutuhkan waktu sekitar 10–15 menit sebelum 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 dengan saya untuk proyek pribadi, Anda dapat mempertahankan skip_waiting_for_build_processing ke true.

context

Page/area: Halaman produk live update. Peran: Label UI singkat atau item navigasi. Pesan kunci `live_update_dynamic_label_to` (Live Update Dynamic Label To). Apa yang menjadi masalahnya? Anda harus memperbarui kinerja kompatibilitas aplikasi Anda di App Store Connect setelah build telah diproses, agar Anda dapat mendistribusikan build ke pengguna Anda..

3. Setup GitHub Actions

Configure GitHub secrets

Selalu penasaran dari mana nilai-nilai dari ENV berasal? Nah, itu tidak lagi rahasia – itu dari rahasia proyek Anda. 🤦

Set GitHub secrets

1. APP_STORE_CONNECT_TEAM_ID - ID tim App Store Connect Anda jika Anda berada di tim yang lebih dari satu.

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

3. DEVELOPER_APP_IDENTIFIER - ID paket aplikasi Anda.

4. DEVELOPER_PORTAL_TEAM_ID - ID tim Portal Pengembang Anda jika Anda berada di tim yang lebih dari satu.

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 pengaturan.

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 kunci cadangan untuk aliran kerja Anda.

10. APPLE_KEY_ID — App Store Connect API Kunci 🔺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 repositori kunci Match Anda (misalnya: https://github.com/***/fastlane_match.git)

4. Konfigurasi file GitHub workflow.

Buattlah direktori GitHub workflow.

cd .github/workflows

Di dalam direktori tersebut, buatlah file bernama __CAPGO_KEEP_0__ dan tambahkan kode berikut. workflow Alur ini harus diaktifkan setelah setiap __CAPGO_KEEP_0__ tag. build-upload-ios.ymlJika Anda memerlukan otomatisasi tag, silakan lihat artikel Automatic build dan release dengan __CAPGO_KEEP_0__ actions terlebih dahulu.

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

This workflow should be triggered after each GitHub Setiap kali Anda mengirimkan commit baru, rilis akan dibangun di TestFlight.folder, buatlah file bernama __CAPGO_KEEP_0__ dan tambahkan kode berikut. Alur ini harus diaktifkan setelah setiap GitHub tag. Jika Anda memerlukan otomatisasi tag, silakan lihat artikel Automatic build dan release dengan __CAPGO_KEEP_0__ actions terlebih dahulu.

Setelah itu, alur ini akan menarik dependensi NodeJS, menginstalnya, dan membangun aplikasi JavaScript Anda.

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

Jangan khawatir, aplikasi Anda tidak perlu menggunakan Ionic, hanya Capacitor dasar yang wajib, dan dapat memiliki modul Cordova lama, tetapi Capacitor plugin JS 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 context:HTML teks fragmen dari string Capgo UI yang lebih panjang (kunci induk `alternatives_cta_questions`). Halaman/area: Halaman perbandingan alternatif Capacitor live-update. Peran: Paragraf pemasaran atau hukum yang panjang. Dilihat di: halaman alternatives.astro. Simpan Capgo produk/merek dan istilah pengembang secara tepat. Kunci pesan `alternatives_cta_questions` (Alternatif CTA Pertanyaan). | Teks fragmen HTML dari string Capgo UI yang lebih panjang (kunci induk `appflow_cta_questions`). Halaman/area: Halaman perbandingan/migrasi pemasaran Appflow. Peran: Paragraf pemasaran atau hukum yang panjang. Dilihat di: halaman ionic-appflow.astro. Simpan Capgo produk/merek dan istilah pengembang secara tepat. Kunci pesan `appflow_cta_questions` (Appflow CTA Pertanyaan). | Teks fragmen HTML dari string Capgo UI yang lebih panjang (kunci induk `capwesome_cta_questions`). Halaman/area: Halaman perbandingan Capawesome. Peran: Paragraf pemasaran atau hukum yang panjang. Dilihat di: halaman capwesome.astro. Simpan Capgo produk/merek dan istilah pengembang secara tepat. Kunci pesan `capwesome_cta_questions` (Capwesome CTA Pertanyaan). | Teks fragmen HTML dari string Capgo UI yang lebih panjang (kunci induk `consulting_faq_subtitle`). Halaman/area: Halaman layanan konsultasi. Peran: Judul atau tagline bagian. Dilihat di: halaman consulting.astro. Simpan Capgo produk/merek dan istilah pengembang secara tepat. Kunci pesan `consulting_faq_subtitle` (Subjudul FAQ Konsultasi). | Halaman/area: Halaman perbandingan/migrasi pemasaran Appflow. Peran: Label UI singkat atau item navigasi. Dilihat di: halaman ionic-appflow.astro, halaman ionic-enterprise-plugins.astro, halaman solusi/ionic-enterprise-plugins.astro. Kunci pesan `appflow_plugins_or` (Appflow Plugin Atau).

Aktifkan alur kerja.

Dibuat dengan komit pertama kali pada tanggal __CAPGO_KEEP_0__ dan __CAPGO_KEEP_1__ setelah itu, Anda harus melihat alur kerja aktif di repository Anda setelah beberapa menit, hasil build harus tersedia di dashboard App Store Connect Anda.

Dashboard Testpenerbangan

Apakah bisa mendeploy dari mesin lokal?

Ya, kamu bisa, dan itu sangat mudah.

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

Mari kita lakukan itu

Baik, pertama kita perlu membuat file di my_project_path/fastlane di path sebuah file bernama .env, hanya di path yang sama dengan Fastfile, agar bisa membuat yang sama rahasia properti yang ditemukan dalam _GitHub, yaitu sebagai berikut:

file .env untuk mengdeploy dari mesin lokal

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

fastlane closed_beta

❌ Hal yang penting tentang file .env karena kita tidak ingin mengungkapkan data ini, kita harus menambahkannya dalam .gitignore❌

fastlane/*.env

It seharusnya berfungsi sama seperti hal itu terjadi dari GitHub Actions pada mesin jarak jauh tetapi di mesin lokal kita. 🍻

Jalankan Fastlane lokal

Eksekusi terminal: $ Fastlane closed_beta

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

Masing-masing kali Anda mengirimkan komit baru, rilis akan dibangun 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

Bangun di perangkat Anda

Jika Anda masih membutuhkan untuk membangun di perangkat, Anda perlu menambahkannya secara manual ke provisioning. Hubungkan perangkat Anda ke mac Anda dan buka menu perangkat Cari menu perangkat ios Lalu salin identifier Anda Cari identifier ios Dan kemudian mulai perintah: fastlane register_new_device Itu akan bertanya kepada 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

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

Lalu coba jalankan lagi aplikasi pada perangkat Anda.

Terima kasih

Blog ini didasarkan pada artikel berikut:

Teruskan dari Automatic Capacitor Build IOS Otomatis dengan GitHub aksi menggunakan match

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

Update Langsung untuk Aplikasi Capacitor

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 profesional yang sebenarnya.