Parte 1: Descripción de la plataforma Xamarin para dispositivos móviles

La plataforma Xamarin consta de muchos elementos que permiten desarrollar aplicaciones para iOS y Android:

  • Lenguaje C#: permite usar una sintaxis conocida y características sofisticadas, como genéricos, LINQ y la biblioteca de tareas paralelas.
  • Mono .NET Framework : proporciona una implementación multiplataforma de las amplias características de .NET Framework de Microsoft.
  • Compilador: en función de la plataforma, genera una aplicación nativa (por ejemplo, iOS) o una aplicación y un entorno de ejecución de .NET integrado (por ejemplo, Android). El compilador también realiza muchas optimizaciones para la implementación móvil, como vincular código sin usar.
  • Herramientas del IDE: Visual Studio en Mac y Windows le permite crear, compilar e implementar proyectos de Xamarin.

Además, dado que el lenguaje subyacente es C# con .NET Framework, los proyectos se pueden estructurar para compartir código que también se puede implementar en Windows Phone.

Una mirada al interior

Aunque Xamarin permite escribir aplicaciones en C# y compartir el mismo código en varias plataformas, la implementación real en cada sistema es diferente.

Compilación

El origen de C# se convierte en una aplicación nativa de diferentes maneras en cada plataforma:

  • iOS: C# está compilado con antelación (AOT) en el lenguaje de ensamblado ARM. .NET Framework se incluye, con clases sin usar que se quitan durante la vinculación para reducir el tamaño de la aplicación. Apple no permite la generación de código en tiempo de ejecución en iOS, por lo que algunas características de lenguaje no están disponibles (consulte Limitaciones de Xamarin.iOS).
  • Android: C# se compila en IL y se empaqueta con MonoVM + JIT'ing. Las clases sin usar del marco se quitan durante la vinculación. La aplicación se ejecuta en paralelo con Java/ART (entorno de ejecución de Android) e interactúa con los tipos nativos a través de JNI (consulte Limitaciones de Xamarin.Android).
  • Windows: C# se compila en IL y se ejecuta mediante el entorno de ejecución integrado y no requiere herramientas de Xamarin. El diseño de aplicaciones de Windows siguiendo las instrucciones de Xamarin facilita la reutilización del código en iOS y Android. El Plataforma universal de Windows también tiene una opción .NET Native, que se comporta de forma similar a la compilación AOT de Xamarin.iOS.

La documentación del enlazador para Xamarin.iOS y Xamarin.Android proporciona más información sobre esta parte del proceso de compilación.

Se debe evitar la generación dinámica de código en tiempo de ejecución "compilación" con System.Reflection.Emit.

El kernel de Apple impide la generación de código dinámico en dispositivos iOS, por lo que la emisión de código sobre la marcha no funcionará en Xamarin.iOS. Del mismo modo, las características de Dynamic Language Runtime no se pueden usar con herramientas de Xamarin.

Algunas características de reflexión funcionan (por ejemplo, MonoTouch.Dialog la usa para la API de Reflexión), pero no para la generación de código.

Acceso del SDK de plataforma

Xamarin hace que las características proporcionadas por el SDK específico de la plataforma puedan acceder fácilmente con la sintaxis familiar de C#:

  • iOS: Xamarin.iOS expone los marcos del SDK de CocoaTouch de Apple como espacios de nombres a los que puede hacer referencia desde C#. Por ejemplo, el marco UIKit que contiene todos los controles de interfaz de usuario se puede incluir con una instrucción simple using UIKit;.
  • Android: Xamarin.Android expone el SDK de Android de Google como espacios de nombres, por lo que puede hacer referencia a cualquier parte del SDK compatible con una instrucción using, como using Android.Views; para acceder a los controles de la interfaz de usuario.
  • Windows: las aplicaciones de Windows se compilan con Visual Studio en Windows. Los tipos de proyecto incluyen Windows Forms, WPF, WinRT y el Plataforma universal de Windows (UWP).

Integración sin problemas para desarrolladores

La belleza de Xamarin es que a pesar de las diferencias en segundo plano, Xamarin.iOS y Xamarin.Android (junto con los SDK de Windows de Microsoft) ofrecen una experiencia perfecta para escribir código de C# que se puede reutilizar en las tres plataformas.

La lógica de negocios, el uso de bases de datos, el acceso a la red y otras funciones comunes se pueden escribir una vez y reutilizarse en cada plataforma, lo que proporciona una base para interfaces de usuario específicas de la plataforma que se ven y funcionan como aplicaciones nativas.

