Prosedur pemberitahuan untuk aplikasi Electron untuk macOS 10.14.5

Dengan rilis macOS 10.14.5, Apple menambahkan proses Notarisisasi wajib untuk aplikasi sebelum mendistribusikannya. Saya ingin memberi tahu Anda apa itu dan kesulitan apa yang muncul dengan pembaruan ini ketika berkembang di Electron.js.



Pendahuluan


2 tahun setelah booming Electron.js, semua berita hangat tentang betapa buruknya dan mengapa itu diperlukan adalah tenang. Jangan menghidupkan kembali mereka di komentar. Terima kasih


Proyek kami menggunakan pembangun-elektron untuk membangun aplikasi, tetapi untuk paket-elektron, prosedur ini kira-kira sama.


Proyek itu sendiri adalah peluncur untuk cloud gaming, di mana klien asli diluncurkan untuk mengakses komputer jarak jauh.


Menandatangani aplikasi dengan pembangun-elektron tidak terlihat rumit, tetapi demi kelengkapan, saya akan membahas secara singkat tentang prosedur ini. Jika Anda tidak memiliki masalah dalam menandatangani aplikasi, Anda dapat melewati bab ini.


Penandatanganan aplikasi


Untuk menandatangani aplikasi, kita perlu mengekspor sertifikat dari akun pribadi pengembang Apple. Kami akan membutuhkan:


  • Aplikasi ID Pengembang
  • Pemasang ID Pengembang
  • * Aplikasi Pengembang Pihak Ketiga dan Pemasang Pengembang Pihak Ketiga (Jika Anda berencana untuk menerbitkan aplikasi di AppStore)

Sertifikat Penginstal ID Pengembang dikeluarkan untuk aplikasi tertentu, untuk bundleID ini diperlukan. Untuk pembangun-elektron, ditentukan oleh parameter appId di package.json



Sertifikat harus dikumpulkan dalam satu file. Untuk melakukan ini, tambahkan ke gantungan kunci (2 klik pada sertifikat).
Kemudian kita pergi ke gantungan kunci, pilih sertifikat yang diperlukan dan klik "ekspor barang" di menu konteks. Setelah ekspor, kami mendapatkan satu file dengan ekstensi .p12.



Setelah file sertifikat diterima, tambahkan entri berikut ke variabel lingkungan


  • CSC_LINK (path ke file sertifikat .p12)
  • CSC_KEY_PASSWORD (kata sandi akses sertifikat)

Jika Anda tidak menambahkan variabel-variabel ini, pengumpul akan secara otomatis mencari kunci yang sesuai di repositori gantungan kunci. Menambahkan entri ini memungkinkan Anda menentukan dengan tepat sertifikat yang ingin Anda gunakan untuk penandatanganan.


Setelah operasi ini, Anda dapat memulai proses pembuatan dan semuanya harus berjalan dengan lancar.


Ini bekerja dengan lancar sampai macOS 10.14.5 dirilis ....


Apa yang telah berubah dengan macOS 10.14.5


Penyimpangan kecil. Melakukan pekerjaan terakhir pada tambalan baru di malam hari, saya memutuskan untuk meninggalkan perakitan versi produksi di pagi hari. Memperhatikan bahwa ada pembaruan pada MacOS, diluncurkan dan tertidur.


Pagi berikutnya, saya terkejut melihat bahwa majelis jatuh dari kesalahan yang tidak diketahui pada saat menandatangani aplikasi - "ID Pengembang Tidak Diketahui".


Jangan menunda sampai besok apa yang bisa dilakukan hari ini. Benjamin Franklin

Inti dari masalah


Dimulai dengan macOS 10.14.5, Apple telah memperkenalkan prosedur notaris wajib. Artikel pertama Apple tentang ini adalah pada tahun 2018, tetapi dengan pembaruan ini prosedur ini menjadi wajib. Seperti apa tampangnya.


Anda mengumpulkan aplikasi -> mengirimnya ke server Apple -> Apple mengesahkannya -> Mengembalikan status sertifikasi yang berhasil -> Perintah untuk mengatur stempel sertifikasi dijalankan.


Untuk pengembang di Xcode, Anda hanya perlu menandai notaris



Juga, proses notaris dari aplikasi yang dirakit dapat dilakukan dengan perintah di terminal.


$ xcrun altool --notarize-app --primary-bundle-id "com.example.ote.zip" --username "AC_USERNAME" --password "@keychain:AC_PASSWORD" --file OvernightTextEditor_11.6.8.zip 

  • primary-bundle-id - bundleID aplikasi
  • nama pengguna - login pengguna developer.apple.com
  • kata sandi - "kata sandi khusus aplikasi". Itu dapat dibuat di akun pribadi Anda appleid.apple.com di bawah akun pengembang.

Jika Anda tidak melakukan prosedur notaris, maka ketika pengguna mencoba menginstal aplikasi, sebuah jendela dengan kesalahan macet. Gatekeeper bertanggung jawab untuk memeriksa keamanan aplikasi. Dialah yang memecahkan perakitan aplikasi pada pembangun-elektron.



