Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Menerbitkan aplikasi .NET untuk macOS memerlukan beberapa langkah tambahan dibandingkan dengan platform lain, karena persyaratan keamanan Apple.
Prasyarat
Sebelum menerbitkan aplikasi .NET untuk macOS, pastikan Anda memiliki hal berikut:
- Akun Pengembang Apple: Diperlukan untuk penandatanganan kode dan notarisasi.
-
Xcode Command Line Tools: Menyediakan
codesign,altool, dan utilitas lainnya. - .NET SDK: Pastikan Anda memiliki .NET SDK terbaru yang terinstal.
Membuat aplikasi Anda menggunakan .NET SDK
Gunakan salah satu metode yang dijelaskan dalam gambaran umum penerbitan aplikasi .NET untuk menghasilkan aplikasi. Anda dapat membuat aplikasi yang bergantung pada kerangka kerja atau mandiri.
Menandatangani dan memberi notarisasi aplikasi Anda
Gunakan dokumentasi pengembang Apple untuk menandatangani dan untuk menotarisasi biner asli aplikasi. .NET membuat apphost asli yang dapat dieksekusi sebagai titik masuk untuk aplikasi Anda. Apphost ini harus ditandatangani dan, jika aplikasi Anda menggunakan kemampuan khusus, apphost harus diberi hak yang sesuai.
Fasilitas untuk aplikasi yang tidak diterbitkan sebagai Native AOT
Untuk aplikasi yang tidak diterbitkan sebagai Native AOT, com.apple.security.cs.allow-jit diperlukan hak akses.
Hak akses untuk aplikasi yang diterbitkan sebagai AOT Asli
Untuk aplikasi yang diterbitkan sebagai Native AOT, tidak diperlukan pemberian hak.
Hak akses opsional untuk debugging dan diagnostik
Hak berikut memungkinkan kemampuan penelusuran kesalahan dan diagnostik tambahan:
-
com.apple.security.get-task-allow: Diperlukan untuk pengumpulan dump dengancreatedumpdandotnet dump. -
com.apple.security.cs.debugger: Diperlukan untuk melampirkan debugger ke proses.
Peringatan
Gagal menandatangani dan menotarisasi aplikasi Anda dapat mengakibatkan aplikasi Anda mengalami crash (gagal fungsi) saat melakukan operasi terbatas.
Biner universal
macOS mendukung biner universal: satu file Mach-O yang berisi kode mesin untuk lebih dari satu arsitektur CPU. macOS memilih bagian yang cocok dengan prosesor saat ini, sehingga satu file dapat berjalan secara native pada komputer Apple silicon (arm64) dan Intel (x64).
.NET tidak menghasilkan biner universal secara langsung. Sebagai gantinya, Anda memublikasikan aplikasi satu kali untuk setiap arsitektur dan menggabungkan dua file eksekusi native dengan alat Apple lipo. Dua mode penerbitan .NET menghasilkan executable asli mandiri yang dapat Anda gabungkan dengan cara ini:
-
Aplikasi file tunggal (
PublishSingleFile) -
Penerapan Native AOT (
PublishAot)
Menerbitkan biner universal file tunggal
Terbitkan aplikasi sekali per arsitektur ke direktori terpisah:
dotnet publish -c Release -r osx-arm64 --self-contained true \
-p:PublishSingleFile=true -o out/osx-arm64
dotnet publish -c Release -r osx-x64 --self-contained true \
-p:PublishSingleFile=true -o out/osx-x64
Kemudian gabungkan dua executable dan tanda tangani ulang hasilnya:
mkdir -p out/universal
lipo -create -output out/universal/MyApp out/osx-arm64/MyApp out/osx-x64/MyApp
codesign --force --sign - out/universal/MyApp
Penerbitan mandiri dalam satu file menyematkan runtime, assembly terkelola, dan pustaka native ke dalam file eksekusinya sendiri, sehingga file hasil penggabungan tersebut merupakan aplikasi yang lengkap. Binary universal kurang lebih setara dengan jumlah dari dua input.
Salin semua file yang masih tersisa dari salah satu direktori keluaran per arsitektur (misalnya, appsettings.json atau file yang dikecualikan dari bundel) ke lokasi yang sama dengan file eksekusi yang telah digabungkan.
Menerbitkan biner universal AOT Asli
Langkah-langkahnya sama dengan untuk file tunggal, tetapi ganti properti file tunggal dengan PublishAot:
dotnet publish -c Release -r osx-arm64 -p:PublishAot=true -o out/osx-arm64
dotnet publish -c Release -r osx-x64 -p:PublishAot=true -o out/osx-x64
mkdir -p out/universal
lipo -create -output out/universal/MyApp out/osx-arm64/MyApp out/osx-x64/MyApp
codesign --force --sign - out/universal/MyApp
Native AOT menghasilkan output yang jauh lebih kecil daripada publikasi file tunggal, sehingga biner universal juga tetap berukuran kecil.
Native AOT juga menghasilkan bundel simbol debug MyApp.dSYM untuk setiap arsitektur. Untuk menyimpan simbol untuk kedua irisan, simpan direktori per arsitektur, atau gabungkan DWARF biner di dalam bundel dengan lipo.