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

Creando un instalador offline para Visual Studio

Habitualmente trabajo con mas de una computadora para desarrollo y ademas hago reinstalaciones periodicas del sistema operativo, por lo que termino ocupando bastante tiempo descargando e instalando Visual Studio. Para facilitar esto, tenemos la posibilidad de utilizar el mismo archivo instalador que inicia el proceso interactivo de instalacion y agregando parametros podemos obtener una copia local de todos los archivos necesarios asi como automatizar los flujos o paquetes que deseamos instalar. Tambien podemos actualizar nuestro instalador offline para siempre tener la ultima version disponible y no tener que realizar todo el proceso cuando se publican nuevas versiones.

Creando nuestro instalador offline

En este post voy a detallar paso a paso como realizar todas estas operaciones y voy a utilizar la version 2022 Community preview al momento de escribir esto. Otras versiones funcionan en forma similar, descargando el archivo instalador de dicha version. Siempre se pueden consultar los parametros ejecutando en la linea de comandos el archivo instalador con el parametro -? lo cual nos abrira una pagina web local temporal con toda la informacion

Primero necesitamos obtener el archivo de instalacion desde la pagina de descarga de Visual Studio y guardarlo en un directorio local, en mi caso utilizare c:\VSOffline

Luego debemos abrir una ventana de comandos en la carpeta en donde descargamos el instalador y ejecutar la siguiente instruccion que iniciara el (largo) proceso de descarga

VisualStudioSetup --layout C:\VSOffline --lang en-US --add Microsoft.VisualStudio.Workload.NetCrossPlat --add Microsoft.VisualStudio.Workload.Universal --includeRecommended --includeOptional

Parametros utilizados

–layout es nuestra carpeta destino

–lang el lenguage a descargar, los posibles valores son los de la columna BCP 47 en el siguiente enlace

–includeRecommended & –includeOptional asegura que se descargan todos los archivos que necesitaremos al realizar la instalacion

-add los flujos que queremos esten incluidos en nuestro instalador. En mi caso estoy interesado solo en los flujos relacionados a desarrollo cross platform. Se puede seleccionar cualquiera de los disponibles, utilizando la lista de posibles valores que se encuentra aqui.

Actualizar nuestro instalador offline

Si ya tenemos nuestra carpeta con los archivos de instalacion y deseamos actualizar a la ultima version cuando existen cambios, solo debemos volver a ejecutar la misma instruccion que usamos originalmente.

Instalar visual studio

En la misma ventana de comandos en la que ejecutamos el comando para descarga, corremos la siguiente instruccion

VisualStudioSetup --passive --norestart --includeOptional

Esto iniciara el proceso de instalacion, como se puede ver en la siguiente captura de pantalla. Los archivos no son descargados nuevamente, solo se verifica que esten disponibles.

Si abrimos el instalador, podemos ver que se instalaron correctamente los flujos deseados


En un proximo post, voy a agregar informacion sobre como se puede automatizar aun mas el proceso y ademas como podemos utilizarlo junto a Windows Sandbox para crear rapidamente entornos de desarrollo repetibles y que se encuentran siempre en el mismo estado incial.

Espero les haya sido de utilidad y les permita configurar sus equipos de desarrollo rapidamente!

Configuracion avanzada de Windows Sandbox

En un post anterior comento como instalar y la utilizacion basica de Windows Sandbox.

Si comenzamos a utilizarlo habitualmente, veremos que debido a la reinicializacion total, estaremos repitiendo ciertos pasos cada vez que iniciamos la aplicacion.

Para evitar algunos de estos pasos repetitivos, podemos utilizar un archivo de configuracion. Windows Sandbox nos permite escribir archivos de configuracion, formateados como XML, los mismos utilizan la extension .wsb.

Utilizando cualquier editor de texto que nos permita trabajar con texto plano, podemos crear nuestro archivo de configuracion.

En el siguiente archivo de configuracion de ejemplo, vemos las opciones que tenemos disponibles, como la posibilidad de mapear una carpeta de la maquina host en una carpeta del Sandbox, o ejecutar un comando en el sandbox luego de que inicia. En el ejemplo, estamos ademas iniciando la instalacion de Visual Studio Community 2022 que ya tenemos previamente descargado en la computadora host.

