domingo, 25 de diciembre de 2016

Error inflating class android.support.v7.widget.Toolbar (Xamarin.Forms 2.3.3.175)

El día de hoy (25/12/2016) actualice a la última versión de Xamarin (4.2.2.6) disponible en el canal estable en Visual Studio. Después de esto al crear un proyecto de Xamarin.Forms (2.3.3.175) al querer ejecutar en Android obtuve el siguiente error cuando la app inicio.

Android.Views.InflateException: Binary XML file line #1: Error inflating class android.support.v7.widget.Toolbar


La forma resumida es:
  • Reinstalar la última versión de Xamarin.Forms para que se instalen las dependencias faltantes
  • Limpiar el proyecto
  • Reconstruir el proyecto

Si quieren ver paso a paso y revisar los paquetes que deben estar instalados a continuación pongo paso a paso cómo hacer la corrección.

martes, 22 de noviembre de 2016

¿Cómo ser un Xamarin MVP?

En este post voy a hablar un poco sobre algo que me han preguntado en varias ocasiones, ¿cómo es que uno se vuelve Xamarin MVP?

Lo primero que siempre aclaro es que yo entre al proceso antes de que Xamarin dejara de ser un producto costoso (1000 USD al año por plataforma) y por lo tanto había mucho menos interés del que hay actualmente sobre todo lo relacionado a la plataforma Xamarin (incluido ser MVP). Por lo cual es probable que el esfuerzo requerido para convertirse en MVP, o en mi caso para mantener el reconocimiento, sea mayor al que se necesitaba cuando yo aplique. Por esta razón no describiré muy a detalle cada actividad que realice.

El MVP es un reconocimiento para las personas que hacen actividades que ayuden a la comunidad de desarrolladores Xamarin.

