Apa Artinya Mendistribusikan Langsung dengan Developer ID

Ada dua cara utama untuk mengantarkan aplikasi macOS ke tangan pengguna. Yang pertama adalah melalui Mac App Store (MAS), dan yang kedua adalah distribusi langsung (direct distribution) — membiarkan pengguna mengunduh file .dmg (atau .app) yang Anda buat sendiri dari sebuah situs web, GitHub, atau tempat serupa.

Distribusi langsung memiliki keunggulan yang jelas. Anda tidak perlu menunggu proses review App Store, tidak ada komisi pembayaran, dan Anda bisa merilis pembaruan kapan saja dan dengan cara apa pun yang Anda inginkan. Sebagai gantinya, hal-hal yang dulu ditangani oleh App Store untuk Anda — penandatanganan kode (code signing), notarisasi (notarization), dan pembaruan otomatis — kini harus Anda siapkan sendiri.

Jika Anda tidak menyiapkan hal-hal ini, mekanisme keamanan macOS bernama Gatekeeper akan memblokir aplikasi agar tidak bisa dijalankan. Saat pengguna pertama kali membuka aplikasi, mereka akan melihat peringatan seperti “aplikasi ini tidak dapat dibuka karena berasal dari pengembang yang tidak teridentifikasi,” dan sebagian besar pengguna akan menyerah menginstal di situ. Agar aplikasi bisa dibuka cukup dengan klik ganda seperti aplikasi yang didistribusikan dengan benar, Anda perlu menandatangani aplikasi dengan sertifikat Developer ID dan mendapatkan notarisasi dari Apple.

Seri ini membahas proses konfigurasi satu kali tersebut. Satu kabar baik: sebagian besar konfigurasi yang dibahas di sini hanya perlu dilakukan sekali dan dapat digunakan kembali di setiap rilis.

Yang Akan Anda Buat dalam Seri Ini

Selama tiga bagian, Anda akan menyiapkan hal-hal berikut.

  • (Bagian 1, artikel ini) Sertifikat Developer ID Application + kredensial untuk notarisasi
  • (Bagian 2) Kunci penandatanganan EdDSA untuk pembaruan otomatis Sparkle
  • (Bagian 3) Repositori publik untuk menghosting feed pembaruan + penyelesaian pengaturan build

Di akhir seri, Anda seharusnya memiliki hal-hal berikut. Untuk sekarang, cukup pindai daftarnya; setiap bagian akan mengisi satu item per satu.

  • Sertifikat Developer ID Application di Keychain macOS
  • Profil kredensial notarisasi yang tersimpan di Keychain
  • Pasangan kunci EdDSA untuk menandatangani pembaruan Sparkle (kunci publik + kunci privat)
  • Cadangan kunci privat di tempat yang aman
  • Repositori GitHub publik + GitHub Pages untuk menghosting feed pembaruan (appcast)
  • File pengaturan build (ExportOptions.plist) dan konfigurasi sisi aplikasi

Aplikasi Contoh — FocusTimer

Seri ini menggunakan aplikasi macOS fiktif, FocusTimer (aplikasi timer sederhana untuk mengelola waktu fokus), sebagai contoh yang berjalan. Nama FocusTimer, pengenal bundle com.example.FocusTimer, domain example.com, nama sertifikat, Team ID, dan sebagainya yang muncul dalam perintah dan jalur adalah semua nilai contoh. Saat Anda benar-benar mengikutinya, gantikan dengan nama aplikasi dan detail akun Anda sendiri.

Artikel ini ditulis untuk Xcode 26 dan Sparkle 2.x (framework pembaruan otomatis, yang muncul di Bagian 2). Apple sering mengubah tata letak layar dan penempatan menu, jadi meskipun nama tombol sedikit berbeda, asumsikan alurnya tetap sama.

Prasyarat — Alat Baris Perintah

Pertama, instal dua alat baris perintah yang diperlukan untuk otomatisasi build dan rilis. Ini mengasumsikan Anda sudah memiliki manajer paket macOS Homebrew terinstal.

brew install gh create-dmg
  • gh — CLI resmi GitHub. Anda akan menggunakannya nanti untuk membuat GitHub Release.
  • create-dmg — Alat untuk membangun disk image .dmg untuk distribusi. Alat ini juga menghasilkan layar yang memandu pengguna untuk menyeret aplikasi ke folder Applications.

Anda tidak akan menggunakannya segera, tetapi skrip otomatisasi rilis sering dirancang untuk memeriksa keberadaan alat-alat ini terlebih dahulu dan langsung berhenti jika tidak ada, jadi sebaiknya instal lebih awal.

Langkah 1 — Verifikasi Keanggotaan Apple Developer Program

