Xamarin, desarrollo mobile multiplataforma en C#

Buenas!

Hace un tiempo he comenzado el desafío de desarrollar aplicaciones móviles usando Xamarin. Para los que no lo conocen, Xamarin es una plataforma que nos permite desarrollar en C# aplicaciones para Android, iOS, Windows Phone y aplicaciones universales de Windows, siendo las mismas nativas para cada una de estas plataformas.

A diferencia de otras alternativas, la clave que nos ofrece Xamarin es el poder generar aplicaciones nativas para cada una de las plataformas móviles mencionadas anteriormente. Pero a su vez nos permite diseñar y realizar parte de nuestros desarrollos genéricos, permitiendo que la lógica Core de nuestra aplicación pueda ser compartida entre las distintas plataformas, en vez de tener que desarrollar y resolver las mismas problemáticas en diferentes lenguajes.

¿Y esto cómo lo logra? La siguiente imagen es una explicación simple y clara del planteamiento que propone:

mobile application development platform

Veamos en detalle cada uno de los puntos que se plantean:

Leer más »

Anuncios

Shared Project: un tipo de proyecto para compartir código y recursos

Con la aparición de Visual Studio 2015 Preview hace ya un tiempo que tenemos disponible un nuevo tipo de proyecto, el cual puede sernos muy útil: Shared Project.

Como su nombre nos insinúa, los Shared Projects tienen como objetivo el compartir contenido entre otros proyectos y aplicaciones. Si nos ponemos a pensar, esto es algo que normalmente podríamos hacer con una biblioteca de clases, la cual tiene la lógica que querramos tanto encapsular como compartir entre otros proyectos. Y esta biblioteca de clases generará su propio Assembly.

Sin embargo el enfoque de un Shared Project es totalmente distinto. En el mismo solamente tendremos aquellos recursos que querramos compartir entre otros proyectos, más bien como un repositorio de contenidos. Luego dichos recursos estarán compilados o asociados directamente a aquellos proyectos donde haya referencias al Shared Project en cuestión. Esto es algo totalmente distinto a lo que normalmente hacemos, en el que nuestro código es compilado en el proyecto donde pertenece, lo cual es particularmente útil (y en varios casos necesario) cuando tenemos en una misma solución proyectos de aplicaciones para diferentes plataformas. Además vale la aclaración de que no necesariamente debe haber código C#, también podemos tener archivos JavaScript, Xaml e imágenes, entre otros.

En este post vamos a trabajar con una aplicación Android en Xamarin y una de consola (esto solo a fin de tener dos aplicaciones target diferentes). A su vez vamos a tener un requerimiento particular: tener clases parciales en nuestro proyecto compartido, las cuales luego las aplicaciones target deberán completar. Si usaríamos una librería de clases esto no sería posible, ya que los distintos componentes de una clase parcial deben contenerse y compilarse en un mismo Assembly.

Leer más »

Internacionalización: soporte a formato de escritura Right-to-Left en ASP.NET MVC

Uno de los temas pendientes en esta serie de post’s de internacionalización que estamos viendo es el soporte a culturas con sentido de escritura de derecha a izquierda en ASP.NET MVC (Right-to-Left o su acrónimo RTL, el cual usaremos de aquí en adelante). Esto será necesario cuando nuestra aplicación deba dar soporte a culturas que utilizan dicho formato de escritura, como por ejemplo sucede con el árabe.

Siguiendo con el ejemplo que venimos utilizando en el post anterior lo primero que haremos será dar soporte al árabe como cultura de nuestra aplicación. Para ello inicialmente crearemos el archivo de recursos asociado a la cultura árabe, el cual utiliza la sigla “ar” y agregaremos el contenido de cada recurso en su idioma:

InternacionalizacionRTL - CrearRecursos

NOTA: Todo el contenido que usemos en este post escrito en árabe está traducido con Google Translate ya que no conozco dicho idioma. Si alguien conoce del idioma y considera que la traducción no es la apropiada se agradece el comentario.

Lo siguiente será agregar tanto el link que permite el acceso a dicha cultura, el valor dentro de las constantes de las culturas soportadas y la lógica mínima para reconocer y establecer dicha cultura con nuestro esquema de rutas donde se visualiza la cultura.

Leer más »

URL’s internacionalizadas en ASP.NET MVC

Hace algunos meses en una entrada asociada a Internacionalización vimos cómo cambiar la cultura manualmente en ASP.NET MVC. En el mismo continuamos con mejoras sobre la internacionalización de nuestra aplicación para que más allá de reconocer de forma automática la cultura del navegador del usuario le demos la posibilidad de que pueda cambiarlo.

