Cambios en permisos para HealthKit en iOS 15

Estuve recientemente actualizando las librerias de una aplicacion desarrollada en Xamarin.Forms que hace bastante tiempo se encuentra finalizada y que accede a datos de salud y actividad fisica en iOS.

Una de las librerias a actualizar fue la libreria de terceros que es la encargada de tomar los datos de HealthKit y prepararlos para ser enviados al servidor.

Luego de la actualizacion, comprobe que la sincronizacion seguia funcionando y enviamos la aplicacion a los usuarios.

La aplicacion en principio parecia funcionar correctamente, pero cuando pasaba a segundo plano, dejaba de funcionar la sincronizacion. Este comportamiento era raro, ya que la actualizacion y documentacion de la libreria no indicaba la necesidad de ningun cambio para la nueva version.

Al volver a realizar las pruebas con la aplicacion en segundo plano, encontramos que estaba fallando con un mensaje de permisos insuficientes.

Esto sucedia debido a que iOS a partir de su version 15, necesita de un nuevo entitlement para acceder a la informacion de salud en segundo plano.

Luego de agregar com.apple.developer.healthkit.background-delivery a la lista de entitlements, todo comenzo a funcionar correctamente.

Referencias

https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_developer_healthkit_background-delivery

Databinding Avanzado Parte 2: Converters

En ocasiones, podemos necesitar enlazar a un origen de datos, pero el origen puede no estar en el formato correcto, en esos casos necesitamos manipularlo.

Por ejemplo, supongamos, como veremos a continuacion, que tenemos una caja de texto y un boton, y queremos que el boton se encuentra habilitado solamente cuando la caja de texto tenga uno o mas caracteres.

Podriamos enlazar el boton a una propiedad booleana en el view model y el texto a otra propiedad string, entonces cuando el texto cambia, podemos actualizar la propiedad booleana. Utilizar esta tecnica funciona, pero agrega complejidad innecesaria. Veremos a continuacion una mejor solucion utilizando value converters.

More

Data Binding Avanzado Parte 1

Este es el primer post de una serie sobre data binding avanzado. Veremos value converters, relative binding, {Binding .} y {Binding self}, constructores y mas.

Esperamos publicar un nuevo post semanal o quincenal.

Empezando

En breve publicaremos un post introductorio a data binding.

Ejemplos

Por cada tema a cubrir, proveeremos un ejemplo simple (tan simple como sea posible), el cual estara disponible en GitHub y enlazado en el post. Usaremos estos ejemplos para eliminar cualquier confusion y ayudar a comprender mejor los temas.

Algunos de los ejemplos de esta serie seran creados por nosotros y otros tomados de la documentacion oficial de Microsoft. Lo cual nos hace preguntarnos, porque utilizar estos posts en lugar de la documentacion oficial? Desde nuestro punto de vista, la documentacion de Microsoft es exhaustiva, pero a veces puede ser abrumadora. Ademas la utilizacion de multiples origenes, pueden ayudar a obtener un mejor entendimiento del tema.

Topico #1: Paths

El uso de la palabra clave path es un buen punto intermedio para comenzar. Puede ser usada de diferentes maneras. El uso mas frecuente es para apuntar a la propiedad de un objeto almacenado en un recurso, o para apuntar a la propiedad de un objeto miembro.

 

More

External access to your API in development with Conveyor

In my usual workflow, when I’m developing an API with Visual Studio, and I need to access it from a mobile app, I publish the API to Azure or a local IIS server.
I need to do this because, by default, IIS express publish your API with the localhost endpoint, and it can’t be easily used outside the running machine.
I was looking for a quick fix when I found Conveyor, a Visual Studio extension that automatically provides our API’s external access. Additionally, I created an account on their website to enable public access to my API (outside of the local network).
After installing the extension, it would start when I run my project in Debug mode.
In the following screenshot, you can see which ones are the enabled endpoints.

Enabled endpoints


We can also enable the use of certificates for HTTPS access.
A great addition to my toolbox, easy to install and use 😉