web-dev-qa-db-ja.com

C#を使用してクロスプラットフォームアプリケーション(MacおよびWindows)を作成できますか?

この質問に関する多くの古い情報とInterwebsの周りを飛んでいる多くの記事を見ていますが、物事がどこにあるのかはっきりとはわかりません。

基本的に、ネイティブのWindowsアプリケーションにコンパイルしたり、ネイティブのMacアプリケーション(ParallelsやWineなど)にコンパイルしたりできるC#コードを記述したいと思います。これはできますか?

Xamarinのような製品は進むべき道ですか? XamarinのWebサイトは、「同じ言語、API、データ構造を使用して、すべてのモバイル開発プラットフォームで平均75%のアプリコードを共有する」と述べています。しかし、プラットフォーム固有のアプリコードの25%が何を伴う可能性があるのか​​はわかりません。OSXとWindowsをターゲットにしているのかどうかもわかりません。彼らのWebサイトはモバイルデバイス中心です。

[後で追加]

概要:Xamarinはクロスプラットフォームアプリケーションを作成するようには設計されていません。MacaのGUI操作を使用して、C#でMacアプリケーションを作成する方法が提供されます。彼らが推奨するのは、すべての「ビジネスロジック」クロスプラットフォームを記述してから、2つの完全に別個のGUIを記述することです。1つはWindows用、もう1つはMac用です。

C#/ Qtは非常に初期の段階にあるようです(2016年以降にこの記事を誰かが見つけた場合は、チェックしてください)。

MonoはGUIを含むクロスプラットフォームを実行するようですが、Windowsフォームを使用する場合のみです。

8
Betty Crokker
  1. XamarinはWindowsを「対象とする」ことはできません。C#で記述したものは何もないため、Windows上で実行する準備ができているからです。そのため、Xamarin.Android、Xamarin.iOS、Xamarin.Macのライセンスのみを販売しています。しかし、Xamarin.Windows抽象化レイヤーは何をすることになっているのでしょうか?それは教科書のヘビ油製品でしょう:)

  2. 「ネイティブWindowsアプリケーション」-C#に関しては、ネイティブはトリッキーなWordです。 Xamarinを使用して作成されているかどうかに関係なく、C#アプリには通常、.NETまたはMonoランタイムが必要です。 [〜#〜] il [〜#〜] ではなくネイティブバイナリを作成する場合は、 。NET Nativeまたはngen などの解決策がありますが、 Xamarinの使用に依存しない問題。あなたがこの厳密な意味で「ネイティブ」を意味していたとは思いませんが、この違いに注意することは良いことです。 C#では、Windowsでも通常、一種の仮想マシンを使用します。

  3. Xamarin.Macでは、C#コードを構築できるようにMono.OSXランタイムが必要です。 Xamarin.Mac Internals で説明されているように、Objective-CランタイムとMono.OSXをブリッジします。

    ネイティブクラス(NSString、NSApplicationなど)のインスタンスを含むObjective-Cベースのランタイムがあり、マネージクラス(System.String、HttpClientなど)のインスタンスを含むC#ランタイムがあります。これら2つの作品の間にXamarin.Macが双方向のブリッジを作成するため、Objective-C(NSApplication.Initなど)のメソッド(セレクター)を呼び出すことができ、Objective-Cは(アプリデリゲートのメソッドのように)コールバックできます

    つまり、結果として得られるアプリケーションは、WebViewコンポーネントにラップされたHTMLの一部ではないという意味で「ネイティブ」です。ネイティブUI要素とAPIにアクセスできます。 Mono.OSXをインストールする必要があるという意味では、ネイティブではありません。つまり、WindowsのC#がデフォルトの環境で取得するのと同じネイティブです

  4. http://blog.xamarin.com/introduction-to-xamarin.mac-seminar/ にも慣れることをお勧めします-これは(2013)の日付である可能性がありますが、コアスルースはI信じる。スライド7をご覧ください。

  5. 「プラットフォーム固有のアプリコードの25%が何を伴う可能性があるかわかりません」-定義により、プラットフォームではないものすべて-不可知論者なので、ほとんど「純粋な」ビジネスロジック、および具体的な実装から抽象化したもの(「IRepository」インターフェイスなど)はすべて。ただし、プラットフォーム固有のものは何でも:ユーザーインターフェイス、データベースの永続性、WindowsまたはMac用のサードパーティライブラリは共有できません。 75/25の比率は非常に大まかなルールであり、アプリケーションの性質によって、走行距離は大きく異なります。

私はモバイルプラットフォーム用のXamarinの非営利的な経験しか持っておらず、iOS(Windows PhoneとAndroidのみ)はカバーしていません。これについて不正確な場合は、訂正してください。

10
Konrad Morawski