web-dev-qa-db-fra.com

Xamarin 2.0 vs Appcelerator Titanium vs PhoneGap

Après toutes les IDE évolutions (toutes les plates-formes sur le sujet ont été modifiées) de cette année, je cherche à comprendre l’état de la technologie pour ces plates-formes.

Quels sont les points forts et les points faibles de chacun? Il y a quelques limitations de l'une de ces approches?

J'ai une bonne expérience de C # et de Javascript, car il n'y a pas d'influence du langage programmatique susceptible de pencher d'un côté.

256
Valerie Linc

Vue d'ensemble

Tel que rapporté par Tim Anderson

Le développement multiplate-forme est un gros problème , et le restera jusqu'au jour où tout le monde utilise la même plate-forme. Android? HTML? WebKit? iOS? Les fenêtres? Xamarin? Titanum? PhoneGap? Couronne? ecc.

Parfois, j'entends dire que il existe essentiellement deux approches pour les applications mobiles multiplates-formes. Vous pouvez soit utiliser un contrôle de navigateur intégré et écrire un . Une application Web intégrée dans une application native , comme dans Adobe PhoneGap/Cordova ou une approche similaire adoptée par Sencha, ou vous pouvez utiliser un outil multiplate-forme qui crée des applications natives , telles que comme Xamarin Studio, Appcelerator Titanium ou Embarcardero FireMonkey.

Dans la deuxième catégorie cependant, il y a diversité. En particulier, ils varient en fonction de la mesure dans laquelle ils abstiennent l'interface utilisateur.

Voici le compromis. Si vous concevez votre infrastructure multiplate-forme, votre application peut fonctionner presque de la même manière sur toutes les plates-formes. Si vous partagez la conception de l'interface utilisateur sur toutes les plateformes, il est difficile de donner l'impression que votre conception est également correcte dans tous les cas. Il serait peut-être préférable d'adopter l'approche adoptée par la plupart des jeux, en utilisant un design distinctif de votre application et en valorisant sa cohérence sur toutes les plateformes, même s'il ne possède pas l'apparence native sur aucune plateforme.

modifier Xamarin v3 en 2014 a commencé à offrir le choix de Xamarin.Forms ainsi qu’un natif pur qui suit toujours la philosophie mentionnée ici ( a pris la liberté de modifier en ligne car une si bonne réponse)

Xamarin Studio, d’autre part, ne tente pas de fournir un cadre d’interface graphique partagé:

Nous n’essayons pas de fournir une couche d’abstraction d’interface utilisateur qui fonctionne sur toutes les plateformes. Nous pensons que c’est une mauvaise approche qui conduit aux interfaces utilisateur avec le plus petit dénominateur commun. (Nat Friedman à Tim Anderson)

C'est juste; mais l'inconvénient est l'effort nécessaire pour maintenir au moins deux conceptions d'interface utilisateur pour votre application.

La comparaison de PhoneGap et de Titanium est bien rapportée dans le blog Kevin Whinnery .

PhoneGap

PhoneGap a pour but de permettre au applications Web basées sur HTML d’être déployées et installées comme applications natives . Les applications Web PhoneGap sont encapsulées dans un shell d'application natif et peuvent être installées via les magasins d'applications natifs pour plusieurs plates-formes. En outre, PhoneGap s'efforce de fournir un ensemble d'API natif commun qui n'est généralement pas disponible pour les applications Web, telles que l'accès de base à l'appareil photo, les contacts de l'appareil et les capteurs non exposés dans le navigateur.

Pour développer des applications PhoneGap, les développeurs créeront des fichiers HTML, CSS et JavaScript dans un répertoire local, un peu comme si vous développiez un site Web statique. Approche des performances de l'interface utilisateur de qualité native dans le navigateur est une tâche non triviale - Sencha emploie une grande équipe d'experts en programmation Web dédiés à plein temps à la résolution de ce problème. Néanmoins, sur la plupart des plates-formes, dans la plupart des navigateurs actuels, atteindre les performances de l'interface utilisateur de qualité native et la réactivité ne sont tout simplement pas possible , même avec un framework aussi avancé que Sencha Touch. Le navigateur est-il déjà "assez bon"? Cela dépend de vos exigences et de vos sensibilités, mais c’est incontestablement moins bon que l’UI native. Parfois bien pire, selon les navigateurs.