Disponibilidad del entorno de desarrollo integrado (IDE)

El desarrollo de Xamarin se puede realizar en Visual Studio en Mac o Windows. El IDE que elija se determinará mediante las plataformas a las que desea dirigirse.

Dado que las aplicaciones de Windows solo se pueden desarrollar en Windows, para compilar para iOS, Android y Windows, es necesario Visual Studio para Windows. Sin embargo, es posible compartir proyectos y archivos entre equipos Windows y Mac, por lo que las aplicaciones iOS y Android se pueden compilar en un equipo Mac y el código compartido podría agregarse más adelante a un proyecto de Windows.

Los requisitos de desarrollo de cada plataforma se describen con más detalle en la guía Requisitos.

iOS

El desarrollo de aplicaciones iOS requiere un equipo Mac que ejecute macOS. También puede usar Visual Studio para escribir e implementar aplicaciones iOS con Xamarin en Visual Studio. Sin embargo, todavía se necesita un equipo Mac con fines de compilación y licencias.

El IDE de Xcode de Apple debe estar instalado para proporcionar el compilador y el simulador para las pruebas. Puedes probar en tus propios dispositivos de forma gratuita, pero para compilar aplicaciones para la distribución (por ejemplo, la App Store) debes unirte al Programa para desarrolladores de Apple (99 USD al año). Cada vez que envíes o actualices una aplicación, Apple debe revisarla y aprobarla antes de que esté disponible para que los clientes la descarguen.

El código se escribe con el IDE de Visual Studio y los diseños de pantalla se pueden compilar mediante programación o editar con Xcode en un equipo Mac.

Consulte la Guía de instalación de Xamarin.iOS para obtener instrucciones detalladas sobre cómo configurar.

Android

El desarrollo de aplicaciones Android requiere que se instalen los SDK de Java y Android. Los SDK proporcionan el compilador, el emulador y otras herramientas necesarias para compilar, implementar y probar. Java, Android SDK de Google y las herramientas de Xamarin se pueden instalar y ejecutar en Windows y macOS. Se recomiendan las siguientes configuraciones:

  • Windows 10 con Visual Studio 2019
  • macOS Mojave (10.11+) con Visual Studio 2019 para Mac

Xamarin proporciona un instalador unificado que configurará el sistema con las herramientas de Java, Android y Xamarin necesarias para requisitos previos (incluido un diseñador visual para diseños de pantalla). Consulte la Guía de instalación de Xamarin.Android para obtener instrucciones detalladas.

Puede compilar y probar aplicaciones en un dispositivo real sin ninguna licencia de Google, sin embargo, para distribuir la aplicación a través de una tienda (como Google Play, Amazon o Barnes & Noble) se puede pagar una tarifa de registro al operador. Google Play publicará la aplicación de forma instantánea, mientras que las otras tiendas tienen un proceso de aprobación similar al de Apple.

Windows

Las aplicaciones de Windows (WinForms, WPF o UWP) se compilan con Visual Studio. No usan Xamarin directamente. Sin embargo, el código de C# se puede compartir entre Windows, iOS y Android. Visite la Centro de desarrollo de Microsoft para obtener información sobre las herramientas necesarias para el desarrollo de Windows.

Crear la interfaz de usuario (UI)

Una ventaja clave de usar Xamarin es que la interfaz de usuario de la aplicación usa controles nativos en cada plataforma, creando aplicaciones que no se pueden distinguir de una aplicación escrita en Objective-C o Java (para iOS y Android respectivamente).

Al compilar pantallas en la aplicación, puede diseñar los controles en el código o crear pantallas completas con las herramientas de diseño disponibles para cada plataforma.

Crear controles mediante programación

Cada plataforma permite agregar controles de interfaz de usuario a una pantalla mediante código. Esto puede llevar mucho tiempo, ya que puede ser difícil visualizar el diseño terminado cuando las coordenadas de píxeles de codificación rígida para las posiciones y tamaños de control.

Sin embargo, la creación de controles mediante programación tiene ventajas, especialmente en iOS para crear vistas que cambien el tamaño o se represente de forma diferente en los tamaños de pantalla de iPhone e iPad.

Diseñador visual

Cada plataforma tiene un método diferente para diseñar visualmente pantallas:

  • iOS: los guiones gráficos contienen varias vistas y controles, y se puede acceder a ellos en el archivo .Storyboard que se incluye en el proyecto.
  • Android: Xamarin proporciona un diseñador de interfaz de usuario de arrastrar y colocar Android para Visual Studio.
  • Windows: Microsoft proporciona un diseñador de interfaz de usuario de arrastrar y colocar en Visual Studio y Blend. Los diseños de pantalla se almacenan como archivos .XAML.

