Langsung ke konten

Kelola Kredensial

Kelola kredensial build iOS dan Android Anda secara lokal untuk kemudahan cloud build.

Capgo CLI menyimpan kredensial build Anda di mesin Anda — tidak pernah di server Capgo. Secara default, kredensial disimpan dalam satu global file, ~/.capgo-credentials/credentials.json, yang digunakan untuk semua proyek Anda. Gunakan --local untuk menyimpannya secara per-proyek di .capgo-credentials.json sebagai gantinya. Saat Anda menjalankan build, kredensial yang tersimpan akan digunakan secara otomatis dan dikirim dengan aman ke Capgo, lalu dihapus setelah build selesai.

Cara tercepat untuk mengelola kredensial tersimpan adalah lewat interactive manager. Ini membuka TUI (yang sama dengan yang build init Anda gunakan) untuk menelusuri apa yang tersimpan, melihat konfigurasi per app dan platform, mengekspor file siap CI/CD, .env atau menghapus kredensial sebuah platform:

Jendela terminal
bunx @capgo/cli@latest build credentials manage
OpsiDeskripsi
--appId <appId>App yang dikelola (diminta memilih jika tidak diisi)
--platform <ios|android>Platform yang dikelola (diminta memilih jika tidak diisi)
--localGunakan pengaturan per-project .capgo-credentials.json alih-alih menggunakan file global

Lebih suka perintah satu kali yang bisa di-script? Gunakan perintah individual di bawah ini.

Simpan build credentials Anda secara lokal untuk penggunaan otomatis:

Jendela terminal
bunx @capgo/cli@latest build credentials save --platform <ios|android> [options]

Perbarui sebagian kredensial yang ada tanpa harus memasukkan semuanya kembali:

Jendela terminal
bunx @capgo/cli@latest build credentials update --platform <ios|android> [options]

Panduan update penggunaan command Penggabungan aditif untuk provisioning profile — profil baru digabungkan dengan yang sudah ada. Untuk mengganti seluruh provisioning map, tambahkan --overwrite-ios-provisioning-map.

Contoh — tambahkan extension profile ke credentials yang sudah ada:

Jendela terminal
bunx @capgo/cli@latest build credentials update \
--platform ios \
--ios-provisioning-profile "com.example.app.widget=./widget_profile.mobileprovision"

Perintah update menerima opsi yang sama dengan save tapi semuanya opsional — hanya field yang Anda isi yang akan di-update.

Lihat credentials yang tersimpan saat ini (password disamarkan):

Jendela terminal
bunx @capgo/cli@latest build credentials list
# List credentials for a specific app
bunx @capgo/cli@latest build credentials list --appId com.example.app

Hapus kredensial yang tersimpan dari mesin lokal Anda:

Jendela terminal
# Clear all credentials
bunx @capgo/cli@latest build credentials clear
# Clear credentials for a specific app + platform
bunx @capgo/cli@latest build credentials clear --appId com.example.app --platform ios

Konversi format single-profile lama ke format multi-target baru:

Jendela terminal
bunx @capgo/cli@latest build credentials migrate --platform ios

Perintah migrate mendeteksi BUILD_PROVISION_PROFILE_BASE64 kredensial lama, mengonversinya ke format baru CAPGO_IOS_PROVISIONING_MAP, lalu menghapus kunci lama. Lihat Migrasi dari Single Profile detailnya.

Jendela terminal
bunx @capgo/cli@latest build credentials save \
--platform ios \
--certificate ./cert.p12 \
--p12-password "YourP12Password" \
--ios-provisioning-profile "com.example.app=./profile.mobileprovision" \
--apple-key ./AuthKey_ABC1234567.p8 \
--apple-key-id "ABC1234567" \
--apple-issuer-id "00000000-0000-0000-0000-000000000000" \
--apple-team-id "TEAM123456"
OpsiDeskripsiWajib
--certificate <path>Path ke file sertifikat .p12Ya (release)
--p12-password <password>Password untuk sertifikat .p12Ya (release)
--ios-provisioning-profile <mapping>Mapping provisioning profile (bundleId=path). Dapat diulang untuk aplikasi multi-target. Jika hanya ada satu profil dan tanpa awalan bundleId, CLI akan terdeteksi otomatis dari profil tersebut.Ya (release)
--apple-key <path>Path ke kunci .p8 App Store Connect APILihat catatan¹
--apple-key-id <id>ID Kunci App Store Connect APILihat catatan¹
--apple-issuer-id <id>App Store Connect API Issuer ID (UUID)Lihat catatan¹
--apple-team-id <id>Team ID App Store ConnectYa
--apple-id <email>Email Apple ID untuk upload app-specific password (alternatif untuk kunci API)Lihat catatan²
--apple-app-specific-password <password>Kata sandi khusus aplikasi (xxxx-xxxx-xxxx-xxxx)Lihat catatan²
--apple-app-id <id>ID aplikasi App Store Connect numerik (misal. 1234567890)Lihat catatan²
--ios-distribution <mode>Mode distribusi: app_store (default) atau ad_hocTidak
--output-uploadAktifkan link download Capgo berbatas waktu untuk build artifactTidak (default: false)
--output-retention <seconds>Berapa lama output build disimpan (misal. 3600s)Tidak (default: 3600s)
--skip-build-number-bumpLewati penambahan nomor build otomatisTidak