<Configuration>
    <vGPU>Default</vGPU><!--Enable|Disable|Default-->
    <Networking>Default</Networking><!--Disable|Default-->
    <MappedFolders>
        <MappedFolder> 
            <HostFolder>D:\VS\Preview\Community2022</HostFolder><!--absolute path to the host folder-->
            <SandboxFolder>C:\VS</SandboxFolder><!--absolute path to the sandbox folder-->
            <ReadOnly>false</ReadOnly> <!--true|false-->
        </MappedFolder>
    </MappedFolders>
    <LogonCommand>
        <Command>C:\VS\vs_community.exe --passive --norestart --includeOptional</Command> <!--command to be invoked-->
    </LogonCommand>
    <AudioInput>Default</AudioInput><!--Enable|Disable|Default-->
    <VideoInput>Default</VideoInput><!--Enable|Disable|Default-->
    <ProtectedClient>Default</ProtectedClient><!--Enable|Disable|Default-->
    <PrinterRedirection>Default</PrinterRedirection><!--Enable|Disable|Default-->
    <ClipboardRedirection>Default</ClipboardRedirection><!--Disable|Default-->
    <MemoryInMB>4096</MemoryInMB>
</Configuration>

Luego de guardar el archivo en nuestro disco local con la extension .wsb podemos hacer doble click sobre el mismo, lo que iniciara Windows Sandbox y cargara las opciones establecidas.

Podemos de esta manera tener distintos archivos de configuracion que nos daran acceso a diferentes configuraciones de prueba en forma muy rapida y sencilla.

Aqui les dejo el enlace a la documentacion oficial para que puedan ver los detalles de los distintos parametros.

Ejecutar aplicaciones en forma segura con Windows Sandbox

Windows Sandbox es un entorno que nos permite ejecutar aplicaciones en forma segura y aislada de la computadora host.

Cualquier software que necesitemos, debe ser instalado cada vez que el sandbox se inicia.

Ventajas

Esta incluido en Microsoft Windows 10 y 11, por lo que no necesita la descarga de software adicional.

Cada vez que se inicia, nos da una nueva instalacion del sistema operativo.

Es seguro, utiliza virtualizacion basada en hardware para aislar el sandbox de la computadora host.

Es eficiente, consumiendo menos recursos que maquinas virtuales.

Requisitos

Windows 10/11 Pro/Enterprise

Arquitectura AMD64

Virtualization habilitada en la BIOS

Al menos 4 GB de RAM

Al menos 1 GB de espacio libre en disco

Al menos CPU de dos nucleos

Instalacion

Habilitar la virtualizacion

En la seleccion de caracteristicas de Windows, habilitar Windows Sandbox

Habilitar Windows Sandbox

Luego de reiniciar el equipo, ya tendremos acceso a la aplicacion.

Uso

Luego de iniciar el Sandbox, podemos arrastrar cualquier archivo ejecutable desde el host a la ventana, y luego ejecutar la aplicacion.

Una vez que hemos finalizado nuestras pruebas, y previa confirmacion, cerramos el sandbox y todo el contenido sera borrado.

Configuracion avanzada

En este post podemos ver ademas como crear archivos de configuracion.

Referencias

La documentacion oficial de Windows Sandbox.

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

Json formatting for debug using powershell, jq and Visual Studio Code

When I’m debugging applications, I usually need to check some JSON responses.

If you only want to see the formatted JSON, you can use jq with PowerShell (BTW I installed jq using chocolatey), running the following PowerShell command in your terminal:

get-clipboard|jq

But usually, I have a considerable chunk of JSON data, and I want to be able to interact with the tree and collapse it.

To do that, I can create a PowerShell script with the following snippet and save it in a folder included in my path and then call it from a PowerShell prompt after copying the JSON to the clipboard.

$clipboardFile = "$env:TEMP\clipboard.json"
get-clipboard > $clipboardFile|code $clipboardFile

For example, I created the file jtoc.ps1 in my c:\windows folder, and I can copy the following JSON to the clipboard {"Hello":"json formatter","Using":"vs code"} and then use jtoc in the terminal and it will open in vs code, then I use ALT+SHIFT+F to format the text.

I hope this was useful and a better way to check your JSON data.

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 😉

Xamarin.Forms deploy to Android 11 emulator in Windows

I’m usually using the Android emulator while I’m working with VS, and today I was trying to build and deploy to a newly created Android 11 emulator with no luck.

As always, Stack Overflow to the rescue!

In this link, they comment that the problem is that with Android 11 we need a different way of sign the apk.

I didn’t found the option to do it using the UI, so, we need to add the following tag to our Android csproj file for the debug configuration.

<AndroidUseApkSigner>true</AndroidUseApkSigner>

I also needed to disable the use of Shared Runtime and Fast Deployment in the Android project properties

After all the changes, my app is deploying to the Android 11 emulator without issues!