PhoneGap n'est pas vraiment aussi multi-plateforme qu'on pourrait le croire, toutes les fonctionnalités ne sont pas supportées de manière égale sur toutes les plateformes.

  • Javascript n'est pas un langage de programmation à l'échelle de l'application, trop d'interactions globales, différentes bibliothèques ne coexistent pas souvent bien. Nous avons passé de nombreuses heures à essayer de bien faire fonctionner knockout.js et jQuery.mobile, et nous avons toujours des problèmes.

  • Paysage fragmenté pour les cadres et les bibliothèques. Trop de choix, et trop ne sont pas assez matures.

  • Curieusement, pour les besoins de notre application, des performances décentes pourraient être atteintes (pas avec jQuery.Mobile, cependant). Nous avons essayé jqMobi (pas très mature, mais rapide).

  • Une capacité très limitée d'interaction avec d'autres applications ou avec des capacités de cdevice, ce qui ne serait de toute façon pas multiplateforme, car il n'y a pas de normes en HTML5 sauf quelques-unes, comme la géolocalisation, les bases de données de caméras et locales.

par Karl Waclawek

Appcelerator Titanium

Le but de Titanium Mobile est de fournir un code JavaScript multiplate-forme de haut niveau runtime et API pour le développement mobile (nous prenons actuellement en charge iOS, Android et Windows Phone. Titanium a en fait davantage en commun avec MacRuby/Hot Cocoa, PHP ou node.js qu'avec PhoneGap, Adobe AIR, Corona ou Rhomobile.Titanium repose sur deux affirmations concernant le développement mobile: - Il existe un noyau d'API de développement mobile qui peut être normalisé sur plusieurs plates-formes. Ces zones doivent être ciblées pour la réutilisation du code - Des API, des conventions d’interface utilisateur et des fonctionnalités spécifiques à la plate-forme doivent être incorporées lors du développement pour cette plate-forme, ainsi que des codes spécifiques pour une utilisation optimale.

Donc, pour ces raisons, Titanium n'est pas une tentative "d'écrire une fois, de courir partout" . Identique à Xamarin.

Titanium vont faire un pas de plus dans la direction similaire à celle de Xamarin. En pratique, ils vont faire deux couches de profondeurs différentes: la couche Titanium (en JS), qui vous donne une abeille JS-of-Titanium. Si vous voulez aller plus bas niveau, ont créé une couche supplémentaire (appelée Hyperloop), où (toujours avec JS) pour vous rappeler directement aux API natives de SO

Xamarin (+ MVVMCross)

AZDevelop.net

Au cours des 18 derniers mois, Xamarin (à l’origine une division de Novell) a mis sur le marché son propre IDE et son composant logiciel enfichable pour Visual Studio. Le principe de base de Mono est de créer des applications mobiles disparates utilisant C # tout en maintenant des stratégies de développement d'interface utilisateur natives.

Outre la création d'une plate-forme de conception visuelle pour développer des applications natives, ils disposent de suites de tests intégrées, d'une prise en charge de bibliothèques natives et d'un magasin de composants de style Nuget. Récemment, ils ont fourni une conception visuelle iOS via leur IDE, libérant ainsi le développeur de l'ouverture de XCode. Dans Visual Studio, les trois plates-formes sont désormais prises en charge et une suite de tests sur le cloud est à l'horizon.

Dès le départ, Xamarin a fourni une riche expérience de conception visuelle Android. Je n'ai pas encore téléchargé ou ouvert Eclipse ou tout autre IDE hormis Xamarin. Ce qui est vraiment étonnant, c’est que je puisse utiliser LINQ pour travailler avec des collections ainsi que pour créer des délégués et des événements personnalisés qui me libèrent des limitations de objective-C et Java. Beaucoup de bibliothèques avec lesquelles j'ai été gâté, comme Newtonsoft JSON.Net, fonctionnent parfaitement dans les trois environnements.

À mon avis, il existe plusieurs avantages énormes, y compris

  • performance native
  • code plus facile à lire (IMO)
  • testabilité
  • code partagé entre le client et le serveur
  • support (bien que Xam puisse faire mieux sur bugzilla)

La mise à niveau est pour moi l’utilisation combinée de Xamarin et de MVVMCross. C'est encore un framework assez nouveau, mais il est né de l'expérience de plusieurs autres frameworks (tels que MvvmLight et monocross) et il a maintenant été utilisé dans plusieurs projets multi-plateformes publiés.

Conclusion

Mon choix, après avoir connu tous ces problèmes, était de choisir un outil de développement basé sur les besoins du produit . En général, toutefois, si vous commencez à utiliser un outil avec lequel vous vous sentez à l'aise (même s'il nécessite un temps système supérieur), vous l'utiliserez pour toujours.

