Panduan

Sign dan notarisasi aplikasi Mac Electron atau Tauri dari Windows atau Linux

Anda bisa menulis aplikasi Electron atau Tauri di Windows atau Linux. Rilis macOS berbeda. Tool signing dan notarisasi dari Apple hanya jalan di macOS. Tanpa tool itu, pengguna Mac melihat peringatan dan aplikasinya tidak terbuka. Halaman ini menunjukkan langkah build, sign dan notarisasi, dengan perintah yang kami jalankan.

Kenapa langkah Mac butuh macOS

Tiga tool Apple yang melakukan pekerjaannya. codesign menandatangani aplikasi. notarytool mengirimnya ke layanan notaris Apple. stapler menempelkan tiket yang dikirim balik oleh Apple. Ketiganya ikut bersama macOS dan Xcode. Tidak ada versi Windows atau Linux dari Apple.

Dokumentasi framework-nya setuju. Tauri bilang jalankan tauri build di komputer Mac. Electron Forge bilang Xcode wajib untuk notarisasi. Kami juga mencoba sisi Linux di GitHub Actions. Electron Forge di Ubuntu membuat .deb dan .rpm. Saat diminta paket macOS, perintahnya gagal.

Yang Anda butuhkan sebelum hari rilis

  • Keanggotaan Apple Developer Program berbayar. Apple mencantumkannya seharga 99 USD per tahun.
  • Sertifikat Developer ID Application. Hanya Account Holder dari tim yang bisa membuatnya, di Xcode atau di situs developer.
  • App-specific password untuk Apple Account Anda, atau API key App Store Connect.
  • Team ID Anda, kode 10 karakter dari akun developer Anda.

Layanan notaris Apple juga meminta hardened runtime dan secure timestamp. electron-builder menyalakan hardened runtime dengan satu baris di config-nya, yang ditunjukkan di bawah.

Seperti apa build tanpa signing

Kami build template resmi create-tauri-app tanpa sertifikat. Ini pemeriksaan yang kami jalankan pada hasilnya:

npm create tauri-app@latest tauri-app -- --template vanilla --manager npm --yes
cd tauri-app && npm install
rustup target add aarch64-apple-darwin x86_64-apple-darwin
npm run tauri build -- --target universal-apple-darwin