Untuk menerbitkan sertifikat Developer ID dan melakukan notarisasi aplikasi, Anda memerlukan keanggotaan Apple Developer Program. Untuk akun individu, ini adalah program berbayar dengan biaya $99 per tahun.

Jika Anda sudah terdaftar, Anda hanya perlu memastikan statusnya aktif.

  1. Kunjungi developer.apple.com/account
  2. Di bagian Membership details, konfirmasi bahwa statusnya adalah Active
  3. Di layar yang sama, catat Team ID Anda (dalam contoh, ABCDE12345). Ini digunakan di seluruh langkah berikutnya.

Jika Anda belum mendaftar, persetujuan keanggotaan biasanya memakan waktu sekitar satu hari. Sertifikat tidak dapat diterbitkan sebelum disetujui, jadi sebaiknya tangani ini terlebih dahulu.

Langkah 2 — Terbitkan Sertifikat Developer ID Application

Sertifikat Developer ID Application adalah sertifikat yang digunakan untuk menandatangani .app dan .dmg yang Anda distribusikan. Gatekeeper macOS mengenali aplikasi yang ditandatangani dengan sertifikat ini sebagai “aplikasi yang dibuat oleh pengembang yang dikenal.”

Apple juga memiliki sertifikat Developer ID Installer yang terpisah untuk menandatangani paket installer .pkg. Karena seri ini mendistribusikan melalui .dmg, kita hanya berurusan dengan sertifikat Application.

Prosedur Penerbitan

Cara paling sederhana adalah melalui Xcode.

  1. Jalankan Xcode → menu Xcode → Settings… (⌘,)
  2. Pilih tab Accounts → klik Apple ID Anda di daftar sebelah kiri
  3. Klik tombol Manage Certificates… di kanan bawah
  4. Di jendela baru yang terbuka, klik tombol + di kiri bawah
  5. Pilih Developer ID Application dari menu
  6. Setelah satu atau dua detik, sertifikat baru muncul di daftar — klik Done

Sertifikat yang diterbitkan dengan cara ini secara otomatis tersimpan di Keychain macOS. Sertifikat dan kunci privat yang sesuai disimpan bersama sebagai pasangan, dan kunci privat inilah yang memungkinkan penandatanganan.

Memverifikasi Penerbitan

Di terminal, jalankan perintah berikut untuk memastikan sertifikat terinstal dengan benar.

security find-identity -v -p codesigning | grep "Developer ID Application"

Jika satu baris seperti berikut muncul, berhasil.

  1) A1B2C3D4E5F6...  "Developer ID Application: Gildong Hong (ABCDE12345)"

String di dalam tanda kutip adalah nama resmi sertifikat. Gildong Hong adalah nama yang terdaftar di akun Apple, dan ABCDE12345 dalam tanda kurung adalah Team ID yang Anda catat di Langkah 1. Nama ini digunakan apa adanya nanti saat mengotomatiskan penandatanganan kode, jadi periksa kembali sekarang.

Memperbarui Sertifikat

Sertifikat Developer ID berlaku selama 5 tahun. Saat mendekati kedaluwarsa, sertifikat akan ditandai Expired di daftar Manage Certificates Xcode. Pada saat itu, cukup terbitkan sertifikat baru menggunakan prosedur yang persis sama seperti di atas.

Kabar baiknya adalah aplikasi yang sudah ditandatangani dan didistribusikan dengan sertifikat lama tidak langsung tidak valid begitu sertifikat kedaluwarsa. Hanya build yang baru dibuat ke depannya yang perlu ditandatangani dengan sertifikat baru. Jadi tidak perlu terlalu khawatir tentang kedaluwarsa.

Langkah 3 — Daftarkan Kata Sandi Khusus Aplikasi untuk Notarisasi

Apa Itu Notarisasi?

Notarisasi adalah proses mengunggah aplikasi Anda ke server Apple sebelum distribusi untuk dipindai dari malware. Jika lolos pemindaian, Apple menerbitkan “tiket notarisasi,” dan tiket itu harus dilampirkan ke aplikasi agar Gatekeeper membukanya tanpa peringatan. Jika penandatanganan membuktikan “siapa yang membuatnya,” notarisasi adalah proses terpisah yang membuktikan “Apple telah memindainya sekali.”

Pengiriman notarisasi menggunakan perintah notarytool Apple, yang meminta kata sandi Apple ID setiap kali Anda mengirim. Untuk menghindari memasukkannya setiap kali, Anda membuat kata sandi khusus aplikasi (app-specific password) dan menyimpannya di Keychain terlebih dahulu.

3-1. Terbitkan Kata Sandi Khusus Aplikasi

