Pros:
- Se puede utilizar C# para codificar todas las plataformas.
- El rendimiento es bastante bueno y comparable al nativo. Mucho más rápido que algo como PhoneGap.
- Personalizable para permitir a los usuarios crear una apariencia nativa para cada plataforma, ya que Xamarin utiliza componentes de interfaz de usuario nativos de cada plataforma, por lo que se puede hacer que se vea como una aplicación nativa de iOS.
- Soporte completo para características de hardware como cámara, acelerómetro, gps
- La codificación para iOS / Android se puede hacer en un IDE: Xamarin IDE o Visual Studio.
Cons:
- El coste de la licencia de Xamarin no es barato (1000$ por plataforma / por dev).
- El último soporte para cada plataforma (iOS / Android) dependerá de la rapidez con la que Xamarin abra estas APIs a los devs. Es decir, los nuevos SDKs de iOS / Andriod se liberan y Xamarin tendrá que actualizar sus APIs para soportar los nuevos SDKs de iOS / Android
- Hay una curva de aprendizaje involucrada en el uso de Xamarin. El desarrollador todavía necesita conocer C# / .NET y también la plataforma (iOS / Android), el marco, la interfaz de usuario y los ciclos de vida para los que está desarrollando, además de aprender el IDE y el marco de Xamarin.
- No se puede utilizar para crear Windows XP+ (aplicación de escritorio). Xamarin es principalmente para aplicaciones de Windows Phone y Windows 8 (Metro). Aunque la aplicación de escritorio todavía puede ser codificada en C# /.Net normalmente.
- No puede utilizar las bibliotecas de código abierto que son populares en iOS / Android. Aunque .NET tiene su cuota de apoyo de código abierto
- Ecosistema más pequeño por lo que es más difícil encontrar problemas de apoyo ya que este es un producto de pago. Tendrá que confiar en el soporte de Xamarin si el problema de desarrollo / errores surge con sus herramientas.
Para resumir y aclarar los puntos: Xamarin no es una plataforma «Escribir una vez ejecutar en cualquier lugar». Básicamente permite a los desarrolladores codificar las aplicaciones en un único lenguaje C#, lo que permite compartir el código entre plataformas. La ventaja es el buen rendimiento y la posibilidad de personalizar la interfaz de usuario para que parezca nativa. La desventaja es que requiere un código de interfaz de usuario único para cada plataforma y la familiaridad con cada plataforma, ya que utiliza componentes de interfaz de usuario nativos. Cosas como la seguridad de los datos / encriptación, el código de red se puede hacer en C# / .Net y compartir entre plataformas.