Saat Anda menyimpan kredensial iOS, CLI:

  1. Membaca file sertifikat dan provisioning profile
  2. Mengonversinya ke encoding base64
  3. Menyimpannya ke ~/.capgo-credentials/credentials.json (atau .capgo-credentials.json dengan --local)
  4. Menyimpan password dan ID sebagai plain text (hanya file lokal)

Struktur file yang disimpan:

{
"ios": {
"BUILD_CERTIFICATE_BASE64": "...",
"CAPGO_IOS_PROVISIONING_MAP": "{\"com.example.app\":{\"profile\":\"...\",\"name\":\"match AppStore com.example.app\"}}",
"APPLE_KEY_CONTENT": "...",
"P12_PASSWORD": "...",
"APPLE_KEY_ID": "ABC1234567",
"APPLE_ISSUER_ID": "...",
"APP_STORE_CONNECT_TEAM_ID": "TEAM123456",
"CAPGO_IOS_DISTRIBUTION": "app_store"
}
}
Jendela terminal
bunx @capgo/cli@latest build credentials save \
--platform android \
--keystore ./release.keystore \
--keystore-alias "my-key-alias" \
--keystore-key-password "KeyPassword123" \
--keystore-store-password "StorePassword123" \
--play-config ./play-store-service-account.json
OpsiDeskripsiWajib
--keystore <path>Path ke file .keystore atau .jksYa (release)
--keystore-alias <alias>Alias key di dalam keystoreYa (release)
--keystore-key-password <password>Password untuk alias keyYa (release)
--keystore-store-password <password>Password untuk keystoreYa (release)
--play-config <path>Path ke JSON service account Play StoreYa (submission)

Saat Anda menyimpan kredensial Android, CLI:

  1. Membaca file keystore dan JSON service account
  2. Mengonversinya ke encoding base64
  3. Menyimpannya ke ~/.capgo-credentials/credentials.json (atau .capgo-credentials.json dengan --local)
  4. Menyimpan password dan alias sebagai teks biasa (hanya file lokal)

Struktur file yang disimpan:

{
"android": {
"ANDROID_KEYSTORE_FILE": "...",
"PLAY_CONFIG_JSON": "...",
"KEYSTORE_KEY_ALIAS": "my-key-alias",
"KEYSTORE_KEY_PASSWORD": "...",
"KEYSTORE_STORE_PASSWORD": "..."
}
}

Setelah kredensial disimpan, mereka akan otomatis digunakan saat Anda melakukan build:

Jendela terminal
# Credentials automatically loaded from ~/.capgo-credentials/credentials.json
bunx @capgo/cli@latest build request com.example.app --platform ios

Anda juga bisa menimpa kredensial tersimpan menggunakan environment variables:

Jendela terminal
# Environment variables take precedence over saved credentials
BUILD_CERTIFICATE_BASE64="..." \
P12_PASSWORD="different-password" \
bunx @capgo/cli@latest build request com.example.app --platform ios

Urutan prioritas:

  1. Variabel lingkungan (prioritas tertinggi)
  2. Kredensial tersimpan (~/.capgo-credentials/credentials.json, atau lokal .capgo-credentials.json)
  3. Tanpa kredensial (prioritas terendah)

Tampilkan kredensial yang telah Anda simpan:

Jendela terminal
bunx @capgo/cli@latest build credentials list

Contoh output:

📋 Saved Build Credentials:
iOS Credentials:
✓ Certificate (base64)
✓ Provisioning Map (JSON)
✓ Apple Key Content (base64)
✓ P12 Password: ********
✓ Apple Key ID: ABC1234567
✓ Apple Issuer ID: 00000000-0000-0000-0000-000000000000
✓ Team ID: TEAM123456
Android Credentials:
✓ Keystore (base64)
✓ Play Store Config (base64)
✓ Keystore Alias: my-key-alias
✓ Key Password: ********
✓ Store Password: ********
Location: ~/.capgo-credentials/credentials.json
🔒 These credentials are stored locally on your machine only.
When building, they are sent to Capgo but NEVER stored there.
They are auto-deleted after build completion.
  1. Permission File

    Jendela terminal
    # Global credentials directory + file
    chmod 700 ~/.capgo-credentials
    chmod 600 ~/.capgo-credentials/credentials.json
    # Local (per-project) credentials, if you use --local
    chmod 600 .capgo-credentials.json
  2. Jangan Pernah Commit Credentials

    Jendela terminal
    # Ignore the per-project credentials file (used with --local)
    echo ".capgo-credentials.json" >> .gitignore

    File global berada di direktori home Anda, di luar repo.

  3. Pisahkan Credentials

    • Gunakan credentials berbeda untuk development lokal vs CI/CD
    • Rotasi kredensial secara berkala
    • Jangan berbagi kredensial antar anggota tim

