web-dev-qa-db-ja.com

Xamarin 2.0対Appceleratorチタン対PhoneGap

今年のすべてのIDEの進化(トピックに関するすべてのプラットフォームが変更された)の後、これらのプラットフォームのテクノロジの状態がどのようなものであるかを理解したいと思います。

それぞれの長所と短所は何ですか?これらのアプローチの1つにいくつかの制限がありますか?

C#とJavascriptについては、私は良い経験を持っていますが、プログラム的な言語の影響があるとは言えません。

254
Valerie Linc

概要

Tim Anderson が報告したとおり

クロスプラットフォーム開発大したことであり、ある日が来るまでそうであり続ける誰もが同じプラットフォームを使用しています。アンドロイド? HTML? WebKit? iOS? Windows? Xamarin?チタン? PhoneGap?コロナ? ecc。

時々、クロスプラットフォームモバイルアプリには本質的に2つのアプローチがあると言われると聞きます。 useまたは埋め込みブラウザコントロールのいずれか、およびを記述できます。 Adobe PhoneGap/CordovaまたはSenchaが取った同様のアプローチのように、ネイティブアプリとしてラップされたWebアプリ、またはuseクロスプラットフォームツールネイティブアプリを作成 Xamarin Studio、Appcelerator Titanium、またはEmbarcardero FireMonkeyとして。

ただし、2番目のカテゴリには多様性があります。特に、ユーザーインターフェイスを抽象化する程度に関して異なります。

これがトレードオフです。クロスプラットフォームフレームワークを設計する場合、すべてのプラットフォームでアプリケーションをほぼ同じように動作させることができます。すべてのプラットフォームでUIデザインを共有している場合、すべての場合にデザインを均等に感じさせるのは困難です。ほとんどのゲームで採用されているアプローチを採用し、アプリに特有のデザインを使用し、どのプラットフォームでもネイティブのルックアンドフィールを持たない場合でも、プラットフォーム間で一貫性を保つことをお勧めします。

edit2014年にXamarin v3は Xamarin.Forms の選択肢を提供し始めました。そのような素晴らしい答えのためにインライン編集の自由を取りました)

一方、Xamarin Studioは、共有GUIフレームワークの提供を試みません。

すべてのプラットフォームで機能するユーザーインターフェース抽象化レイヤーを提供しようとはしていません。これは、一般的な最小のユーザーインターフェイスにつながる悪いアプローチだと思います。 (ナット・フリードマンからティム・アンダーソン)

これは正しいです;欠点は、アプリの2つ以上のユーザーインターフェイスデザインを維持するための労力です。

PhoneGapとTitaniumの比較は Kevin Whinnery ブログでよく報告されています。

PhoneGap

PhoneGapの目的は、HTMLベースのWebアプリケーションをデプロイし、ネイティブアプリケーションとしてインストールすることです。 PhoneGap Webアプリケーションはネイティブアプリケーションシェルにラップされており、複数のプラットフォームのネイティブアプリストアを介してインストールできます。さらに、PhoneGapは、ブラウザで公開されていない基本的なカメラアクセス、デバイスの連絡先、センサーなどのWebアプリケーションでは通常利用できない共通のネイティブAPIセットの提供に努めています。

PhoneGapアプリケーションを開発するために、開発者は静的なWebサイトを開発するのと同じように、ローカルディレクトリにHTML、CSS、およびJavaScriptファイルを作成します。ブラウザでのネイティブ品質のUIパフォーマンスへのアプローチは簡単な作業ではありません。Senchaは、この問題を解決するために専任のWebプログラミングエキスパートの大規模なチームを採用しています。それでも、今日のほとんどのブラウザでは、ほとんどのプラットフォームで、ネイティブ品質のUIパフォーマンスと応答性に達することは、単にではありません可能、Sencha Touchのような高度なフレームワークでも。ただし、ブラウザはすでに「十分」です。要件と感度に依存しますが、ネイティブUIよりも間違いなく劣ります。ブラウザによっては、さらに悪い場合もあります。