Estas capturas de pantalla muestran los diseñadores de pantalla visual disponibles en cada plataforma:

These screenshots show the visual screen designers available on each platform

En todos los casos, se puede hacer referencia a los elementos que se crean visualmente en el código.

Consideraciones sobre la interfaz de usuario

Una ventaja clave de usar Xamarin para crear aplicaciones multiplataforma es que pueden aprovechar los kits de herramientas de interfaz de usuario nativos para presentar una interfaz familiar al usuario. La interfaz de usuario también funcionará tan rápido como cualquier otra aplicación nativa.

Algunas metáforas de la interfaz de usuario funcionan en varias plataformas (por ejemplo, las tres plataformas usan un control de lista de desplazamiento similar), pero para que la aplicación "se sienta" correctamente, la interfaz de usuario debe aprovechar los elementos de interfaz de usuario específicos de la plataforma cuando corresponda. Entre los ejemplos de metáforas de interfaz de usuario específicas de la plataforma se incluyen:

  • iOS: navegación jerárquica con el botón atrás suavizado, pestañas en la parte inferior de la pantalla.
  • Android: botón atrás hardware/software del sistema, menú de acción, pestañas en la parte superior de la pantalla.
  • Windows: las aplicaciones de Windows se pueden ejecutar en equipos de escritorio, tabletas (como Microsoft Surface) y teléfonos. Los dispositivos Windows 10 pueden tener el botón Atrás de hardware y los iconos dinámicos, por ejemplo.

Se recomienda leer las directrices de diseño pertinentes para las plataformas a las que se dirige:

Biblioteca y reutilización de código

La plataforma Xamarin permite reutilizar el código de C# existente en todas las plataformas y la integración de bibliotecas escritas de forma nativa para cada plataforma.

Origen y bibliotecas de C#

Dado que los productos de Xamarin usan C# y .NET Framework, se pueden reutilizar muchos códigos fuente existentes (tanto código abierto como proyectos internos) en proyectos de Xamarin.iOS o Xamarin.Android. A menudo, el origen simplemente se puede agregar a una solución de Xamarin y funcionará inmediatamente. Si se ha usado una característica de .NET Framework no compatible, es posible que se requieran algunos ajustes.

Algunos ejemplos de origen de C# que se pueden usar en Xamarin.iOS o Xamarin.Android incluyen: SQLite-NET, NewtonSoft.JSON y SharpZipLib.

Objective-C Enlaces + Proyectos de enlace

Xamarin proporciona una herramienta denominada btouch que ayuda a crear enlaces que permiten usar bibliotecas Objective-C en proyectos de Xamarin.iOS. Consulte la documentaciónTipos de Objective-C enlaces para más detalles sobre cómo se hace esto.

Entre los ejemplos de bibliotecas Objective-C que se pueden usar en Xamarin.iOS se incluyen: Análisis de códigos de barras RedLaser, Google Analytics e integración de PayPal. Los enlaces de Xamarin.iOS de código abierto están disponibles en GitHub.

Enlaces .jar y proyectos de enlace

Xamarin admite el uso de bibliotecas de Java existentes en Xamarin.Android. Consulte la documentación enlace de una biblioteca de Java para obtener más información sobre cómo usar el archivo .JAR de Xamarin.Android.

Los enlaces de Xamarin.iOS de código abierto están disponibles en GitHub.

C a través de PInvoke

La tecnología "Invocación de plataforma" (P/Invoke) permite que el código administrado (C#) llame a métodos en bibliotecas nativas, así como compatibilidad con bibliotecas nativas para volver a llamar al código administrado.

Por ejemplo, la biblioteca SQLite-NET usa instrucciones como esta:

[DllImport("sqlite3", EntryPoint = "sqlite3_open", CallingConvention=CallingConvention.Cdecl)]
public static extern Result Open (string filename, out IntPtr db);

Esto se enlaza a la implementación nativa de SQLite del lenguaje C en iOS y Android. Los desarrolladores familiarizados con una API de C existente pueden construir un conjunto de clases de C# para asignarlos a la API nativa y usar el código de la plataforma existente. Hay documentación para vincular bibliotecas nativas en Xamarin.iOS, se aplican principios similares a Xamarin.Android.

C++ a través de CppSharp

Miguel explica CXXI (ahora llamado CppSharp) en su blog. Una alternativa al enlace a una biblioteca de C++ directamente es crear un contenedor de C y enlazarlo a ella a través de P/Invoke.