Pengikatan Xamarin.Mac di aplikasi konsol
Ada beberapa skenario di mana Anda ingin menggunakan beberapa API asli Apple di C# untuk membangun aplikasi tanpa kepala - yang tidak memiliki antarmuka pengguna - menggunakan C#.
Templat proyek untuk aplikasi Mac menyertakan panggilan untuk NSApplication.Init()
diikuti dengan panggilan ke NSApplication.Main(args)
, biasanya terlihat seperti ini:
static class MainClass {
static void Main (string [] args)
{
NSApplication.Init ();
NSApplication.Main (args);
}
}
Panggilan untuk Init
menyiapkan runtime Xamarin.Mac, panggilan untuk Main(args)
memulai perulangan utama aplikasi Kakao, yang menyiapkan aplikasi untuk menerima peristiwa keyboard dan mouse dan menunjukkan jendela utama aplikasi Anda. Panggilan ke Main
juga akan mencoba menemukan sumber daya Kakao, menyiapkan jendela toplevel dan mengharapkan program menjadi bagian dari bundel aplikasi (program yang didistribusikan dalam direktori dengan .app
ekstensi dan tata letak yang sangat spesifik).
Aplikasi tanpa kepala tidak memerlukan antarmuka pengguna, dan tidak perlu berjalan sebagai bagian dari bundel aplikasi.
Membuat aplikasi konsol
Jadi lebih baik memulai dengan jenis proyek .NET Console biasa.
Anda perlu melakukan beberapa hal:
- Buat proyek kosong.
- Referensikan pustaka Xamarin.Mac.dll.
- Bawa dependensi yang tidak dikelola ke proyek Anda.
Langkah-langkah ini dijelaskan secara lebih rinci di bawah ini:
Membuat Proyek Konsol kosong
Buat Proyek Konsol .NET baru, pastikan bahwa itu adalah .NET dan bukan .NET Core, karena Xamarin.Mac.dll tidak berjalan di bawah runtime .NET Core, itu hanya berjalan dengan runtime Mono.
Mereferensikan pustaka Xamarin.Mac
Untuk mengkompilasi kode, Anda ingin mereferensikan perakitan Xamarin.Mac.dll
dari direktori ini: /Library/Frameworks/Xamarin.Mac.framework/Versions/Current/lib/64bits/full
Untuk melakukan ini, buka referensi proyek, pilih tab .NET Assembly , dan klik tombol Telusuri untuk menemukan file pada sistem file. Navigasi ke jalur di atas, lalu pilih Xamarin.Mac.dll dari direktori tersebut.
Ini akan memberi Anda akses ke API Kakao pada waktu kompilasi. Pada titik ini, Anda dapat menambahkan using AppKit
ke bagian atas file Anda, dan memanggil NSApplication.Init()
metode . Hanya ada satu langkah lagi sebelum Anda dapat menjalankan aplikasi Anda.
Membawa pustaka dukungan yang tidak dikelola ke dalam proyek Anda
Sebelum aplikasi Anda berjalan, Anda perlu membawa pustaka dukungan ke Xamarin.Mac
dalam proyek Anda. Untuk melakukan ini, tambahkan file baru ke proyek Anda (di opsi proyek, pilih Tambahkan, lalu Tambahkan File yang Ada) dan navigasikan ke direktori ini:
/Library/Frameworks/Xamarin.Mac.framework/Versions/Current/SDKs/Xamarin.macOS.sdk/lib
Di sini, pilih file libxammac.dylib. Anda akan ditawari pilihan penyalinan, penautan, atau pemindahan. Saya pribadi suka menautkan, tetapi menyalin bekerja juga. Kemudian Anda perlu memilih file, dan di pad properti (pilih Lihat Properti Pads>jika pad properti tidak terlihat), buka bagian Build dan atur pengaturan Salin ke Direktori Output ke Salin jika lebih baru.>
Anda sekarang dapat menjalankan aplikasi Xamarin.Mac Anda.
Hasilnya di direktori bin Anda akan terlihat seperti ini:
Xamarin.Mac.dll
Xamarin.Mac.pdb
consoleapp.exe
consoleapp.pdb
libxammac.dylib
Untuk menjalankan aplikasi ini, Anda akan memerlukan semua file tersebut di direktori yang sama.
Membangun aplikasi mandiri untuk distribusi
Anda mungkin ingin mendistribusikan satu executable kepada pengguna Anda. Untuk melakukan ini, Anda dapat menggunakan mkbundle
alat untuk mengubah berbagai file menjadi executable mandiri.
Pertama, pastikan aplikasi Anda dikompilasi dan dijalankan. Setelah puas dengan hasilnya, Anda dapat menjalankan perintah berikut dari baris perintah:
$ mkbundle --simple -o /tmp/consoleapp consoleapp.exe --library libxammac.dylib --config /Library/Frameworks/Mono.framework/Versions/Current/etc/mono/config --machine-config /Library/Frameworks/Mono.framework/Versions/Current/etc/mono/4.5/machine.config
[Output from the bundling tool]
$ _
Dalam pemanggilan baris perintah di atas, opsi -o
digunakan untuk menentukan output yang dihasilkan, dalam hal ini, kita melewati /tmp/consoleapp
. Ini sekarang adalah aplikasi mandiri yang dapat Anda distribusikan dan tidak memiliki dependensi eksternal pada Mono atau Xamarin.Mac, ini adalah executable mandiri sepenuhnya.
Baris perintah secara manual menentukan file machine.config yang akan digunakan, dan file konfigurasi pemetaan pustaka di seluruh sistem. Mereka tidak diperlukan untuk semua aplikasi, tetapi lebih mudah untuk menggabungkannya, karena digunakan ketika Anda menggunakan lebih banyak kemampuan .NET
Build tanpa proyek
Anda tidak memerlukan proyek penuh untuk membuat aplikasi Xamarin.Mac mandiri, Anda juga dapat menggunakan makefiles Unix sederhana untuk menyelesaikan pekerjaan. Contoh berikut menunjukkan bagaimana Anda dapat menyiapkan makefile untuk aplikasi baris perintah sederhana:
XAMMAC_PATH=/Library/Frameworks/Xamarin.Mac.framework/Versions/Current/lib/x86_64/full/
DYLD=/Library/Frameworks/Xamarin.Mac.framework/Versions/Current/lib
MONODIR=/Library/Frameworks/Mono.framework/Versions/Current/etc/mono
all: consoleapp.exe
consoelapp.exe: consoleapp.cs Makefile
mcs -g -r:$(XAMMAC_PATH)/Xamarin.Mac.dll consoleapp.cs
run: consoleapp.exe
MONO_PATH=$(XAMMAC_PATH) DYLD_LIBRARY_PATH=$(DYLD) mono --debug consoleapp.exe $(COMMAND)
bundle: consoleapp.exe
mkbundle --simple consoleapp.exe -o ncsharp -L $(XAMMAC_PATH) --library $(DYLD)/libxammac.dylib --config $(MONODIR)/config --machine-config $(MONODIR)/4.5/machine.config
Hal di atas Makefile
menyediakan tiga target:
make
akan membangun programmake run
akan membangun dan menjalankan program di direktori saat inimake bundle
akan membuat executable mandiri