[Xamarin] ¿Primera vez publicando con Visual Studio y iOS 11.2?

Si es tu primera vez publicando una aplicación iOS 11.2 usando Visual Studio para Windows, hay algunas cosas que quiero compartirte.

1. Assets Catalog

Usa un Asset Catalog para los logos de tu aplicación en vez de la carpeta Resources. Si hay logos en la carpeta Resources, recomiendo eliminarlos juntos con las referencias que existan en el archivo Info.plist porque ya no son necesarios. Con ayuda de tu explorador de archivos asegurate que el Asset Catalog con el cual estas trabajando se ubique dentro de la carpeta Resources, si es necesario modificar el .csproj y reiniciar Visual Studio, tendrás que hacerlo. Si no sabes como generar el Asset Catalog puedes ayudarte del iOS Manifest Editor, dando click derecho sobre el Info.plist, seleccionando Abrir Con… y ubicándote en la sección Visual Assets.

2. Provisioning Profiles

Conseguir un perfil de aprovisionamiento dependerá de la vigencia de tu cuenta en el portal de desarrollo de apple y es algo que no cubriré en este momento. Mayor información sobre el perfil de aprovisionamiento lo pueden conseguir acá: https://docs.microsoft.com/en-us/xamarin/mac/deploy-test/publishing-to-the-app-store/profiles

Lo que quiero resaltar acá es que luego de configurar los perfiles de aprovisionamiento adecuados tenemos que refrescarlos en el ambiente de desarrollo de la siguiente forma: XCode > Preferences > Accounts.

3. IPA

Con respecto al IPA solo recordermos que tenemos que seleccionar el perfil de aprovisionamiento adecuado, si es que vamos a desplegar a un iPhone usaríamos un perfil de Desarrollo, pero si vamos a publicarlo en la tienda ya sea para producción o test, tendremos que seleccionar un perfil de Distribución. Luego de eso, seleccionamos la opción Ad Hoc para el build apuntando a un iPhone.

Una vez que damos Build tenemos que permitir el uso de la firma registrada a nuestra instancia de la MAC para compilar correctamente.

Luego buscamos el archivo .ipa en bin > Ad Hoc y lo subimos al AppStore usando el Application Loader. Cuando termine de subir tenemos que esperar el correo de confirmación de Apple para saber si el build es una compilación válida.

4. TestFlight

Ahora ingresemos a itunesconnect.apple.com/, creamos nuestra aplicación indicando algunos datos y concentrémonos en TestFlight. Apple no permite subir aplicación de prueba a la tienda, así que si quieres probar alguna aplicación, tendrás que usar TestFlight.

Del lado izquierdo creamos nuestros grupos de usuarios de pruebas y del lado derecho podemos relacionarlos con algún build en específico que hayamos subido.

Es una interfaz muy intuitiva, mientras vamos agregando usuarios, ellos van recibiendo un correo para poder probar nuestra aplicación y todos felices.

[Xamarin] ¿Cómo usar Segoe MDL2 Assets en Xamarin.Android?

En esta ocasión quiero compartir como hago para poder usar las fuentes Segoe MDL2 en un proyecto Xamarin.Android.

segmdl2.ttf

Agregamos la fuente y establecemos su Build Action como AndroidAsset.

Typefaces.cs

Creamos la clase que nos permita construir la Typeface en base a la fuente que acabamos de agregar.

IconTextView.cs

Y ahora extendemos TextView para personalizarlo con el uso de la Typeface que acabamos de obtener.

Layout.axml

Una vez hecho esto ya esta todo listo para usar nuestro IconTextView.

[Xamarin] ¿Alguien dijo [INSTALL_FAILED_UPDATE_INCOMPATIBLE] en Xamarin.Android?

No sé a cuantos ni cuantas veces les habrá pasado, pero a mi ya se me esta haciendo algo recurrente el famoso [INSTALL_FAILED_UPDATE_INCOMPATIBLE] que, hasta lo que he experimentado, puede saltar cuando menos te lo esperas en pleno proceso de build y debug sin aparente explicación.

Me imagino que se puede dar por muchas razones, pero las veces que me ha ocurrido ha sido por una mala desinstalación de un build anterior, desinstalación de la cual se encarga el Visual Studio. En fin, esto siempre lo he resuelto de la misma manera y todo empieza en Ajustes.

Una vez ahí, solo tienes que ubicarte en Aplicaciones, encontrar la app que estas desarrollando y eliminarla sin piedad :)!.

Hecho esto, ya puedes continuar presionando F5 y ser feliz.

[Xamarin] ¿Cómo saber si tengo conexión en Xamarin.Android?

