Bagikan melalui


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 program
  • make run akan membangun dan menjalankan program di direktori saat ini
  • make bundle akan membuat executable mandiri