APP=src-tauri/target/universal-apple-darwin/release/bundle/macos/tauri-app.app
lipo -archs "$APP"/Contents/MacOS/*
codesign --verify --deep --strict --verbose=2 "$APP"
spctl -a -vv "$APP"

Output di runner macos-26 GitHub:

x86_64 arm64
tauri-app.app: code object is not signed at all
tauri-app.app: rejected
source=no usable signature

Build memakan waktu 4 menit. Hasilnya .app universal sebesar 8.23 MiB dan .dmg sebesar 3.57 MiB. File .dmg dari Electron Forge tidak lebih baik. codesign menampilkan Signature=adhoc dan TeamIdentifier=not set, dan spctl menolaknya. Gatekeeper memblokir build seperti ini di Mac pengguna Anda.

Electron Forge: sign dan notarisasi saat make

Forge melakukan sign dan notarisasi saat npm run make jika config memintanya. Ini contoh dari panduan signing macOS milik Forge:

// forge.config.js
module.exports = {
  packagerConfig: {
    osxSign: {},
    osxNotarize: {
      appleId: process.env.APPLE_ID,
      appleIdPassword: process.env.APPLE_PASSWORD,
      teamId: process.env.APPLE_TEAM_ID
    }
  }
};

Lalu build setiap arsitektur. Kami menambahkan DMG maker ke template default lebih dulu. Kedua build masing-masing selesai dalam waktu kurang dari 25 detik:

npm install --save-dev @electron-forge/maker-dmg
npm run make -- --arch=arm64
npm run make -- --arch=x64

Kami juga mencoba --arch=universal pada template default. Hasilnya gagal dengan "the number of mach-o files is not the same between the arm64 and x64 builds". Dokumentasi electron-builder juga bilang build per arsitektur adalah yang paling andal.

electron-builder: notarize: true

electron-builder membaca sertifikat dan login Apple dari environment variable. Halaman notarisasinya menunjukkan config ini:

# electron-builder.yml
mac:
  notarize: true
  sign:
    hardenedRuntime: true

# environment
CSC_LINK=/path/to/developer-id.p12
CSC_KEY_PASSWORD=...
APPLE_ID=you@example.com
APPLE_APP_SPECIFIC_PASSWORD=xxxx-xxxx-xxxx-xxxx
APPLE_TEAM_ID=ABCDE12345

Tauri: atur variabelnya, lalu build

Tauri melakukan sign dan notarisasi di dalam tauri build jika variabel ini sudah diatur. Namanya diambil dari panduan signing macOS milik Tauri:

export APPLE_SIGNING_IDENTITY="Developer ID Application: Your Name (ABCDE12345)"
export APPLE_ID=you@example.com
export APPLE_PASSWORD=xxxx-xxxx-xxxx-xxxx
export APPLE_TEAM_ID=ABCDE12345
npm run tauri build -- --target universal-apple-darwin

Notarisasi aplikasi apa pun secara manual

Untuk toolkit lain, atau untuk mengulang satu langkah, jalankan tool Apple sendiri. Perintah ini diambil dari dokumentasi notarisasi Apple. Simpan login Anda sekali, lalu zip, kirim dan tunggu:

xcrun notarytool store-credentials "notarytool-password" \
  --apple-id "you@example.com" --team-id ABCDE12345 \
  --password xxxx-xxxx-xxxx-xxxx

ditto -c -k --keepParent "MyApp.app" "MyApp.zip"
xcrun notarytool submit MyApp.zip --keychain-profile "notarytool-password" --wait
xcrun stapler staple "MyApp.app"

Apple bilang notarisasi biasanya selesai dalam waktu kurang dari satu jam. Anda tidak bisa staple file ZIP, jadi staple file .app lalu zip lagi. Anda juga bisa mengirim dan staple file .dmg itu sendiri. Jika statusnya Invalid, baca log-nya:

xcrun notarytool log <submission-id> --keychain-profile "notarytool-password" developer_log.json

Melakukannya di Mac sewaan

Pass harian MacRun adalah Mac mini M6 khusus seharga $15. Xcode 27.1 sudah terpasang, jadi codesign, notarytool dan stapler sudah siap. Node dan Rust belum terpasang. Anda punya hak admin dan Homebrew, jadi Anda bisa memasangnya sendiri.

  • Hubungkan lewat Tailscale dengan SSH, atau buka desktop dengan viewer VNC apa pun.
  • Masuk ke Xcode dengan Apple Account Anda dan buat sertifikat Developer ID di sana.
  • Export sertifikat beserta key-nya ke file .p12 dan simpan, untuk CI nanti.
  • Clone repo Anda, build, notarisasi, lalu unduh .dmg yang sudah di-staple.

Mac dihapus saat pass berakhir. Push kode Anda dan salin file .p12 lebih dulu. Untuk Xcode lewat layar jarak jauh, lihat panduan kami tentang Xcode dari Windows.

Siapa yang sebaiknya tidak menyewa Mac untuk ini

  • Tim yang sudah punya CI. Runner macOS GitHub bisa sign dan notarisasi dengan secrets. Job Electron kami ditagih 2 menit, sekitar 12 sen. Job Tauri ditagih 5, sekitar 31 sen. Waktu tunggu notaris menambah beberapa menit. Lihat panduan GitHub Actions kami.
  • Pipeline yang hanya Linux. rcodesign adalah tool open source yang bisa sign dan notarisasi dari Linux atau Windows. Tool ini butuh API key App Store Connect. Ini bukan tool Apple, dan rilis terakhirnya adalah 0.29.0 pada November 2024.
  • Rilis mingguan. Runner bulanan seharga $104 untuk bulan pertama, lalu $139 per bulan. Membeli Mac bekas mungkin lebih murah dalam setahun.

Pertanyaan yang sering diajukan

Bisakah saya notarisasi aplikasi Mac di Windows?

+

Tidak dengan tool Apple. codesign, notarytool dan stapler hanya jalan di macOS. Tool open source rcodesign bisa sign dan notarisasi dari Windows atau Linux, tetapi Apple tidak membuat atau mendukungnya.

Apakah saya butuh akun Apple Developer berbayar untuk notarisasi?

+

Ya. Anda butuh sertifikat Developer ID Application, yang datang bersama Apple Developer Program seharga 99 USD per tahun. Dokumentasi Tauri bilang akun gratis tidak bisa notarisasi.

Bisakah Electron Forge build .dmg Mac di Linux?

+

Dalam test kami, tidak. Electron Forge di Ubuntu hanya membuat .deb dan .rpm, dan paket macOS yang dipaksakan gagal. Di runner macOS 26, template yang sama membuat .dmg dan .zip untuk arm64 dan x64.

Bagaimana cara membuat build Mac universal?

+

Dengan Tauri, tambahkan kedua target Rust dan jalankan tauri build --target universal-apple-darwin. Hasilnya satu .app dengan x86_64 dan arm64. Dengan Electron Forge, template default gagal digabung, jadi build arm64 dan x64 secara terpisah.

Berapa lama notarisasi Apple?

+

Apple bilang biasanya kurang dari satu jam. Flag --wait membuat notarytool tetap berjalan sampai Apple menjawab, jadi Anda tidak perlu mengecek berulang kali.

Berapa biaya Mac untuk satu rilis?

+

Pass harian MacRun seharga $15 untuk Mac mini M6 khusus dengan Xcode terpasang. Seminggu seharga $59. Anda bayar sekali dan tidak ada perpanjangan otomatis.

Panduan terkait