Tôi có thể viết một ứng dụng đa nền tảng (Mac và Windows) bằng C # không? [đóng cửa]


8

Tôi thấy rất nhiều thông tin cũ về câu hỏi này, và rất nhiều bài báo bay xung quanh Interwebs, nhưng tôi không thể nói rõ mọi thứ đang ở đâu.

Về cơ bản, tôi muốn viết mã C # mà sau đó tôi có thể biên dịch thành ứng dụng Windows gốc và cũng có thể biên dịch thành ứng dụng Mac gốc (không Parallels, không Wine, v.v.). Điều này có thể được thực hiện?

Các sản phẩm như Xamarin có phải là con đường để đi? Trang web của Xamarin cho biết "Sử dụng cùng ngôn ngữ, API và cấu trúc dữ liệu để chia sẻ trung bình 75% mã ứng dụng trên tất cả các nền tảng phát triển di động." nhưng tôi không thể biết 25% mã ứng dụng dành riêng cho nền tảng có thể đòi hỏi gì ... Tôi cũng không thể biết nếu họ nhắm mục tiêu OSX và Windows, trang web của họ rất tập trung vào thiết bị di động.

[thêm vào sau]

Tóm tắt: Xamarin không được thiết kế để tạo các ứng dụng đa nền tảng - những gì họ cung cấp cho bạn là một cách để viết các ứng dụng Mac trong C #, sử dụng các hoạt động GUI của Mac. Những gì họ khuyên là viết tất cả nền tảng "logic kinh doanh" của bạn, sau đó viết 2 GUI hoàn toàn riêng biệt - một cho Windows, một cho Mac.

C # / Qt dường như đang ở giai đoạn rất sớm (mặc dù nếu có ai đó vấp phải bài viết này vào năm 2016 hoặc sau đó, hãy kiểm tra nó).

Dường như mono sẽ thực hiện đa nền tảng bao gồm GUI, nhưng chỉ khi bạn sử dụng Windows Forms.


Bạn có thể kiểm tra docs.asp.net/en/latest/getting-started/index.htmlcode.visualstudio.com . Visual Studio và .NET đã được tạo thành nguồn mở. Hoep mà giải quyết mục đích của bạn. Nhưng vâng, nếu bạn đang mong muốn tạo Ứng dụng GUI, thì tôi không nghĩ nó vẫn có thể.
Krishnandu Sarkar

Họ có Xamarin.Forms hiện ở phiên bản trả phí. Nó không làm mọi thứ, nhưng nó làm khá nhiều. Nó cho phép bạn phát triển GUI đa nền tảng.
MetalMikester

@KrishnanduSarkar bạn đang nói về cái gì vậy? .NET .NET phải làm gì với nó? :)
Konrad Morawski

@KrishnanduSarkar cộng với đó là lần đầu tiên tôi nghe về việc mở Visual Studio. Bạn vui lòng cung cấp một liên kết đến thông tin đó?
Konrad Morawski

@KonradMorawski Không phải vậy. Tôi nghĩ chỉ cần thông báo cho anh ta. Đó là lý do tại sao tôi đã đề cập rằng nếu anh ấy mong muốn tạo ứng dụng GUI thì điều này sẽ không phục vụ mục đích của anh ấy. Liên kết tốt đã được đưa ra trong bình luận của tôi.
Krishnandu Sarkar

Câu trả lời:


10
  1. Xamarin không "nhắm mục tiêu" Windows, bởi vì không có điểm nào - bất cứ điều gì bạn viết bằng C #, đều sẵn sàng để chạy trên Windows. Đó là lý do tại sao họ chỉ bán giấy phép cho Xamarin.Android, Xamarin.iOS và Xamarin.Mac. Nhưng một lớp trừu tượng Xamarin.Windows sẽ phải làm gì? Đó sẽ là một sản phẩm dầu rắn trong sách giáo khoa :)

  2. "Ứng dụng Windows gốc" - bản địa là một từ khó hiểu khi nói đến C #. Các ứng dụng C # thường yêu cầu thời gian chạy .NET hoặc Mono, cho dù được tạo bằng việc sử dụng Xamarin hay không. Nếu bạn muốn tạo nhị phân riêng thay vì IL , có các giải pháp như .NET Native hoặc ngen , nhưng đó là vấn đề độc lập với việc sử dụng Xamarin. Tôi không cho rằng bạn có nghĩa là "bản địa" theo nghĩa nghiêm ngặt này, nhưng thật tốt khi nhận thức được sự khác biệt này. Với C #, ngay cả trên Windows, bạn thường sử dụng một loại máy ảo.

  3. Xamarin.Mac yêu cầu thời gian chạy Mono.OSX để có thể xây dựng mã C #. Và nó kết nối thời gian chạy Objective-C với Mono.OSX như được mô tả trong Xamarin.Mac Internals :

    Có thời gian chạy dựa trên Objective-C chứa các thể hiện của các lớp gốc (NSString, NSApplication, v.v.) và có thời gian chạy C # chứa các thể hiện của các lớp được quản lý (System.String, HttpClient, v.v.). Ở giữa hai tác phẩm này, Xamarin.Mac tạo cầu nối hai chiều để bạn có thể gọi các phương thức (bộ chọn) trong Objective-C (chẳng hạn như NSApplication.Init) và Objective-C có thể gọi lại cho bạn (như các phương thức trên đại biểu ứng dụng của bạn)

    Vì vậy, có, ứng dụng kết quả là "nguyên gốc" theo nghĩa là nó không - nói - một đoạn HTML được gói trong một số thành phần WebView. Bạn có quyền truy cập vào các thành phần UI và API gốc. Nó không có nguồn gốc theo nghĩa là nó yêu cầu Mono.OSX phải được cài đặt. Nói cách khác, nó có nguồn gốc như C # trên Windows trong các trường hợp mặc định.

  4. Bạn cũng có thể muốn làm quen với http://blog.xamarin.com/intributiontion-to-xamarin.mac-seminar/ - nó có thể được xác định là (2013), nhưng điều tuyệt vời nhất tôi tin rằng. Hãy nhìn thoáng qua tại slide # 7.

  5. "Tôi không thể nói 25% mã ứng dụng dành riêng cho nền tảng có thể đòi hỏi gì" - theo định nghĩa, mọi thứ không liên quan đến nền tảng, do đó, logic kinh doanh "thuần túy" khá nhiều và bất cứ điều gì bạn trừu tượng triển khai cụ thể (như một số giao diện "Kho lưu trữ", v.v.). Dù là nền tảng cụ thể nào: giao diện người dùng, tính bền vững của cơ sở dữ liệu, thư viện bên thứ 3 cho Windows hoặc Mac, không thể được chia sẻ. Tỷ lệ 75/25 là quy tắc rất nhỏ, số dặm của bạn có thể thay đổi rất nhiều tùy thuộc vào bản chất của ứng dụng của bạn.

Lưu ý rằng tôi chỉ có một số trải nghiệm phi thương mại với Xamarin cho các nền tảng di động và nó không bao gồm iOS (chỉ Windows Phone và Android). Nếu tôi không chính xác về bất kỳ điều này, xin vui lòng sửa cho tôi.


Bạn cũng có thể đề cập đến github.com/mono/xwt , đây là lớp trừu tượng cho GTK #, MonoMac, Xamarin.Mac và WPF cho GUI.
Residuum
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.