El sitio oficial (https://www.xamarin.com/mvp ) menciona que se toma en cuenta lo siguiente:

-       Escribir artículos, libros y blog posts.
-       Hablar en público o de manera online.
-       Ayudar a los desarrolladores en el foro oficial, twitter, Stack Overflow y/u otras comunidades.
-       Crear apps excepcionales.

viernes, 11 de noviembre de 2016

Webinar. Mapas en Xamarin.Forms

Hola,

La cuarta semana del diplomado trata sobre Xamarin.Forms, para complementar los temas del diplomado daremos un webinar sobre el tema de mapas en apps con Xamarin.Forms

Actualización (17/02/2017) Se agrega el vídeo


martes, 18 de octubre de 2016

¿Qué debo saber antes de iniciar el diplomado o comenzar con Xamarin?

Me comentaba mi amigo Jose Saturnino (Visiten su blog sobre C# y un poco de Xamarin )  que una de las preguntas frecuentes de la gente que se registra o se quiere registrar al diplomado es sobre qué nivel de C# o que conceptos deberían conocer a manera de que puedan aprovechar mejor el diplomado de Xamarin.

Desde mi punto de vista algunos de los conceptos importantes son los siguientes (no están ordenados con base en algún criterio):

Enumeraciones
Constructores
Interfaces
Herencia
Eventos (aprendan también a crearlos y no solo como suscribirse y cancelar la suscripción)
Delegados este otro enlace también es muy bueno
Linq
Expresiones Lambda  (Aquí otro post explicado de una manera mas simple)
Directivas de compilación (comenzando por #if) 
Conversiones de datos (sobre todo entender cómo funcionan Byte[], Stream, MemoryStream)
Inyección de dependencias
Manejo de excepciones
Genéricos
Async y Await


Probablemente no todos esos conceptos se toquen directamente en el diplomado, sin embargo, a lo largo de mi experiencia con Xamarin, todos me han facilitado mucho las cosas.

¡Algunos recursos!


Hace tiempo vi esta pequeña serie de vídeos subidos por José Luis Estrada. Estos videos justo servían para preparar a la gente antes de un curso de Xamarin.


 Si quieren aprender un nivel aún más básico, este curso de Miguel Muñoz Serafín los puede ayudar.


Los temas son solo una recomendación, no es obligatorio conocerlos todos para poder sacar provecho del diplomado. Así que si no conocen alguno o tienen alguna duda sin problema pueden contactarme antes, durante o después del diplomado y buscamos la manera de resolver esas dudas.

Si aún no te has registrado a este diplomado gratuito aún puedes hacerlo en este sitio




lunes, 12 de septiembre de 2016

Meetup Xamarin + UX + DevOps CDMX

El próximo 24 de Septiembre en las instalaciones del Tecnológico Gustavo A. Madero se realizará otra de las reuniones sobre la plataforma donde además del desarrollo con Xamarin hablaremos de UX y DevOps que son temas muy importantes para mejorar nuestros desarrollos.



La agenda es la siguiente:

• Mobile DevOps por Cristian González, el hace apps por comida y sabe Xamarin

• Charla por definir por Alejandro Martínez, Technical Evangelist en Microsoft México

• Charla sobre UX por definir  por Fabián Miranda

Al final habrá un tiempo para convivir.


lunes, 5 de septiembre de 2016

Error Page Not Found en Team Foundation Server

Después de instalar la última versión de Xamarin, al abrir uno de mis proyectos, el cual tengo en Visual Studio Team Services, obtuve el siguiente error "Team Foundation Error"  Page "GUID" not found" :


Este error no me permitía conectarme a Team Services ni abrir el Source Control explorer, investigando vi que la solución es, ejecutar el siguiente comando en la consola con privilegios de administrador:

"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe" /setup

Según la versión de Visual Studio que este fallando hay que escribir el numero correcto en el comando.

Visual Studio 2005 = 8
Visual Studio 2008 = 9.0
Visual Studio 2010 = 10.0
Visual Studio 2012 = 11.0
Visual Studio 2013 = 12.0
Visual Studio 2015 = 14.0

El comando permite recrear algunos settings de Visual Studio entre los cuales se encuentra el que esta dañado, este comando es el que se ejecuta al finalizar la instalación de Visual Studio.

Para mas información pueden revisar este enlace 

Después de ejecutar este comando ya funciono mi acceso a Team Services.

miércoles, 17 de agosto de 2016

Errores "Unzipping failed" al compilar un proyecto Xamarin.Android

Uno de los errores más comunes que ocurren para quien inicia con Xamarin.Android es durante la primera compilación del proyecto. 

Cuando nosotros compilamos por primera vez se descargan de algunas librerías propias de Android, estas librerías se descargan en .zip y luego son descomprimidas durante el proceso de compilación. Estas librerías se almacenan en "%LOCALAPPDATA%\Xamarin\zips"

En este aspecto Visual Studio no es muy explícito acerca de lo que está haciendo mientras compila y dependiendo de nuestra conexión este proceso puede ser muy tardado, en muchas ocasiones esta lentitud causa que cancelemos el proceso pensando en que Visual Studio ya no está haciendo nada, sin embargo, lo que logramos es que las descargas queden a medias y esos archivos se mantienen dañados en la ruta que mencione hace poco.

En la siguiente compilación obtendremos errores como estos:
Error      2             Unzipping failed. Please download https://dl-ssl.google.com/android/repository/android_m2repository_r22.zip and extract it to the C:\Users\User\AppData\Local\Xamarin\Xamarin.Android.Support.Design\23.0.1.3\content directory.                DemoForms.Droid

Error      3             Reason: C:\Users\User\AppData\Local\Xamarin\zips\96659D653BDE0FAEDB818170891F2BB0.zip is not a valid zip file            DemoForms.Droid

Error      4             Please install package: 'Xamarin.Android.Support.Design' available in SDK installer. Java library file C:\Users\User\AppData\Local\Xamarin\Xamarin.Android.Support.Design\23.0.1.3\embedded\classes.jar doesn't exist.     DemoForms.Droid

Para solucionarlo hay que eliminar de manera manual los archivos dañados y recompilar la solución ahora si esperando a que se descargue todo.

Yo cree un archivo bat que ayuda a automatizar un poco esta tarea, el código es el siguiente.

cd %LOCALAPPDATA%\Xamarin\zips\
del /P *.zip


A este código le estoy indicando que solicite confirmación antes de eliminar.


lunes, 15 de agosto de 2016

MVVM con Xamarin Forms

Hola,

Hace uno días comencé con el primero de una serie de webinar sobre desarrollo con Xamarin, este fue sobre los principios de MVVM con Xamarin.Forms.

Aquí les dejo la grabación del webinar.




Ya esta la parte 2 publicada hablamos sobre behaviors, el view model y navegación entre paginas.

jueves, 28 de abril de 2016

Lo bueno, lo malo y lo feo de Xamarin (Mi experiencia con Xamarin)

Decidí escribir este post para hablar un poco como me ha ido estos últimos años trabajando con Xamarin y compartir algunos aspectos que pueden ser de ayuda cuando hay que decidir entre usar esta plataforma o crear apps nativas.

Los últimos tres años he trabajado con Xamarin (Xamarin.Android y Xamarin.iOS no he usado Xamarin.Forms en proyectos "reales") creando todo tipo de apps y en distintos escenarios, he creado apps para las plataformas móviles, otra que solo son Android y Desktop, una mas que además de los móviles comparte código con una pagina web, apps que se ejecutan en tabletas Android con hardware a la medida, he integrado dispositivos de hardware de terceros, entre otras cosas.

A lo largo de esos desarrollo me he encontrado con muchos retos, retos técnicos relacionados directamente al código que estoy creando y otros relacionados a los factores que son importantes durante el desarrollo, por ejemplos los entornos de desarrollo, la documentación, la calidad del soporte técnico de Xamarin, etc.

Básicamente en ese contexto ha sido mi trabajo y partiendo de eso voy a escribir sobre las cosas que mas me han gustado y las que no me han gustado sobre esta plataforma, por supuesto hay mas cosas que puedo no estar mencionando.



Lo bueno


1 – Uso de código .NET

La causa por la que se decidió usar Xamarin en la empresa en la que trabajo fue porque ya se tenía una lógica de negocios en C# (mas de 50 clases), la cual llevaba muchos años funcionando en ambientes “tradicionales” (desktop y servidor). Para usar esta lógica en Xamarin.Android y Xamarin.iOS fue tan simple como compartir el proyecto Core con estas plataformas usando un plugin para Visual Studio (Project Linker, *ya VS permite hacerlo sin plugins), en el caso de WP hubo que modificar algunas clases por unas mas modernas para el manejo de XML, lo mejor es que esta actualización de clases funcionaba en las demás plataformas, de este modo no hubo que mantener varias versiones del Core.


2 – El soporte técnico

Otra de las ventajas es el soporte técnico, en general cuando he preguntado algo al mail de soporte obtengo respuesta al siguiente día hábil y siempre me ha respondido gente con toda la disponibilidad de resolver el resolver el problema.


3 – La documentación

La documentación es muy completa, prácticamente todo lo necesario para comenzar se encuentra en su sitio web para desarrolladores, también los errores mas comunes ya tienen respuesta en su foro o en sitios como stackoverflow. Si eso no funcionaba había mucha documentación buscando como MonoDroid y MonoTouch (antecesores de Xamarin.Android y Xamarin.iOS) aunque hace mucho tiempo que no he tenido que recurrir a eso.


4 – Uso de código Java y Objective C

Algo que me ha parecido muy bueno es la capacidad de poder utilizar librerías nativas en los proyectos Xamarin, por ejemplo si por cuestiones de tiempo o falta de experiencia es necesario el apoyo de alguien que solo conoce de Android con Java u iOS con Objective C, para mi ha sido muy sencillo que esta persona de apoyo encapsule todo en una librería nativa y yo consumirla desde Xamarin. 


5 – Curva de aprendizaje para iOS

De las cosas que mas me han gustado de iOS es que no es necesario conocer Objective C para poder crear apps si solo usaremos código C# sin usar alguna librería creada en Objective C podemos manejar métodos, el ciclo de vida, objetos, etc. como en cualquier programa .Net con C#, por ejemplo no es necesario crear outlets y actions de manera manual cuando se trabaja con interfaces gráficas, Xamarin hace esto transparente para nosotros.


6 - ALM

Finalmente algo que me ha funcionado perfectamente bien es la integración con Visual Studio Team Services para el control de código fuente, nunca he tenido problemas con los diferentes archivos que se usan para el trabajo con las apps Xamarin.Android o Xamarin.iOS. Hace poco comencé a probar HockeyApp en una de mis apps y ha funcionado de maravilla.


Lo malo y lo feo


1 – Actualizaciones

Creo que una de las cosas que deben mejorar es el tema de las actualizaciones, en ocasiones cuando he actualizado cualquier cosa del entorno (principalmente la Mac) todo deja de funcionar, por ejemplo una vez salió una versión nueva de Xamarin Studio en el canal “estable” de actualizaciones y dejo de funcionar todo mi proyecto de iOS, tuve que regresar a la versión anterior (un proceso muy tedioso) y esperar a una versión mas actual para poder actualizar. Contactando al soporte me pedían usar una versión Beta, lo cual para una app empresarial conlleva ciertos riesgos.  Creo que si el instalador de actualizaciones y/o el IDE verificaran las versiones compatibles de ambiente (Sistema Operativo, XCode, Java, etc. ) se evitarían estos problemas o sería mas fácil saber que corregir.


2 – Soporte técnico

Otro tema es que aunque el soporte es muy amable y busca solucionar los problemas, siempre solicitan el código fuente de tu proyecto que falla, lo cual es difícil porque no siempre puedo obtener autorización para andar enviando proyectos por correo. Algo importante que mencionar es que generalmente los problemas son del entorno de desarrollo y no del código por lo cual no me hace sentido que me pidan el código si les informo de un problema de con el diseñador de interfaces de Android o si Visual Studio se cierra cuando quiero ver las propiedades del proyecto y eso no sucede en Xamarin Studio. Los logs que genera Xamarin tanto en PC o en Mac tiene mucha información y muy rara vez los solicitan, por lo cual si uno no sabe de su existencia puede perder mucho tiempo antes de que ellos los soliciten, explicando de donde se deben obtener.


3 – Dificultad para usar librerías Objective C

Es muy útil poder usar código nativo sin embargo en el caso de iOS es un poco complicado hacer los binding para utilizar librerías nativas en el proyecto Xamarin,   hay que tener conocimientos medianamente solidos de Objective C, lo cual quita la ventaja de la curva de aprendizaje si nuestro proyecto depende de algo ya creado de manera nativa, por ejemplo el SDK de un dispositivo de hardware.


4 – Dificultad para ejecutar un proyecto nuevo

Uno de los temas que no me parece muy grave pero si es un poco molesto es lograr que un proyecto se ejecute por primera vez, sobre todo Xamarin.Forms. Entre errores por la descarga de paquetes nuget, errores con las API de Android seleccionadas por defecto, etc. podemos perder un par de horas (sobretodo si estamos empezando a conocer la plataforma) en lograr ejecutar el proyecto en blanco. La parte rescatable es que mucho errores son comunes y la solución es fácil de encontrar en los foros de Xamarin, la otra parte buena es que después de que logramos ejecutarlo casi nunca vuelve a haber problemas de este tipo a lo largo del desarrollo.


5 – Integración con Visual Studio

Por último algo que creo debe mejorar mucho (sobretodo ahora que están pidiendo que se use Visual Studio y nos olvidemos de Xamarin Studio para PC) es el soporte para Visual Studio, este es demasiado inestable cuando se trabaja con Xamarin, en ocasiones un mismo proyecto puede funcionar perfecto en Xamarin Studio y no en Visual Studio. Es importante aclarar que no he tenido ningún problema de estabilidad con las apps ya empaquetadas,.



Al final ¿recomiendas Xamarin?

Si lo recomiendo, les puedo decir que es una plataforma muy buena para el desarrollo de apps iOS y Android (Mac no lo he usado) y fácilmente se integra con proyectos Microsoft .NET (Desktop, Web, Consola, ensamblados dll, etc.). La plataforma aun tiene mucho por mejorar (en ocasiones hay que tener mucha paciencia, sobretodo siendo nuevo) sin embargo al día de hoy no tengo quejas en cuanto a la estabilidad de los productos finales y creo que la clave para lograr crear aplicaciones que aprovechen esta plataforma esta en entender los conceptos básicos sobre los diferentes tipos de proyectos y las estrategias para compartir el código, de lo contrario se terminan haciendo aplicaciones nativas independientes con la diferencia de usar C# en lugar de Objective C y Java.

miércoles, 6 de abril de 2016

Haciendo deployment a un dispositivo Android mediante la red TCP IP

En este pequeño tutorial voy a demostrar como se puede hacer la instalación de una app a un dispositivo Android usando la red en lugar del cable USB. Hay varios escenarios donde esto puede ser útil, dos de los casos con los que me he encontrado son los siguientes:
  • Alguna vez tenia que instalar y debuggear una app en un dispositivo hecho a la medida, que tenia Android como Sistema Operativo y del cual no me dieron los driver para el USB y el dispositivo tenia acceso Root y la Terminal funcionando.
  • Actualmente trabajo con una MacBook Pro donde tengo virtualizado Windows con Parallels, esto para poder trabajar con Visual Studio conectado a los Visual Studio Team Services. Para no instalar dentro de la maquina virtual el emulador “Android Player” que provee Xamarin, lo cual no parece una buena idea, lo que hice fue instalar el Android Player en la maquina host y conectarlo a la maquina virtual mediante la red que se crea entre las dos maquinas.
Como lo mencione hace unas líneas para este ejemplo estoy utilizando lo siguiente:
  • Una MacBook Pro con OS X El Capitan
  • Windows 10 virtualizado con Parallels
  • Android Player con una instancia de un Nexus 4 con Lollipop
  • En ambos sistemas tengo Xamarin con todas sus actualizaciones tanto de Xamarin como de XCode en el caso de OS X
En el caso del emulador ya viene configurado con las opciones de desarrollador activadas y listo para el debug mediante TCP. En el caso de un dispositivo físico hay que usar estos comandos antes de realizar la conexión

En un dispositivo con acceso Root desde la terminal usamos los siguientes comandos
su
setprop service.adb.tcp.port 5555
stop adbd
start adbd

En este caso no hablare de un dispositivo sin acceso Root el cual de inicio debe conectarse por USB para habilitar el Debug por TCP.

Ya que tengamos nuestro dispositivo listo continuamos abriendo la consola “Android ABD” desde Visual Studio, podemos hacer la ejecución desde la consola normal solo si tenemos las variable de entorno bien configuradas o si usamos la ruta completa de donde tengamos abd.exe. En el caso de abrir la consola desde Visual Studio esta consola ya esta lista para trabajar sin escribir toda la ruta, para hacerlo presionamos el siguiente icono

image

O podemos acceder desde el menú Tools/Android/Android Adb Command Prompt
En nuestro Android Player presionamos el siguiente botón para obtener la dirección IP asignada al emulador

image
image

Ahora en la consola realizamos la conexión con el siguiente comando
adb connect <Dirección_IP>

image

Si obtenemos las respuesta “connected to” ya se realizo la conexión, tras esto ya podríamos hacer el deployment en el dispositivo conectado como lo hacemos normalmente seleccionando el dispositivo desde la barra de herramienta de VS

image

NOTA: si no aparece el dispositivo hay que intentar reiniciando VS para que lo muestre.

martes, 9 de febrero de 2016

Fundamentos de .NET y C# en TelmexHub

El día sábado 6 de Febrero comencé un curso de C# en TelmexHub. La idea de esta primera sesión era mostrar a los asistentes los fundamentos teóricos del lenguaje C# y la paltaforma Microsoft .NET, esto con la finalidad de que en un futuro cercano se de un curso de Xamarin donde se puedan aprovechar estos conocimientos desarrollando apps móviles.








También les comparto la presentación que utilice durante la primera sesión del curso.

Los temas que abarca son:

  •  Fundamentos de .NET (CLR, CLI, CIL, proceso de compilación, componentes de .NET) 
  • ¿Qué es C#? 
  • Variables y tipos de datos 
  • Expresiones Operadores


 

viernes, 29 de enero de 2016

Universal Windows Platform con Xamarin

Hola,

Les comparto este vídeo con el procedimiento de como utilizar Xamarin.Forms para crear aplicaciones para Windows 10 o de la llamada Plataforma Universal de Windows.