Untuk lingkungan CI/CD, utamakan environment variables daripada kredensial yang tersimpan.

Bagian berjudul “Ekspor .env yang siap pakai (direkomendasikan)”

Daripada melakukan base64-encoding pada setiap file kredensial secara manual (lihat di bawah), biarkan build credentials manage membuatkan filenya untuk Anda:

Jendela terminal
bunx @capgo/cli@latest build credentials manage
# pick your app → choose "Export to .env"

Ini menulis sebuah .env.capgo.<appId>.<platform> file (izin akses) 0600) yang berisi setiap kredensial tersimpan sebagai environment variable — setiap baris adalah satu secret untuk ditambahkan ke provider CI/CD Anda. Kedua platform digabungkan secara default; tambahkan --platform ios atau --platform android untuk membatasinya ke satu platform saja.

CLI membaca environment variables berikut untuk kredensial:

Kredensial iOS:

VariabelDeskripsiFormatWajib
BUILD_CERTIFICATE_BASE64Sertifikat P12/PKCS12 untuk signing codeBase64Ya (release)
CAPGO_IOS_PROVISIONING_MAPMap JSON dari bundle ID ke data provisioning profileString JSONYa (release)
P12_PASSWORDPassword untuk sertifikat P12Teks biasaOpsional
APPLE_KEY_IDID Kunci App Store Connect APIString (contoh: “ABC1234567”)Lihat catatan¹
APPLE_ISSUER_IDAPI Issuer ID App Store ConnectString UUIDLihat catatan¹
APPLE_KEY_CONTENTKey App Store Connect API (.isi file .p8)Base64Lihat catatan¹
APP_STORE_CONNECT_TEAM_IDApple Developer Team IDString (contoh: “XXXXXXXXXX”)Ya
CAPGO_IOS_DISTRIBUTIONMode distribusi: app_store (default) atau ad_hocStringTidak

Kredensial Android:

VariabelDeskripsiFormatWajib
ANDROID_KEYSTORE_FILEFile keystore untuk signing APK/AABBase64Ya (release)
KEYSTORE_KEY_ALIASAlias key di dalam keystoreStringYa (release)
KEYSTORE_KEY_PASSWORDPassword untuk alias keyTeks biasaYa*
KEYSTORE_STORE_PASSWORDPassword untuk file keystoreTeks biasaYa*
PLAY_CONFIG_JSONJSON Google Play service accountBase64Ya (submission)

*Jika hanya satu password yang diberikan, akan digunakan untuk keduanya KEYSTORE_KEY_PASSWORD dan KEYSTORE_STORE_PASSWORD.

.github/workflows/build.yml
name: Cloud Build
on:
push:
branches: [main]
jobs:
build-ios:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: oven-sh/setup-bun@v2
- run: bun install
- run: bunx @capgo/cli@latest build request com.example.app --platform ios
env:
CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }}
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
CAPGO_IOS_PROVISIONING_MAP: ${{ secrets.CAPGO_IOS_PROVISIONING_MAP }}
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }}
APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }}
APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }}
APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }}
build-android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: oven-sh/setup-bun@v2
- run: bun install
- run: bunx @capgo/cli@latest build request com.example.app --platform android
env:
CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }}
ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }}
KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }}
KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }}
KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }}
PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }}

Untuk mengonversi file kredensial Anda ke base64 untuk secret CI/CD:

Jendela terminal
# iOS Certificate (.p12)
base64 -i certificate.p12 | tr -d '\n' > certificate_base64.txt
# iOS Provisioning Profiles — use the CLI to generate CAPGO_IOS_PROVISIONING_MAP:
bunx @capgo/cli@latest build credentials save --platform ios \
--ios-provisioning-profile "com.example.app=./profile.mobileprovision" \
# ... other options
# Then copy CAPGO_IOS_PROVISIONING_MAP from ~/.capgo-credentials/credentials.json to your CI secrets
# iOS App Store Connect Key (.p8)
base64 -i AuthKey_XXXXXX.p8 | tr -d '\n' > apple_key_base64.txt
# Android Keystore (.keystore or .jks)
base64 -i release.keystore | tr -d '\n' > keystore_base64.txt
# Google Play Service Account JSON
base64 -i play-store-service-account.json | tr -d '\n' > play_config_base64.txt

