Bisakah saya menulis aplikasi lintas platform (Mac dan Windows) menggunakan C #? [Tutup]

8

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.

Betty Crokker
sumber
Anda dapat memeriksa docs.asp.net/en/latest/getting-started/index.html dan code.visualstudio.com . Visual Studio dan .NET telah dibuat open source. Hoep yang memecahkan tujuan Anda. Tapi ya, jika Anda berharap untuk membuat Aplikasi GUI, maka saya tidak berpikir itu masih mungkin.
Krishnandu Sarkar
Mereka memiliki Xamarin. Bentuk sekarang dalam versi berbayar. Itu tidak melakukan segalanya, tetapi itu sedikit. Ini memungkinkan Anda untuk mengembangkan GUI lintas-platform.
MetalMikester
@ KrishnanduSarkar apa yang kamu bicarakan? Apa hubungannya dengan ASP .NET? :)
Konrad Morawski
@ KrishnanduSarkar plus itulah pertama kalinya saya mendengar tentang opensourcing Visual Studio. Bisakah Anda memberikan tautan ke informasi itu?
Konrad Morawski
@KonradMorawski Bukan. Saya berpikir untuk memberi tahu dia. Itu sebabnya saya menyebutkan bahwa jika dia berharap untuk membuat aplikasi GUI ini tidak akan melayani tujuannya. Tautan yang baik sudah diberikan dalam komentar saya.
Krishnandu Sarkar

Jawaban:

10
  1. 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 :)

  2. "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.

  3. 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 :

    Ada runtime berbasis Objective-C yang berisi instance kelas asli (NSString, NSApplication, dll) dan ada runtime C # yang berisi instance dari kelas yang dikelola (System.String, HttpClient, dll). Di antara dua karya ini Xamarin.Mac membuat jembatan dua arah sehingga Anda dapat memanggil metode (penyeleksi) di Objective-C (seperti NSApplication.Init) dan Objective-C dapat memanggil Anda kembali (seperti metode pada delegasi aplikasi Anda)

    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.

  4. 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.

  5. "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.

Konrad Morawski
sumber
Anda dapat menyebutkan github.com/mono/xwt juga, ini adalah lapisan abstraksi untuk GTK #, MonoMac, Xamarin.Mac dan WPF untuk GUI.
Residuum