Bagaimana proses pembangunan pembangun elektron terlihat


Setelah membangun aplikasi dalam file .app, menggunakan utilitas electron-osx-sign, aplikasi ditandatangani. Setelah menandatangani dengan sertifikat, proses memeriksa aplikasi dengan gatekepper diluncurkan. Tetapi dengan dirilisnya pembaruan, gatekeeper mulai memeriksa notaris aplikasi yang benar, dan ini tidak memungkinkan untuk berhasil menyelesaikan prosedur penandatanganan aplikasi.



Menambal untuk notaris


Pengguna Github Kallin segera menyarankan solusi, dengan penambahan dua parameter baru ke pengaturan. Yang pertama adalah "gatekeeperAssess" - menonaktifkan validasi perakitan setelah penandatanganan, dan yang kedua adalah "tanda" - yang menonaktifkan penandatanganan file instalasi (dmg) dengan sertifikat. Komit ini termasuk dalam pelepasan pembangun elektron 20.43.0.


Untuk proses notaris itu sendiri, electron-userland memiliki modul notaris-elektron yang melakukan tugas ini, Anda hanya perlu menulis skrip kecil dan menjalankannya menggunakan kait afterSign.


Penandatanganan aplikasi dan proses notaris



Pada awalnya, Anda perlu memeriksa bahwa Anda telah menginstal versi pembangun-elektron> = 20.43.0 dan menginstal paket notaris-elektron.


Tambahkan 2 entri ke variabel lingkungan:




Sekarang buat skrip notaris yang akan dieksekusi setelah menandatangani aplikasi.


 const notarize = require('electron-notarize').notarize; module.exports = async (context) => { const { electronPlatformName } = context; if (electronPlatformName === 'darwin') { try { console.log('Try notarize app'); await notarize({ appBundleId: 'APP_BUNDLE_ID', appPath: './dist/mac/APP_NAME.app', appleId: process.env.appleId, appleIdPassword: process.env.appleASP, }); console.log('Success notarize'); } catch (err) { console.log(err); } } }; 

Kami menyimpannya di tempat yang nyaman bagi Anda.


Juga, untuk notaris yang tepat, kita perlu menentukan hak akses
ke sumber daya sistem untuk aplikasi kita. Untuk melakukan ini, buat file build / entitlements.mac.inherit.plist


 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.security.cs.allow-jit</key> <true/> <key>com.apple.security.cs.allow-unsigned-executable-memory</key> <true/> <key>com.apple.security.cs.allow-dyld-environment-variables</key> <true/> <key>com.apple.security.cs.disable-library-validation</key> <true/> <key>com.apple.security.cs.disable-executable-page-protection</key> <true/> <key>com.apple.security.cs.debugger</key> <true/> <key>com.apple.security.automation.apple-events</key> <true/> </dict> </plist> 

Isi file dalam kasus saya. Mungkin ada konfigurasi yang berbeda untuk Anda. Deskripsi semua bidang .
Wajib untuk Electron.js adalah - com.apple.security.cs.allow-unsigned-executable-memory.


Sekarang perbarui pengaturan di package.json


Di bagian untuk macOS:



  • gatekeeperAssess (menonaktifkan validasi aplikasi pada sisi tanda-elektron-osx)
  • hardenedRuntime (memungkinkan Anda membuat daftar izin keamanan dan akses ke sumber daya sistem)
  • hak (jalur ke file izin akses untuk aplikasi kami)

Di bagian umum pengaturan pembangun elektron:



  • afterSign (jalur ke skrip notaris, yang akan diluncurkan setelah menandatangani aplikasi)

Kami memulai proses perakitan. Mungkin sepertinya sedikit ditangguhkan, tetapi mentransfer file ke server Apple dan menunggu respons memerlukan waktu (dari 3 hingga 10 menit)


Status pemberitahuan dapat dilihat di terminal dengan menjalankan perintah:


$ xcrun altool --notarization-history 0 -u $appleId -p $appleASP


Jawabannya akan disajikan dalam sebuah tabel. Bidang status mungkin memiliki nilai 'proses', 'disetujui', 'tidak valid'



Jika statusnya 'tidak valid', Anda dapat melihat dari nomor permintaan apa yang salah.


$ xcrun altool --notarization-info "RequestUUID" -u $appleId


Itulah keseluruhan proses penandatanganan dan notaris. Semoga artikel ini bermanfaat. Terima kasih


Selain kecil


Saat mentransfer aplikasi untuk pengujian, kesalahan menarik ditemukan. Aplikasi yang diterima melalui Telegram hanya menolak untuk memulai. Saat melihat log, ditemukan bahwa aplikasi itu dikarantina oleh Telegram. Untuk alasan apa dan bagaimana ini terjadi, saya tidak dapat menemukan jawabannya. Saat mengirim file melalui Yandex.Disk (atau cara lain untuk mengunduh melalui browser), masalah ini tidak terjadi.



Tautan yang bermanfaat


Source: https://habr.com/ru/post/id455874/


All Articles