Pendekatan ini lebih aman karena:

  • Secrets dikelola oleh platform CI/CD Anda
  • Tidak ada file kredensial di runner
  • Rotasi dan kontrol akses yang mudah
  • Audit trail untuk penggunaan secret

Rotasi kredensial Anda secara berkala:

  1. iOS: Generate sertifikat dan kunci API baru setiap tahun
  2. Android: Ubah password keystore setiap tahun
  3. Setelah ada perubahan tim: Rotasi saat anggota tim keluar

Update kredensial yang tersimpan:

Jendela terminal
# Re-run save command with new credentials
bunx @capgo/cli@latest build credentials save --platform ios --certificate ./new-cert.p12 ...

Jika build menyatakan kredensial tidak ditemukan:

  1. Cek apakah kredensial sudah tersimpan:

    Jendela terminal
    bunx @capgo/cli@latest build credentials list
  2. Simpan kredensial jika belum ada:

    Jendela terminal
    bunx @capgo/cli@latest build credentials save --platform ios ...
  3. Pastikan file kredensial ada:

    Jendela terminal
    ls -la ~/.capgo-credentials/credentials.json # global
    ls -la .capgo-credentials.json # local (--local)

“Permission denied” saat membaca kredensial

Bagian berjudul ““Permission denied” saat membaca kredensial”

Perbaiki izin file:

Jendela terminal
chmod 600 ~/.capgo-credentials/credentials.json # global
chmod 600 .capgo-credentials.json # local

Pastikan platform yang ditentukan sudah benar:

Jendela terminal
# Make sure --platform matches saved credentials
bunx @capgo/cli@latest build request com.example.app --platform ios # Uses ios credentials
bunx @capgo/cli@latest build request com.example.app --platform android # Uses android credentials

Jika credentials tampak rusak:

Jendela terminal
# Clear all credentials
bunx @capgo/cli@latest build credentials clear
# Save again
bunx @capgo/cli@latest build credentials save --platform ios ...

Jika Anda saat ini menggunakan environment variables, Anda dapat bermigrasi ke credentials yang tersimpan:

  1. Ekstrak variabel lingkungan Anda saat ini

    Jendela terminal
    echo $BUILD_CERTIFICATE_BASE64 # Verify they exist
  2. Dekode file base64 kembali ke file asli (jika perlu)

    Jendela terminal
    echo "$BUILD_CERTIFICATE_BASE64" | base64 -d > cert.p12
    echo "$BUILD_PROVISION_PROFILE_BASE64" | base64 -d > profile.mobileprovision
  3. Simpan menggunakan CLI

    Jendela terminal
    bunx @capgo/cli@latest build credentials save \
    --platform ios \
    --certificate ./cert.p12 \
    --ios-provisioning-profile ./profile.mobileprovision \
    --p12-password "$P12_PASSWORD" \
    --apple-key-id "$APPLE_KEY_ID" \
    --apple-issuer-id "$APPLE_ISSUER_ID" \
    --apple-team-id "$APP_STORE_CONNECT_TEAM_ID"

    Jika Anda memiliki kredensial lama yang tersimpan (format tunggal BUILD_PROVISION_PROFILE_BASE64), jalankan:

    Jendela terminal
    bunx @capgo/cli@latest build credentials migrate --platform ios

    Ini mengubah profil tunggal lama menjadi CAPGO_IOS_PROVISIONING_MAP dan menghapus yang lama BUILD_PROVISION_PROFILE_BASE64 dan APPLE_PROFILE_NAME key lama.

  4. Uji coba build

    Jendela terminal
    bunx @capgo/cli@latest build request com.example.app --platform ios
  5. Hapus environment variables (opsional)

    Jendela terminal
    unset BUILD_CERTIFICATE_BASE64 BUILD_PROVISION_PROFILE_BASE64

Credentials disimpan dalam satu file JSON:

  • Global (default): ~/.capgo-credentials/credentials.json — digunakan di semua proyek Anda
  • Lokal (dengan --local): .capgo-credentials.json di root proyek — menimpa file global untuk proyek tersebut

File akan dibuat otomatis saat pertama kali Anda menyimpan credentials. Tambahkan .capgo-credentials.json ke .gitignore sehingga kredensial per-proyek tidak akan pernah ter-commit.

Jika Anda menggunakan Kelola Kredensial untuk merencanakan otomatisasi CI/CD, hubungkan dengan CI/CD Capgo untuk workflow produk di Capgo CI/CD, Capgo Native Build untuk workflow produk di Capgo Native Builds, Integrasi Capgo untuk alur kerja produk di Integrasi Capgo, Integrasi CI/CD untuk detail implementasi di Integrasi CI/CD, dan Integrasi GitHub Actions untuk detail implementasi di Integrasi GitHub Actions.