Kata sandi khusus aplikasi adalah kata sandi 16 karakter yang hanya digunakan untuk tujuan tertentu, sebagai pengganti kata sandi utama Apple ID Anda.

  1. Kunjungi appleid.apple.com → masuk dengan Apple ID yang terdaftar di Apple Developer Program (dalam contoh, [email protected])
  2. Buka Sign-In and Security → pilih App-Specific Passwords
  3. Klik tombol + → masukkan nama untuk kata sandi (misalnya, focustimer-notarize)
  4. Klik Create → masukkan kata sandi Apple ID Anda sekali lagi
  5. Kata sandi 16 karakter dalam format abcd-efgh-ijkl-mnop muncul di layar.

Setelah Anda menutup layar ini, Anda tidak dapat melihat kata sandi lagi. Sebelum melanjutkan ke langkah berikutnya, salin sebentar ke manajer kata sandi atau sejenisnya.

3-2. Simpan ke Profil notarytool

Simpan kata sandi yang diterima sebagai profil Keychain. Dalam perintah di bawah ini, ganti nilai --password dengan kata sandi aktual yang baru saja Anda terima sebelum menjalankannya.

xcrun notarytool store-credentials "focustimer-notarize" \
  --apple-id "[email protected]" \
  --team-id "ABCDE12345" \
  --password "abcd-efgh-ijkl-mnop"
  • Argumen pertama "focustimer-notarize" — nama yang diberikan untuk profil ini. Mulai sekarang, Anda akan memuat kredensial dengan nama ini saat melakukan notarisasi.
  • --apple-id — email akun Apple Developer Program
  • --team-id — Team ID dari Langkah 1
  • --password — kata sandi khusus aplikasi yang diterbitkan di 3-1

Jika output berikut muncul, berhasil.

Credentials saved to Keychain.

Sekarang kredensial sudah tersimpan di Keychain, Anda tidak lagi memerlukan kata sandi khusus aplikasi asli. (Meski begitu, jika Anda berencana untuk build di komputer lain juga, lebih nyaman menyimpannya di manajer kata sandi.)

3-3. Verifikasi

Periksa bahwa profil yang disimpan benar-benar berfungsi.

xcrun notarytool history --keychain-profile "focustimer-notarize"

Jika pesan Successfully received submission history. muncul, semuanya baik-baik saja. Riwayat pengiriman di bawahnya mungkin kosong (yang normal, karena Anda belum pernah melakukan notarisasi) atau mungkin berisi catatan sebelumnya.

Jebakan Utama — Apple ID dan Akun GitHub Anda Berbeda

Inilah titik di mana orang yang menyiapkan distribusi langsung untuk pertama kalinya paling sering tersangkut.

  • Akun Apple Developer Program — digunakan untuk menerbitkan sertifikat dan notarisasi (contoh: [email protected])
  • Akun GitHub — digunakan di Bagian 3 untuk menghosting file pembaruan (contoh: [email protected])

Dalam banyak kasus, keduanya adalah email yang berbeda. Secara khusus, --apple-id dari notarytool store-credentials harus berupa email akun Apple Developer. Jika Anda memasukkan email akun GitHub, autentikasi gagal — dan pesan kesalahannya tidak ramah, sehingga sulit melacak penyebabnya.

Jika email kedua akun mudah tertukar, kami merekomendasikan membuat catatan mana yang untuk Apple dan mana yang untuk GitHub. Perbedaan ini muncul berulang kali di seluruh seri.

Rangkuman Bagian 1

Jika Anda telah mengikuti sejauh ini, Anda sekarang memiliki hal-hal berikut.

  • ✅ Alat baris perintah untuk otomatisasi rilis (gh, create-dmg)
  • ✅ Keanggotaan Apple Developer Program yang aktif
  • Sertifikat Developer ID Application yang tersimpan di Keychain
  • Profil kredensial notarisasi yang tersimpan di Keychain (focustimer-notarize)

Dengan ini, Anda siap untuk menandatangani dan melakukan notarisasi aplikasi. Namun hampir tidak ada aplikasi yang dikirimkan kepada pengguna hanya sekali dan selesai. Anda harus terus merilis versi baru yang memperbaiki bug dan menambahkan fitur. Di App Store, pembaruan otomatis ditangani untuk Anda, tetapi dengan distribusi langsung, ini juga harus Anda siapkan sendiri.

Di bagian berikutnya, kita akan membuat kunci penandatanganan EdDSA untuk Sparkle, framework pembaruan otomatis standar de facto untuk aplikasi macOS. Ini adalah mekanisme verifikasi yang didedikasikan untuk file pembaruan — lapisan lain yang terpisah dari sertifikat.