BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Xamarin、Mac App StoreにC#をもたらす

Xamarin、Mac App StoreにC#をもたらす

原文(投稿日:2012/12/19)へのリンク

 

人気のあるMonoTouchおよびMono for Androidプラットフォームのメーカー、XamarinがXamarin.MacでMac App Storeマーケットに参入した。

XamarinはOS X向けのC#バインディングを作ろうと試みた最初のメーカーではない。これまでにも、Cocoa SharpMonobjcNObjectiveといった試みがなされてきた。今回がこれまでと違うのは、これは商用製品であって、サポートが廃止されないようXamarinが出資しているところだ。

あなたは先ほどのリストにMonoMacがないことに気づいたかもしれない。これはXamarin.MacがMonoMacに対する拡張であるためだ。LGPLのライセンス制約を取り除いたことに加え、Xamarin.MacはMonoMacを超えるメリットをいくつか提供する。

特に重要なのは、完全に自己完結なアプリケーションが作れることだ。ユーザは別途Monoをインストールする必要がない。これはMac App Storeの要件であり、他のみんなにとって便利だ。

Xamarin.MacはMonoMacで見落とされていたフレームワークもサポートしている。

  • CoreBluetooth
  • GameKit
  • New MountainLion AppKit APIs
  • SceneKit
  • StoreKit

Xamarin.Macは現在、MacOS X LionおよびMoutain Lionをターゲットにしている。また、開発者にはXcodeの最新バージョン(現在4.5.2)を使うよう推奨している。

Xamarin.Macは開発者がさまざまなプラットフォームでビジネスロジックを共有できるようにするが、UIに関わるようなものはMac用に書き直す必要がある。Xamarinは、クロスプラットフォームのツールキットを提供するのではなく、ネイティブバインディングを使ってアプリケーションをデバイスにふさわしい見栄えにするよう、開発者を促している。

多くの開発者にとって、これはずっと論点になっていた。“write-once, run-anywhere” 体験を提供する、XAMLベースのUI言語、おそらくSilverlight/Moonlightをベースとするものを好む開発者も多かった。スタイリングとアニメーションが豊富にサポートされているので、たとえプラットフォーム横断で再利用できないとしても、XAMLに関心を持っている人もいる。

Data Dashboardのadamkempは、コードの再利用についてこう語っている。

私はData Dashboard for iPadのリードデベロッパーです。これはアナウンスで言及された最初のケーススタディアプリになります。私たちはこのアプリで、WPF/Silverlight用に書かれたC#コードをかなり再利用しました。UI部分は完全に違うのですが、大きなアプリにはUI以外のコードもたくさんあります。

彼はこう続ける。

WPSとiOSでMVVMを適用するにはどうするのが一番いいのか、私たちはまだ学んでいるところです。(現在のところ、このコードベースではAndroidをサポートしていません)。Data Dashboard自体はiPadしかサポートしていないため、UIコードはすべてiPad固有でした。そのため、このアプリではそれぞれのビューのためにビューコントローラがあるというAppleのMVCパターンをそのまま使いました。このビューコントローラの裏にはクロスプラットフォーム可能なモデルがあります。

私たちはクロスプラットフォームのアプリに取り組み始めているところで、現在の計画では、WPFのMVVMパターンをiOSコードに統合する予定です。ビューモデルクラスはUIViewController(少なくとも理にかなっているところ)から継承する予定で、部分クラスを使ってプラットフォーム固有コードを別のファイルに分離します。

これはつまり、実際には、そもそも正しくMVVMをするわけではないということです。私たちのビューモデルはビューへのリファンレンスを持っており、これは正式なMVVMにはふさわしくありません。もしスクラッチから始められていれば、MVVMをその意図通りに実装することで、プラットフォーム固有コードとプラットフォームにとらわれないコードを、さらに分離しようとしていたでしょう。つまり、ビューモデルはプラットフォームにとらわれなくなり、ビューはプラットフォーム固有になり、ビューがビユーモデルに結合するというように。

私たちはData Dashboardでコマンディングを使いました。今後のアプリでもさらにこれを使うつもりです。しかしながら、WPFと同じように機能させるためには、MonoTouchに独自のコマンディングシステムを実装する必要がありました。Appleがやっているコマンディングは、Objective Cのセレクタとレスポンダチェーンによるものです。私はいくつかのケースでこれら2つのアプローチにあるギャップを埋めようとしましたが、MonoTouchにはそれを困難にする制限がいくつかあります。

「.NETのデスクトップおよびモバイルアプリケーション向けクロスプラットフォームGUIフレームワーク」Etoについて、彼はこう答えた。

ありがとう、でも私たちはクロスプラットフォームGUI APIを使いたくはありません。私たちはネイティブのUI要素を使って各プラットフォーム専用に設計されたUIを作ることで、UIがそのプラットフォームにとって完全にネイティブに見えることを望んでいます。クロスプラットフォームAPIは結局のところ、すべてのプラットフォームに共通な最低限の要素を使ったUIになり、どうやってもしっくりこないと思います。タッチスクリーンはマウスとキーボードとは違います。ですから、タッチ向けのUIはタッチされることを念頭に設計されるべきで、マウスとキーボード向けに設計されたUIを移植すべきではありません。

 

この記事に星をつける

おすすめ度
スタイル

BT