Algo que venía quedando pendiente de los post’s anteriores sobre este tema es el poder reflejar en la URL la cultura en la que se está visualizando el contenido. Esto tiene varios propósitos:

  • SEO: Como podemos ver en la documentación de Google asociada a la internacionalización, se recomienda hacer visible la cultura de la página que se está visitando. Esto da una mejora en lo que a indexación por parte del motor de búsqueda se refiere.
  • Usabilidad: Además del propósito del punto anterior, le permitir al usuario que utiliza nuestra aplicación el poder ver la cultura correspondiente al contenido que está visualizando. Esto también aplicaría a la hora de compartir ese contenido con otros usuarios.
  • Diseño: Podemos decir que es mucho más natural en el diseño y estructura del contenido de nuestra aplicación que el acceso según cada cultura se vea reflejado en diferentes URL’s.

Para esto continuaremos con lo ya visto en el post mencionado y en toda esta serie de internacionalización, modificando y ajustando algunos aspectos.

Lo primero sobre lo que debemos trabajar es en que la cultura sea visible en la URL de nuestra aplicación, trabajando para ello en las rutas configuradas. En ASP.NET MVC esto se encuentra en el archivo App_Start/RouteConfig.cs, teniendo la ruta por defecto el esquema {controller}/{action}/{id}. Como no queremos cambiar el comportamiento de ese esquema de rutas debemos modificarlo para agregar la cultura pero sin modificar el comportamiento base con las implicancias que conlleva.

Leer más »

Eventos de conexión en SignalR

Avanzando con la serie asociada a SignalR hay un punto que nos puede ser muy útil a la hora de diseñar la interacción de nuestra aplicación: los eventos de conexión.

Explicándolo de forma muy simplificada, hay tres cosas que pueden suceder en el ciclo de vida de la conexión entre el servidor y cliente:

  • Inicio de la conexión
  • Finalización de la conexión
  • Reconexión

Los dos primeros sucederán en todos los casos, ya que siempre se creará y finalizará una conexión. En cambio la reconexión solamente se dará en aquellos casos donde haya una interrupción momentánea en la conexión entre las partes.

Lo que nos ofrece SignalR es el poder agregar lógica ante el suceso de estos eventos, pudiendo personalizar alguna situación o agregar comportamiento adicional, tanto del lado del servidor como del cliente.

Comenzando por el lado del servidor, la clase Hub – de la cual heredan nuestras propias implementaciones – tiene los métodos necesarios para la gestión de la conexión y desconexión de cada uno de los clientes del mismo. Esto lo hace a través de métodos virtuales, lo que hace que en nuestra implementación podamos realizar un override de los mismos, agregando la lógica de negocio propia además de invocar a la implementación base.

La siguiente porción de código es la definición de la clase Hub provista en las librerías de SignalR, donde podemos observar los tres métodos virtuales que nos servirán para este propósito:

Desde el lado del cliente los métodos estarán disponibles en el código JavaScript generado por SignalR. Veremos dichos métodos en detalle en cada evento en cuestión, junto con la explicación de cada uno:

Leer más »

Params: pasando cantidad indefinida de parámetros en C#

La idea de este post es revisar un concepto general que C# nos ofrece como utilidad: el uso de params en la definición de funciones que tienen un array en sus parámetros. Primero vayamos con un ejemplo interesante que usamos muchas veces, y que tal vez nunca le hayamos prestado mucha atención en su uso: string.Format

Para el que no la conozca, esta función nos permite armar un string combinando texto fijo y dinámico de forma muy práctica, evitando la concatenación. En el primer parámetro pasaremos la estructura del string que queremos lograr, y luego como parámetros todos los valores dinámicos que se irán insertando en la ubicación deseada:

Params - InfoStringFormat
Firma del método string.Format, la cual define en uno de sus parámetros la palabra clave params.

Pero la característica de uso que nos importa en este post es que pasamos una cantidad indefinida de parámetros separados por coma, lo cual normalmente no es posible. Esto se debe al uso de params.

Params - UsoStringFormat
Ejemplo de uso de string.Format con una cantidad variable de parámetros.

Leer más »

VS Code, C# y Ubuntu: Debug de aplicación de consola

Si hay algo que me gusta como desarrollador y geek es contar con más de un sistema operativo instalado, contando generalmente con Windows y Ubuntu (o uno de sus derivados). Y con la nueva línea de trabajo que Microsoft está llevando adelante asociada a Open Source se nos abren muchas más alternativas para poder desarrollar en la plataforma que más nos guste, cosa que antes no era posible.

Y ante esto como usuario de este nuevo enfoque quería escribir sobre un punto muy interesante que tenemos disponible: realizar debug de una aplicación de consola realizada en C# en Ubuntu con VS Code (y en Linux en general).

Lo único que debemos tener instalado como dependencias es el paquete asociado a mono, el cual podremos instalar siguiendo lo comentado en el post Configurando Autocomplete/OmniSharp en Ubuntu.

Lo primero que deberemos hacer es crear la aplicación en cuestión. Para ello ejecutaremos en la terminal el comando yo aspnet en la carpeta donde queramos crear nuestro proyecto y elegimos la opción “Console Application” (para ver la instalación de Yeoman les recomiendo la lectura del post ASP.NET Core en Linux):

VSCodeDebugUbuntu - CrearApp

Leer más »