PhoneGapは、信じられるほど真のクロスプラットフォームではありません。すべてのプラットフォームですべての機能が等しくサポートされているわけではありません。

  • Javascriptはアプリケーションスケールのプログラミング言語ではありません。グローバルスコープの相互作用が多すぎるため、異なるライブラリがうまく共存できないことがよくあります。 knockout.jsとjQuery.mobileをうまく連携させるために何時間も費やしましたが、まだ問題があります。

  • フレームワークとライブラリの断片化されたランドスケープ。選択肢が多すぎます。また、選択肢が多すぎて十分に成熟していません。

  • 奇妙なことに、アプリのニーズに対して、まともなパフォーマンスを達成できました(ただし、jQuery.Mobileではできません)。 jqMobiを試しました(あまり成熟していませんが、高速です)。

  • 他のアプリやcdevice機能との対話機能は非常に限られています。HTML5にはジオロケーション、カメラ、ローカルデータベースなどの少数のものを除いて標準がないため、これはクロスプラットフォームではありません。

Karl Waclawek

Appcelerator Titanium

TitaniumMobileの目標は、高レベルのクロスプラットフォームJavaScriptランタイムおよびモバイル用API開発(今日はiOS、AndroidおよびWindows Phoneをサポートしています。 MacRuby/Hot Cocoa、PHP、またはnode.jsは、PhoneGap、Adobe AIR、Corona、またはRhomobileを使用する場合よりも優れています。Titaniumは、モバイル開発に関する2つのアサーションに基づいて構築されています。 。これらの領域は、コードの再利用を対象とする必要があります。-プラットフォーム固有のAPI、UI規則、およびそのプラットフォーム用に開発する際に開発者が組み込む必要がある機能があります。

したがって、これらの理由から、Titaniumは「一度だけ書き込み、どこでも実行」の試みではありません。 Xamarinと同じ。

チタンは、Xamarinの方向と同様の方向にさらに一歩進んでいきます。実際には、深さの異なる2つのレイヤーを実行します。チタン(JSの)レイヤーで、蜂のJS-of-Titaniumを提供します。さらに低レベルにしたい場合は、追加のレイヤー(Hyperloopと呼ばれる)を作成します。ここで(常にJSを使用して)SOのネイティブAPIに直接コールバックします

Xamarin(+ MVVMCross)

AZDevelop.net

Xamarin(元はNovellの一部門)は、過去18か月で、独自のIDEとVisual Studioのスナップインを市場に投入しました。 Monoの基本的な前提は、ネイティブUI開発戦略を維持しながら、C#を使用して異種のモバイルアプリケーションを作成することです。

ネイティブアプリケーションを開発するためのビジュアルデザインプラットフォームの作成に加えて、テストスイートが統合され、ネイティブライブラリサポートとNugetスタイルのコンポーネントストアが組み込まれています。最近、彼らはIDEを介してiOSビジュアルデザインを提供し、開発者がXCodeを開けないようにしました。 Visual Studioでは、3つのプラットフォームすべてがサポートされるようになり、クラウドテストスイートがまもなく登場します。

Xamarinは最初から、豊富なAndroidビジュアルデザインエクスペリエンスを提供しています。 EclipseまたはXamarin以外のIDEをまだダウンロードまたは開いていません。本当に素晴らしいのは、LINQを使用してコレクションを操作したり、Objective-CおよびJavaの制限から解放されるカスタムデリゲートとイベントを作成できることです。 Newtonsoft JSON.Netなど、私が甘やかされてきたライブラリの多くは、3つの環境すべてで完全に機能します。

私の意見では、いくつかの大きな利点があります。

  • ネイティブパフォーマンス
  • 読みやすいコード(IMO)
  • テスタビリティ
  • クライアントとサーバー間の共有コード
  • サポート(ただし、Xamはbugzillaでより良い結果を得ることができます)

私にとってのアップグレードは、XamarinとMVVMCrossを組み合わせて使用​​することです。まだかなり新しいフレームワークですが、他のいくつかのフレームワーク(MvvmLightやmonocrossなど)の経験から生まれ、現在リリースされているいくつかのクロスプラットフォームプロジェクトで使用されています。

結論

これらすべてのフレームワークを知った後の私の選択は、製品のニーズに基づいて開発ツールを選択することでした。ただし、一般的に、使い始めた後は、使い始めた後も(最初のオーバーヘッドが大きい場合でも)使い心地の良いツールを使い始めたら、いつまでも使い続けます。

Xamarin + MVVMCrossを選択し、この選択に満足していると言わなければなりません。ソフトウェア更新のためのネイティブSDKへのアプローチや、システムの限られた機能や機能グラフィックスの最も些細なことを見るのを恐れていません。 かなり構造化されたコードを書く(DDD + SOA)は非常に便利ですネイティブC#ビューの実装と共有されるcoreプロジェクト

参照とリンク

345
Luigi Saggese

私はAppcelerator Titaniumをあまり使用していませんが、最後に理解を深めます。

PhoneGapとXamarinの違いについてもう少し話すことができます。週に2回(またはそれ以上)この2日間で作業しているからです。

すでにC#とJavaScriptに精通している場合、私が推測する質問はビジネスロジックはJavaScriptまたはC#により適した領域にありますか?

PhoneGap

PhoneGapはJavaScript and HTMLを使用してアプリケーションを記述できるように設計されており、それらが提供する機能の多くは、HTML5で最終的に利用可能になる機能について現在提案されている仕様を模倣するように設計されています。私の意見では、PhoneGapの大きな利点は、HTMLでUIを実行しているため、簡単にプラットフォーム間で移植にできることです。欠点は、プラットフォーム間で同じUIを移植しているため、どのプラットフォームでもまるで自宅にいるように感じられないことです。つまり、さらに調整することなく、あなたはiOSとAndroidで完全に自宅にいるようなアプリケーションを持つことはできません、つまりiOSとAndroidスタイリングを持っていることを意味します。ロジックの大部分はJavaScriptを使用して記述できます。つまり、JavaScriptもプラットフォーム間で移植にできます。現在の PhoneGap API が必要なことのほとんどを実行している場合は、簡単に起動して実行できます。ただし、APIにないデバイスから必要なものがある場合は、プラグイン開発の楽しみになります。これはネイティブデバイスの選択した開発言語になります(注意点が1つありますが、それについては説明します)。つまり、Objective-CやJavaなどで迅速に対応する必要がある可能性が高いことを意味します。このモデルの良い点は、通常、適応できることです。多くの異なるネイティブライブラリを目的に合わせて使用​​します。多くのライブラリには既にPhoneGapプラグインがあります。これらの言語の経験はあまりないかもしれませんが、少なくとも多数の例から作業を始めることができます。

シャマリン

Xamarin.iOSおよびXamarin.Android(MonoTouchおよびMonoDroidとも呼ばれる)は、ビジネスロジックの1つのライブラリを使用できるように設計されており、これをアプリケーション内で使用し、UIにフックします。 .NET 4.5に基づいているため、awesome lambda notationsLINQ、およびその他多数のC#の素晴らしさが得られ、ビジネスロジックの記述が少なくなります。痛い。ここでの欠点は、Xamarinがアプリケーションをデバイス上で本当にネイティブに感じさせることを期待していることです。つまり、ビジネスと結び付ける前に、おそらくプラットフォームごとにUIを書き換えるになります。論理。 MvvmCrossについて聞いたことがあります。これはこれを簡単にするために設計されたですが、実際に調べる機会はありませんでしたまだ。 C#のMVVMシステムに精通している場合は、これをご覧ください。ネイティブライブラリに関しては、MonoTouchは興味深いものになります。 MonoTouchには、C#コードを伝えるためにBinding libraryが必要です基盤となるObjective-CおよびJava codeへのリンク方法。これらのライブラリの一部には既にバインディングがありますが、もしそうでない場合は、ライブラリを作成するのは面白いでしょう。 Xamarinは、このプロセスを支援するためにObjective Sharpieと呼ばれるツールを作成しました。ほとんどの場合、それはあなたを助けますそこの95% =。残りの5%は、おそらくライブラリーをバインドしようとするのに80%の時間がかかります。

更新

以下のコメントに記載されているように、Xamarinは Xamarin Forms をリリースしました。これは、プラットフォーム固有のUIコンポーネントを中心にクロスプラットフォーム抽象化です。一見の価値があります。

PhoneGap/Xamarin Hybrid

さて、先ほどPhoneGapで述べた警告は、Hybrid approachです。ここでは、一部にPhoneGapを使用し、一部にXamarinを使用できます。私はこれについてかなりの経験を積んでおり、それに対する注意と思います。 。これの問題は、それがno man's landであり、問​​題に遭遇した場合、あなたがしていることに近づき、あなたが何をしているのか疑問に思う人はほとんどいないだろうということです。大きくしようとしています。それは実行可能ですが、それは間違いなく楽しいことではありません

Appcelerator Titanium

前にも述べたように、Appcelerator Titaniumとはあまり連携していないため、両者の違いについては、 TitaniumとPhonegapの比較 または Corona、Phonegapの比較、チタン 違いの非常に詳細な説明があるため。基本的に、両方ともJavaScriptを使用のようですが、JavaScriptの解釈方法はわずかに異なります。 TitaniumではJavaScriptを Titanium SDKに書き込みますが、PhoneGapでは PhoneGap API を使用してアプリケーションを記述します。 PhoneGapは非常にHTML5およびJavaScript標準に準拠しているため、JQueryなど、ほぼすべてのJavaScriptライブラリを使用できます。 PhoneGapを使用すると、ユーザーインターフェイスはHTMLとCSSで構成されます。 Titaniumを使用すると、Cross-platform XMLが表示されます。これはネイティブコンポーネントの生成に見えます。これは、ネイティブのルックアンドフィールが確実に向上することを意味します。

103
Jamie Starke

私はXamarinと仕事をしました。これが私が見つけたプラスとマイナスです。

ポジティブ

  1. コーディングが簡単で、C#によって作業が簡単になります
  2. パフォーマンスは問題になりません
  3. ネイティブUI
  4. XcodeやVisual Studioによく似た優れたIDE。
  5. Xamarinデバッガ
  6. Xamarin SDKは無料でオープンソースです。 Wiki

負数

  1. ターゲットとする各プラットフォーム(iOS、Android、WP8)のAPIを知っておく必要があります。ただし、Objective-CやJavaを知っている必要はありません。
  2. Xamarinはプラットフォーム間でわずかなことしか共有しません(データベースやWebサービスなど)。
  3. 各プラットフォームのUIを別々に設計する必要があります(これは祝福または呪いになることがあります)。
38
FebinDonz

Phonegapはかなり遅いです。ボタンをクリックすると次の画面を表示するのに最大3秒かかることがあります。 iscrollは遅くて飛び跳ねています。

私が克服することができたが、全部で - 他の面白いバグや問題がある - 完全には成熟していない。

編集:不機嫌そうなコメントによると、実際に遅いのはPhonegapではなく、JS/Browserネイティブエンジンです。

11
Elia Weiss

PhoneGapとNative UIをうまく統合した AppGyver Steroids もあります。

ステロイドを使用すると、ネイティブのタブ、ネイティブのナビゲーションバー、ネイティブのアニメーションとトランジション、ネイティブのモーダルウィンドウ、ネイティブの引き出し/パネル(Facebookのサイドメニュー)などをPhoneGapアプリに追加できます。

これがデモです。 http://youtu.be/oXWwDMdoTCk?t=20m17s

8
Nate

別の方法として、bridgeit.mobiのBridgeItを調べてみるとよいでしょう。オープンソース、それはそれがデバイス上の標準的なブラウザ対Webビューブラウザを活用するという点で、上で議論されたブラウザパフォーマンス/一貫性問題を解決しました。また、アプリストアの展開やネイティブコンテナを気にせずにネイティブ機能にアクセスすることもできます。

私はシンプルなカメラベースのアクセスとスキャナのアクセスのために使っていました、そしてそれはシンプルなアプリのためにうまく働きます。ドキュメンテーションは少し軽いです。もっと複雑なアプリでどうなるかわからない。

4
Brad75