Saya melihat banyak informasi lama tentang pertanyaan ini, dan banyak artikel terbang di sekitar Jalinan, tetapi saya tidak tahu persis di mana semuanya berada.
Pada dasarnya, saya ingin menulis kode C # yang kemudian dapat saya kompilasi ke dalam aplikasi Windows asli, dan juga mengkompilasi ke dalam aplikasi Mac asli (tanpa Parallels, no Wine, dll.). Bisakah ini dilakukan?
Apakah produk seperti Xamarin bisa digunakan? Situs web Xamarin mengatakan, "Gunakan bahasa, API, dan struktur data yang sama untuk berbagi rata-rata 75% kode aplikasi di semua platform pengembangan seluler." tapi saya tidak tahu apa yang mungkin memerlukan 25% kode aplikasi untuk platform tertentu ... Saya juga tidak tahu apakah mereka menargetkan OSX dan Windows, situs web mereka sangat mobile-device-centric.
[ditambahkan nanti]
Rangkuman: Xamarin tidak dirancang untuk membuat aplikasi lintas platform - apa yang mereka berikan kepada Anda adalah cara untuk menulis aplikasi Mac dalam C #, menggunakan operasi GUI Mac. Apa yang mereka rekomendasikan adalah menulis semua lintas-platform "logika bisnis" Anda, dan kemudian menulis 2 GUI yang sepenuhnya terpisah - satu untuk Windows, satu untuk Mac.
C # / Qt tampaknya berada dalam fase yang sangat awal (meskipun jika ada yang tersandung pada artikel ini pada tahun 2016 atau lebih baru, periksalah).
Tampaknya mono akan melakukan lintas-platform termasuk GUI, tetapi hanya jika Anda menggunakan Formulir Windows.
Jawaban:
Xamarin tidak "menargetkan" Windows, karena tidak ada gunanya - apa pun yang Anda tulis dalam C #, siap dijalankan di Windows dengan sendirinya. Itu sebabnya mereka hanya menjual lisensi untuk Xamarin.Android, Xamarin.iOS dan Xamarin.Mac. Tapi apa yang seharusnya dilakukan oleh lapisan Xamarin. Jendela abstraksi? Itu akan menjadi produk minyak ular buku teks :)
"Aplikasi Windows asli" - asli adalah kata yang rumit ketika datang ke C #. Aplikasi C # biasanya membutuhkan runtime .NET atau Mono, baik dibuat dengan menggunakan Xamarin atau tidak. Jika Anda ingin membuat biner asli daripada IL , ada solusi seperti .NET Native atau ngen , tapi itu masalah independen menggunakan Xamarin. Saya tidak mengira Anda berarti "asli" dalam arti yang ketat ini, tetapi ada baiknya untuk menyadari perbedaan ini. Dengan C #, bahkan pada Windows Anda biasanya menggunakan semacam mesin virtual.
Xamarin.Mac membutuhkan runtime Mono.OSX sehingga kode C # dapat dibangun sama sekali. Dan itu menjembatani runtime Objective-C dengan Mono.OSX seperti yang dijelaskan dalam Xamarin.Mac Internals :
Jadi ya, aplikasi yang dihasilkan adalah "asli" dalam arti bahwa itu bukan - katakan - sepotong HTML yang dibungkus dengan beberapa komponen WebView. Anda memang memiliki akses ke elemen dan API UI asli. Ini bukan asli dalam arti bahwa itu membutuhkan Mono.OSX untuk diinstal. Dengan kata lain, ini adalah asli seperti C # pada Windows mendapat dalam keadaan default.
Anda mungkin juga ingin membiasakan diri dengan http://blog.xamarin.com/introduction-to-xamarin.mac-seminar/ - mungkin tanggal (2013), tetapi thruth inti tetap saya percaya. Lihatlah slide # 7.
"Saya tidak tahu apa yang mungkin memerlukan 25% kode aplikasi khusus platform" - menurut definisi, semua yang bukan platform-agnostik, jadi, cukup banyak logika bisnis "murni", dan apa pun yang Anda abaikan dari implementasi konkret (seperti beberapa antarmuka "IRepository", dll.). Apa pun yang khusus untuk platform: antarmuka pengguna, ketahanan basis data, pustaka pihak ke-3 untuk Windows atau Mac, tidak dapat dibagikan. Proporsi 75/25 sangat praktis, jarak tempuh Anda mungkin sangat bervariasi tergantung pada sifat aplikasi Anda.
Perhatikan bahwa saya hanya memiliki pengalaman non-komersial dengan Xamarin untuk platform seluler, dan itu tidak mencakup iOS (hanya Windows Phone dan Android). Jika saya tidak akurat dalam hal ini, perbaiki saya.
sumber