Es importante conocer el estado de conexión de nuestra aplicación para no hacer consultas que pueden resultar en fallas, así como para tener la oportunidad de mostrar al usuario el mensaje adecuado para que no crea que hay una falla en la aplicación cuando el verdadero problema es uno de conectividad.

En caso de Xamarin.Android, lo primero que debemos hacer es agregar los permisos adecuados al AndroidManifest.xml.

Seguido de ello podemos hacer lo siguiente para validar si tenemos algun tipo de conexión:

O lo siguiente para saber si tenemos conexión con algún host en específico.

Si son instrucciones recurrentes en nuestra aplicación, deberíamos encapsularlas y ponerlas en una clase llamada ConnectivityService.cs por ejemplo.


Para mayor info acerca de ConnectivityManager, véase la documentación oficial: https://developer.xamarin.com/api/type/Android.Net.ConnectivityManager/

[Xamarin] BusyIndicator personalizado para Xamarin.Forms

BusyIndicator.xaml

Empezamos creando un ContentView que contenga un Frame con un ActivityIndicator. En caso queramos agregar un texto podriamos poner un StackLayout que contenga el ActivityIndicator y un Label. Ya queda a tu imaginación o a los requerimientos para mejorar esta vista básica.

BusyIndicator.xaml.cs

Creamos un BindableProperty para dar soporte a DataBinding. Aunque en el ejemplo que viene no lo uso, sería ideal establecerlo de esta forma por si en algún momento definimos algún ViewModel o su DataContext.

SplashPage.xaml

Hacemos referencia al namespace donde se encuentra nuestro BusyIndicator.

SplashPage.xaml.cs

Y ya esta listo para usar. No olviden que también se puede definir el valor de la propiedad IsBusy desde el XAML.

[Xamarin] Fuentes personalizadas en aplicaciones Xamarin.Forms

Para el presente post usaré 2 fuentes (Magistral.otf y RadicalBeat.ttf) y quiero hacer recordar que para conocer el nombre de una fuente hay que darle doble click al archivo .otf o .ttf.

PCL

Creamos un control personalizado extendiendo la clase Label para disponer de una propiedad FontName.

Definimos una interfaz gráfica sin olvidarnos de importar el namespace de nuestro control personalizado.

iOS

Establecemos el Build Action de las fuentes en BundleResource y el Copy to Output Directory en Copy always.

Luego modificamos el Info.plist para indicar en donde se encuentran nuestras fuentes.

Creamos una clase que extienda de LabelRenderer.

Y listo.

Android

Establecemos el Build Action de las fuentes en AndroidAsset.

Creamos una clase que extienda de LabelRenderer.

Y listo.

Los gists usados para este post puedes ubicarlos aqu&iacute: https://gist.github.com/MAlexanderSalazar/62bdf1ac153078817b26

[Xamarin] Implementando un simple ListViewAdapter

Cuando empecé a trabajar con listas en Android, en casi todos los ejemplos vi que se creaban clases que extendían de BaseAdapter y que estas se creaban para cada Adapter (cuando solo cambiaba la clase y no la plantilla de datos o incluso cuando solo se usaba una sola vez). Así que ante esta particular situación sumado el hecho de los pocos ejemplos de filtrado que encontraba eran con ArrayAdapter y sin usar plantillas personalizadas decidí hacer este post.

Empecemos

Entity.cs

User.cs

UserDataTemplate.axml

ListViewAdapter.cs

Main.axml

MainActivity.cs -> GetUsers()

Caso 1. Queremos listar usando una única plantilla de datos y sin filtrar

MainActivity.cs

Caso 2. Queremos listar usando una única plantilla de datos y filtrar

MainActivity.cs

Caso 3. Queremos listar usando diferentes plantillas de datos c/s filtrar

OldUserDataTemplate.axml 

MainActivity.cs

[Xamarin] ¿Cómo usar recursos de colores Drawing en Xamarin.Android?

En esta publicación mostraré como usar un recurso de color del tipo Drawing de dos formas distintas. La primera forma responde a como usarlo desde otro XML y la segunda a como usarlo desde Código.

themes.xml

Para este ejemplo empezemos definiendo nuestro recurso en un nuevo archivo: ResourcesvaluesThemes.xml.

main.axml

En otro XML hacemos referencia a los recursos que definimos en Themes.xml con ayuda de @drawable. Si tienen algun error asegurence que Themes.xml tenga como Build action AndroidResource. Adicionalmente hay otros 2 TextView los cuales actualizaremos desde el código.

MainActivity.cs

Por último para usarlos desde código solo tenemos que hacer lo siguiente, aparte de agregar el using Android.Graphics.Drawables;