J'ai choisi Xamarin + MVVMCross et je dois dire pour être heureux de ce choix. Je n'ai pas peur d'approcher le SDK natif pour les mises à jour logicielles, ni de voir les fonctionnalités limitées d'un système, ni l'élément graphique le plus trivial. Écrire du code assez structuré (DDD + SOA) est très utile pour avoir un projet principal partagé avec la mise en œuvre native des vues C #.

Références et liens

345
Luigi Saggese

Je n'ai pas beaucoup travaillé avec Appcelerator Titanium, mais je vais en comprendre le sens à la fin.

Je peux parler un peu plus des différences entre PhoneGap et Xamarin, car je travaille avec ces deux 5 jours (ou plus) par semaine.

Si vous connaissez déjà C # et JavaScript, la question qui me revient est la suivante: la logique métier se situe-t-elle dans un domaine plus adapté à JavaScript ou à C #?

PhoneGap

PhoneGap est conçu pour vous permettre d'écrire vos applications en utilisant JavaScript et HTML , et la plupart des fonctionnalités qu'ils fournissent sont conçues pour imiter les spécifications proposées actuelles. pour la fonctionnalité qui sera éventuellement disponible avec HTML5. À mon avis, le gros avantage de PhoneGap est que, puisque vous utilisez l'interface utilisateur avec HTML, il peut facilement être porté entre plates-formes . L'inconvénient est que, comme vous portez la même interface utilisateur entre plates-formes, vous ne vous sentirez pas aussi à l'aise que chez l'une d'entre elles. Ce qui signifie que, sans autre ajustement, vous ne pouvez pas avoir une application qui se sente pleinement à l'aise dans iOS et Android , ce qui signifie qu'elle est dotée d'iOS et de Android style. La majorité de votre logique peut être écrite en JavaScript, ce qui signifie qu’elle peut également être portée entre plates-formes . Si l'API PhoneGap actuelle remplit la majeure partie de vos tâches, il est très facile de s'y mettre. Cependant, si certains éléments de l’appareil ne figurent pas dans l’API, vous devez vous lancer dans le plaisir de Développement de plug-in , qui la langue de choix du système de développement du périphérique natif (avec une mise en garde, mais j'y reviendrai), ce qui signifie que vous devrez probablement vous mettre à jour rapidement en Objective-C, Java, etc. La bonne chose à propos de ce modèle est que vous pouvez généralement adapter de nombreuses bibliothèques natives pour répondre à vos besoins, et de nombreuses bibliothèques possèdent déjà des plug-ins PhoneGap . Bien que vous n’ayez peut-être pas beaucoup d’expérience avec ces langues, il vous faudra au moins une multitude d’exemples .

Xamarin

Xamarin.iOS et Xamarin.Android (également appelés MonoTouch et MonoDroid) sont conçus pour vous permettre d’avoir une bibliothèque de logique métier et de l'utiliser dans votre application et connectez-le à votre interface utilisateur. Comme il est basé sur .NET 4.5, vous obtenez quelques notations lambda géniales , LINQ, et tout un tas d’autres génies de C #, qui peuvent rendre l’écriture de la logique de votre entreprise moins pénible. L’inconvénient est que Xamarin s’attend à ce que vous souhaitiez que vos applications se sentent réellement natives sur l’appareil, ce qui signifie que vous finirez probablement par réécrire votre interface utilisateur pour chaque plate-forme , avant de l'accrocher à la logique métier. J'ai entendu parler de MvvmCross, qui est conçu pour c'est plus facile pour vous , mais je n'ai pas encore eu l'occasion de l'examiner. Si vous connaissez le système MVVM en C #, vous voudrez peut-être jeter un coup d'œil à ceci. En ce qui concerne les bibliothèques natives, MonoTouch devient intéressant. MonoTouch nécessite une bibliothèque Binding pour indiquer à votre code C # comment créer un lien dans le code sous-jacent Objective-C et Java . Certaines de ces bibliothèques auront déjà des liaisons, mais si la vôtre ne l’a pas, sa création peut être intéressante. Xamarin a créé un outil appelé Objective Sharpie pour vous aider dans ce processus et, pour la plupart, vous obtiendrez 95% du chemin . Les 5% restants prendront probablement 80% de votre temps à essayer de lier une bibliothèque.

Mettre à jour

Comme indiqué dans les commentaires ci-dessous, Xamarin a publié Xamarin Forms , une abstraction transversale autour de la composants d'interface utilisateur spécifiques à la plate-forme. Ça vaut vraiment le coup d'oeil.

PhoneGap/Xamarin Hybrid

Maintenant, parce que j'ai dit que j'y arriverais, l'avertissement mentionné dans PhoneGap ci-dessus est une approche hybride , où vous pouvez utiliser PhoneGap pour une partie, et Xamarin. pour une partie. J'ai pas mal d'expérience avec cela, et je vous mets en garde contre cela . Fortement . Le problème, c’est qu’il s’agit d’un terrain no man's land que, si vous rencontrez des problèmes, presque personne ne s’est approché de ce faites, et mettra en doute ce que vous essayez de faire grandement. C'est faisable, mais ce n'est certainement pas amusant .

Appcelerator Titanium

Comme je l'ai déjà mentionné, je n'ai pas beaucoup travaillé avec Appcelerator Titanium. Par conséquent, je vous suggère de regarder la comparaison entre Titanium et Phonegap ou Comparaison entre Corona, Phonegap, Titanium car il présente une description très détaillée des différences. Fondamentalement, il semble que bien que ils utilisent tous les deux JavaScript , leur interprétation de JavaScript est légèrement différente. Avec Titanium, vous écrivez votre code JavaScript dans le SDK Titanium, tandis qu'avec PhoneGap, vous écrivez votre application à l'aide de l'API PhoneGap . PhoneGap étant très conforme aux normes HTML5 et JavaScript, vous pouvez utiliser à peu près toutes les bibliothèques JavaScript de votre choix, telles que JQuery. Avec PhoneGap, votre interface utilisateur sera composée de HTML et de CSS. Avec Titanium, vous profiterez de leur XML multiplate-forme qui semble générer des composants natifs . Cela signifie qu’il aura définitivement une meilleure apparence autochtone.

103
Jamie Starke

J'ai travaillé avec Xamarin. Voici les points positifs et négatifs que j'ai trouvés:

Positifs

  1. Facile à coder, C # facilite le travail
  2. La performance ne sera pas une préoccupation
  3. Interface utilisateur native
  4. Bon IDE, un peu comme Xcode et Visual Studio.
  5. Xamarin Debugger
  6. Xamarin SDK est gratuit et open-source. Wiki

Négatifs

  1. Vous devez connaître l'API de chaque plate-forme que vous souhaitez cibler (iOS, Android, WP8). Cependant, vous n'avez pas besoin de connaître Objective-C ou Java.
  2. Xamarin ne partage que peu de choses sur toutes les plates-formes (bases de données et services Web, par exemple).
  3. Vous devez concevoir l'interface utilisateur de chaque plate-forme séparément (cela peut être une bénédiction ou une malédiction).
38
FebinDonz

L'écart téléphonique est assez lent: cliquer sur un bouton peut prendre jusqu'à 3 secondes pour afficher l'écran suivant. iscroll est lent et nerveux.

Il y a d’autres bugs amusants et problèmes que j’ai pu surmonter, mais au total - pas complètement mûris.

EDIT: Par commentaire grincheux, ce n’est pas Phonegap qui est en fait lent, c’est le moteur natif de JS/Browser

11
Elia Weiss

Il y a aussi AppGyver Steroids qui unit joliment PhoneGap et l'interface utilisateur native.

Avec Steroids, vous pouvez ajouter des éléments tels que des onglets natifs, une barre de navigation native, des animations et transitions natives, des fenêtres modales natives, un tiroir/panneau natif (menu latéral Facebook), etc., à votre application PhoneGap.

Voici une démo: http://youtu.be/oXWwDMdoTCk?t=20m17s

8
Nate

Au lieu de cela, vous pouvez consulter BridgeIt à bridgeit.mobi. Open source, il a résolu le problème de performance/de cohérence du navigateur mentionné ci-dessus en ce qu'il exploite le navigateur standard du périphérique par rapport au navigateur Web. Il vous permet également d'accéder aux fonctionnalités natives sans avoir à vous soucier des déploiements de l'App Store et/ou des conteneurs natifs.

Je l'ai déjà utilisé pour un accès simple basé sur une caméra et un scanner, et cela fonctionne bien pour les applications simples. La documentation est un peu légère. Je ne sais pas comment cela se passerait avec des applications plus complexes.

4
Brad75