Pros:
- C# peut être utilisé pour coder toutes les plateformes.
- La performance est assez bonne et comparable à celle du natif. Beaucoup beaucoup plus rapide que quelque chose comme PhoneGap.
- Personnalisable pour permettre aux utilisateurs de créer un look and feel natif pour chaque plateforme puisque Xamarin utilise des composants d'interface utilisateur natifs de chaque plateforme, de sorte qu'il peut être fait pour ressembler à une application iOS native.
- Prise en charge complète des fonctionnalités matérielles comme la caméra, l'accéléromètre, le gps
- Le codage pour iOS / Android peut être effectué sur un seul IDE : Xamarin IDE ou Visual Studio.
Cons:
- Le coût de la licence Xamarin n'est pas bon marché (1000 $ par plateforme / par dev).
- Le dernier support pour chaque plateforme (iOS / Android) dépendra de la vitesse à laquelle Xamarin ouvre ces API aux devs. I.E nouveau iOS / Andriod SDKs est publié et Xamarin devra mettre à jour leurs API pour supporter les nouveaux iOS / Android SDKs
- Il y a une courbe d'apprentissage impliquée dans l'utilisation de Xamarin. Dev doit encore connaître C# / .NET et aussi la plate-forme (iOS / Android) cadre / UI / Lifecycles qu'ils développent pour plus apprendre l'IDE / Framework Xamarin.
- Ne peut pas être utilisé pour créer windows xp+ (application de bureau). Xamarin est principalement destiné aux applications Windows Phone et Windows 8 (Metro). Bien que l'application de bureau peut toujours être codée en C# / .Net normalement.
- Canon peut pas utiliser les bibliothèques open source qui sont populaires sur iOS / Android. Bien que .NET ait sa'part de support open source
- Plus petit écosystème donc plus difficile de trouver des problèmes de support puisque c'est un produit payant. Devront compter sur le support de Xamarin si des problèmes de développement / bugs surviennent avec leurs outils.
Pour résumer et clarifier les points : Xamarin n'est pas une plateforme "Write once run anywhere". Elle permet essentiellement aux développeurs de coder les applications dans un seul langage C#, ce qui permet le partage du code entre les plateformes. L'avantage est une bonne performance et une interface utilisateur personnalisable pour un aspect natif. L'inconvénient, c'est qu'il faut un code d'interface utilisateur unique pour chaque plate-forme et une bonne connaissance de chaque plate-forme puisqu'on utilise des composants d'interface utilisateur natifs. Des choses comme la sécurité des données / le cryptage, le code de mise en réseau peuvent être faites en C# / .Net et partagées entre les plateformes.