Archivo de la etiqueta: xamarin

Instalando los proyectos de VS2019 v16.11 Preview 1 para .NET MAUI Preview 4

Pues eso… que he instalado el Visual Studio 2019 versión 16.11 Preview 1 para poder usar los proyectos de .NET MAUI Preview 4 y como no había tipos de proyectos para .NET MAUI, y lo que se indica en esa página para tenerlos no es completo, he tenido que buscar en la WEB cómo hacerlo y aquí te pongo unas capturas de ese proceso de configuración de .NET MAUI para poder tener los tipos de proyectos en Visual Studio 2019 v11 Preview 1.

Lo primero es decirte que al PowerShell deberían cambiarle las combinaciones de colores, porque lo que es un servidor, no me resulta fácil ver algunos de los avisos y comandos/opciones… así que… si tampoco puedes verlos en las capturas… imagina lo que pone… 😀

De todas formas te resumo los pasos:

Tienes que abrir una ventana de comandos o PowerShell y escribir:
dotnet tool install -g redth.net.maui.check
A continuación (esto es lo que no vi en la página del anuncio de .NET MAUI Preview 4, aunque ahora releyéndola si lo he visto) escribir:
maui-check
Aunque antes de esto deberías escibir estos dos comandos:
primero:
dotnet new nugetconfig
y después:
dotnet nuget add source -n maui-preview https://aka.ms/maui-preview/index.json
O al menos así lo hice yo, aunque creo que primero escribí el primero el de dotnet tool install
En cualquier caso, si ya lo has hecho, no habrá problemas, tal como verás en las siguientes capturas, ya que te dirá que ya está hecho 😉

Figura 1. No me muestran los proyectos de .NET MAUI.
Figura 2. Ahí dice que ya lo he instalado… pero yo no veo ese texto… tuve que copiarlo para verlo…
Figura 3. Crear la configuración de NuGet y añadirla… aunque ya lo hice según ahí me indica
Figura 4. La comprobación de si está instalado lo necesario para usar .NET MAUI (tuve que «fix» todo eso…).
Figura 5. Y paciencia mientras instala los SDKs, emuladores, etc.
Figura 6. Paciencia mientras sigue instalando…
Figura 7. Hasta que termine de comprobar e instalar.
Figura 8. Ahora si hay proyectos para .NET MAUI en Visual Studio 2019 v11 Preview 1

Por supuesto, estos pasos no habrá que hacerlos una vez que tanto el .NET MAUI como el Visual Studio 2019 (o 2022) que lo soporte estén más actualizados. O eso espero, si no… pues eso… ¡será un rollo!

Y si quieres saber qué se irá incluyendo en las próximas preview de .NET MAUI, aquí tienes el roadmap mostrado cuando sacaron la preview 4.

No he tenido oportunidad de probarlo, he creado un proyecto nuevo, pero la máquina virtual que tengo parece que falla mucho o es que el Visual Studio 2019 versión 16.11 Preview 1 hace que falle, no lo sé… no tengo la paciencia para averiguarlo, entre otras cosas porque esa máquina virtual (en Hyper-V) va lenta y me ralentiza mi equipo, al menos con las cosas que tengo abiertas y que por ahora son más urgentes que probar el .NET MAUI, pero lo probaré… y cuando lo haga, lo sabrás… si sigues lo que publico aquí en el blog o en mi feis, así que… te invito a que entres en la página de elGuille ne el feis: elGuille.info en Facebook.

Espero que te sea de utilidad… ya sabes que esa es siempre la intención. 😉

Nos vemos.
Guillermo

Soluciones a los ejercicios de Trucos para Xamarin.Forms y .NET MAUI en dispositivos

Pues eso… aquí tienes los ejercicios y las soluciones propuestos en el post Trucos para Xamarin.Forms y .NET MAUI en dispositivos. También los tienes disponibles en GitHub.

Los ejercicios eran:

Si quieres, como ejercicio de práctica, puedes hacer lo siguiente:

Ejercicio 1:

Añade un panel (StackLayout) con la orientación horizontal, de esa forma los controles que metas dentro de ese stack se mostrarán uno al lado del otro, pon un Switch seguido de un botón con el texto «Un Switch» y después otro Switch y otro botón con el texto «Otro Switch» (o lo que te de la gana pero que no sea demasiado largo).
En este caso el texto no pillará todo el ancho y verás que no se ve igual en iOS / iPhone que en Android o UWP/Windows.
Si no puedes probarlos en distintos dispositivos emuladores, te pondré la respuesta con algunas capturas de los tres sistemas que utilizo con Xamarin.Forms.

Nota:
Probando el ejercicio, compruebo que el poner más espacios al final, no tienen el efecto deseado, así que… si es iOS usa el valor 6,0 para la propiedad Padding.

Otra cosa interesante que puedes hacer (ejercicio 2) es que las etiquetas estén alineadas en el centro vertical, es decir, para que no se vean con el texto tan arriba, sino en el centro de la propia etiqueta.

Estas son las soluciones

Al ejercicio 1 y 2:

<StackLayout Orientation="Horizontal" Padding="4" Spacing="3">
    <Label Text="2 Switch con botones: " VerticalOptions="Center"/>
    <Switch />
    <!-- Los espacios detrás no se respetan... habrá que usar padding -->
    <Button Text=" Un Switch "
            Padding="{OnPlatform iOS='6,0', Android='6,0', Default=4}"/>
    <Switch />
    <Button Text=" Otro Switch "
            Padding="{OnPlatform iOS='6,0', Android='6,0', Default=4}"/>
</StackLayout>

Nota:
El valor ColorAzul2 está definido en App.xaml.

En ej ejercicio 2 lo que debes usar es: VerticalOptions="Center"

Capturas de los ejemplos

Aquí te dejo algunas capturas (me gusta que los posts tengan imágenes 😉 )

Ya sabes, pulsa en la imagen para verla en grande.

Figura 1. Página principal del proyecto en Android.

Figura 2. La solución a los ejercicios en Android.

Figura 3. Página principal del proyecto en iPhone.

Figura 4. Las soluciones en iPhone, pero en modo oscuro no se ve la etiqueta…

Figura 5. Solución a los ejercicios en iPhone (usando el tema claro).

Y esto es todo.

Lee el post de estos ejercicios porque hay cambios.

Nos vemos.
Guillermo

Trucos para Xamarin.Forms y .NET MAUI en dispositivos

Pues eso… te voy a relacionar varios trucos sobre cómo usar el código (y el código de marcado XAML) para dispositivos móviles (Android, iOS y UWP -Windows 10-) usando Xamarin.Forms (Mono mobile) y seguramente servirá para .NET MAUI, la que será el sustituto de Xamarin cuando .NET 6.0 esté en fase release (sobre noviembre de este año 2021).

Nota:
El código mostrado a la hora de escribir este post (2 de junio de 2021 a las 11:15) es para Xamarin.Forms y C#.
Cuando tenga ejemplos de .NET MAUI lo indicaré si es diferente al de Xamarin.

Los trucos

El código con los ejemplos, ejercicios y soluciones están publicados en GitHub.

  1. Saber la plataforma (Android, iOS o UWP) y el tipo de dispositivo (Phone, Tablet, TV, Watch, Desktop)
  2. Poner varios valores en el código XAML usando OnPlatform, OnIdiom, etc.
    1. Ejercicio 1
    2. Ejercicio 2
  3. Si al crear un proyecto no te aparecen los emuladores ni dispositivos

Saber la plataforma (Android, iOS o UWP) y el tipo de dispositivo (Phone, Tablet, TV, Watch, Desktop)

Algunas veces es conveniente saber si la aplicación está funcionando en un dispositivo Android, iOS o compatible con UWP (Windows 10 escritorio o móvil, Xbox, etc.), tanbién si es un móvil, escritorio, tablet, etc.

La primera (la plataforma) se averigua con Platform y OnPlatform y los valores aceptados son los indicados en la tabla 1 (de la ayuda de Xamarin.Forms) que corresponden al tipo DevicePlatform:

La segunda (el tipo de dispositivo) se averigua con Idiom y OnIdiom y los valores de DeviceIdiom que son los que te muestro en la tabla 2.

Cuando usamos Platform o Idiom lo haremos por código usando la clase DeviceInfo (definida en Xamarin.Essentials).
OnPlatform y OnIdiom lo usaremos en el código XAML.
Ahora veremos ejemplos de código c# y XAML de estos dos casos.

AndroidGets the Android platform.
iOSGets the iOS platform.
macOSMac OS
TizenGets the Tizen platform
tvOSGets the tvOS platform
UnknownGets the unknown platform.
UWPGets the UWP platform.
watchOSGets the watchOS platform
Tabla 1. Valores de la estructura DevicePlatform.

DesktopGets the desktop idiom.
PhoneGets the phone idiom.
TabletGets the tablet idiom.
TVGets the TV idiom.
UnknownGets the unknown idiom.
WatchGets the watch idiom.
Tabla 2. Valores de la estructura DeviceIdiom.

Código de ejemplo

Por código podemos usar DeviceInfo (habrá que importar el espacio de nombres Xamarin.Essentials) y las estructuras DevicePatform o DeviceIdiom según lo que queramos averiguar.

Nota:
En estos ejemplos estoy usando una página sencilla de tipo ContentPage de Xamarin.
En la que estarán definidos los controles usados en el código.

Por ejemplo, si queremos saber si el código está ejecutándose en un dispositivo UWP (por ejemplo, en Windows 10) o en Andoid o en iOS podemos hacer lo siguiente comprobando la propiedad Platform del tipo DeviceInfo:

// Saber la plataforma
if (DeviceInfo.Platform == DevicePlatform.UWP)
    LabelDevicePlatform.Text = "Estás usando la plataforma UWP";
else if (DeviceInfo.Platform == DevicePlatform.Android)
    LabelDevicePlatform.Text = "Estás usando la plataforma Android";
else if (DeviceInfo.Platform == DevicePlatform.iOS)
    LabelDevicePlatform.Text = "Estás usando la plataforma iOS";

Lo mismo te interesa saber si se está ejecutando en un teléfono móvil una tableta o en el escritorio, para eso usaremos la propiedad Idiom de la clase DeviceInfo:

// Saber el tipo de dispositivo
if (DeviceInfo.Idiom == DeviceIdiom.Desktop)
    LabelDeviceIdiom.Text = "Estás usando el escitorio.";
else if (DeviceInfo.Idiom == DeviceIdiom.Phone)
    LabelDeviceIdiom.Text = "Estás usando un teléfono móvil.";
else if (DeviceInfo.Idiom == DeviceIdiom.Tablet)
    LabelDeviceIdiom.Text = "Estás usando una tableta.";

Pero puede ser que lo que queremos es asignar un color según el código esté funcionando en una de las plataformas. En lugar de hacerlo por código, lo podemos hacer definiendo esa característica en el diseñador XAML.

Vamos a verlo aplicando un color al fondo de la etiqueta LabelDevicePlatform definida en el ejemplo.

<Label x:Name="LabelDevicePlatform" Padding="6"
       TextColor="White"
       BackgroundColor="{OnPlatform Android=#FA3F7E, iOS=#34C759, UWP=#0077DF}" />

En el código XAML es donde usaremos OnPlatform.

De igual forma podemos usar OnIdiom para saber el tipo de dispositivo.

<Label x:Name="LabelDeviceIdiom" Padding="6" 
       TextColor="{OnPlatform Android=Black, iOS=Blue, UWP=Green}"
       BackgroundColor="Wheat"
       FontSize="{OnIdiom Tablet=Small, Phone=Micro, Desktop=Medium}"/>

En ese código XAML hacemos las dos comprobaciones, la plataforma y el dispositivo y según sea aplicaremos un color u otro.

Si quieres hacer solo esa comprobación, por ejemplo para que en dispositivos de Apple (iOS) tengan un color y que en el resto tenga otro, podemos hacerlo de esta forma:

<Label Text="DeviceIdiom: " TextColor="{OnPlatform iOS=Green, Default=Red}"/>

En ese caso usamos el valor (o propiedad) Default que se aplicará a las plataformas (o dispositivos si se usa con OnIdiom) para las que no haya un valor concreto.

Poner varios valores en el código XAML usando OnPlatform, OnIdiom, etc.

Otra de las cosas que me ha pasado mientras estoy con esto de crear aplicaciones para dispositivos móviles y concretamente con el iPhone (iOS), en el que el texto mostrado en uno de los tipos de botones que estoy usando (para simular un Switch) es que el texto se queda pegado a los bordes del botón, mientras que en Android y UWP se quedaba separado.

Para solucionarlo necesitaba hacer dos cosas:
1- La más simple es poder añadir espacios delante y detrás del texto. Esto sería fácil si esa asignación la hago por código (c#), pero yo quería hacerla en el código de diseño (XAML).
2- Cambiar el Padding izquierdo y derecho.

El problema es que para el primer caso, tenía que asignar espacios delante y detrás del texto, pero ni usando el valor 255 (ALT+255) lo conseguí, ya que al ejecutar el código esos espacios se ignoran .

En el segundo caso, es que al asignar valores separados por comas da error, ya que después de cada coma se espera una propiedad.

Por ejemplo, lo del espacio.
Fíjate en el siguiente código XAML el valor del texto (propiedad Text) lo asigno usando un valor diferente según la plataforma.
Si es iOS uso un espacio delante y detrás de la palabra ATRÁS, en el resto de plataformas (Default) use ese mismo texto pero sin espacios:

<Button x:Name="btnAtras" 
        Text="{OnPlatform iOS= ATRÁS , Default=ATRÁS}" 
        HorizontalOptions="FillAndExpand"
        Style="{StaticResource BtnNavegar}"
        Clicked="btnAtras_Clicked"/>

Y si ese texto llevase comas, pues… ni se podría poner.

Ese sería el caso para cuando queremos asignar un valor que tenga varios argumentos separados por comas, como es el caso de Padding si no queremos asignar un solo valor para los 4 costados. Ya que solo me interesaba para la parte iaquierda y derecha, que si lo asignase de forma normal sería algo así:

Padding="6,0"

El primer valor se asignará a la izquierda y derecha (Left y Right) y el segundo valor arriba y abajo (Top y Botton).
Que queremos asignar 4 valores diferentes, lo haremos así:

Margin="4,5,6,7"

Los valores serían: 4 para la izquierda, 5 para arriba, 6 para la derecha y 7 para abajo.

La solución: Poner el texto entre comillas simples (las dobles no se pueden usar, ni siquiera usando teclas de ESCAPE, algo así: \»).

Por cierto, esa solución también es válida para el código HTML, cuando quieres poner comillas dentro de unas comillas, por ejemplo un valor style en el texto asignado a algo mediante código. Pero esa es otra historia.

Dicho lo dicho, la cosa quedaría de esta forma, si lo que se busca es que el padding izquierdo y derecho sea 6 para la plataforma iOS y 0 para el resto y que el texto incluya comas o espacios delante y/o detrás, si esos espacios están entro otros caracteres no hay que hacer nada especial.

<Label x:Name="LabelStatus" Style="{StaticResource LabelStatusWiz}"
       Padding="{OnPlatform iOS='6,0', Default=0}"
       Text="{OnPlatform Android=' Dispositivo \'Android\' ', 
                         iOS=' Dispositivo iPhone (\'iOS\') ', 
                         UWP='Dispositivo UWP (\'Windows 10, XBox\')'}"/>

Como ves el valor del Padding para iOS es ‘6,0’ (entre comillas simples).
Fíjate también que en ese código (para el valor de la propiedad Text) he usado \’ para indicar que quiero usar una comilla simple, esto solo funcionará si el texto completo está encerrado entre comillas simples.

Aquí tienes unas capturas de UWP: Windows 10 en el equipo local o lo que es lo mismo, usando el escritorio (figura 1), para Android (figura 2) y para iOS en un iPhone 7 Plus (figuras 3 y 4).

Observa los colores de las etiquetas (fondo y texto), así como en la parte de abajo que hay texto entre comillas simples.

Y observa que el padding para el botón ese con el texto tan largo, pues como que no sirve de mucho, ya que el botón pilla todo el ancho de la pantalla, pero sería útil si ese botón se está mostrando en un sitio que no lo expanda.

Si quieres, como ejercicio de práctica, puedes hacer lo siguiente:

Ejercicio 1:

Añade un panel (StackLayout) con la orientación horizontal, de esa forma los controles que metas dentro de ese stack se mostrarán uno al lado del otro, pon un Switch seguido de un botón con el texto «Un Switch» y después otro Switch y otro botón con el texto «Otro Switch» (o lo que te de la gana pero que no sea demasiado largo).
En este caso el texto no pillará todo el ancho y verás que no se ve igual en iOS / iPhone que en Android o UWP/Windows.
Si no puedes probarlos en distintos dispositivos emuladores, te pondré la respuesta con algunas capturas de los tres sistemas que utilizo con Xamarin.Forms.

Nota:
Probando el ejercicio, compruebo que el poner más espacios al final, no tienen el efecto deseado, así que… si es iOS usa el valor 6,0 para la propiedad Padding.

Otra cosa interesante que puedes hacer (ejercicio 2) es que las etiquetas estén alineadas en el centro vertical, es decir, para que no se vean con el texto tan arriba, sino en el centro de la propia etiqueta.

Pulsa en las imágenes para verlas a tamaño real.

Figura 1. El ejemplo en un Windows 10 (UWP).

Figura 2. El ejemplo en un móvil de Android (Pixel 4a).

Figura 3. El ejemplo en un móvil iOS (iPhone 7 Plus). Observa que no se ve todo el texto.

Figura 4. El ejemplo en un móvil iOS (iPhone 7 Plus).

Si miras las capturas 3 y 4 verás que en la última ya se ve bien el texto, tanto de la etiqueta de arriba como en la que tiene el fondo verde (la que indica que estás usando la plataforma iOS), para solucionar esa error, he vuelto a usar lo comentado en este post.

En el caso de la etiqueta de Xamarin he ajustado el valor de Padding para el iOS que sea más pequeño que para el resto.

<Label Text="Welcome to Xamarin.Forms!" FontSize="Title" 
       BackgroundColor="#96d1ff" Padding="{OnPlatform iOS=10,Default=40}"
       VerticalOptions="CenterAndExpand" 
       HorizontalOptions="CenterAndExpand" />

Para la etiqueta donde se muestra la plataforma en la que se está usando la aplicación, he optado por cambiar el tamaño de la letra.

<Label x:Name="LabelDevicePlatform" Padding="6"
       FontSize="{OnPlatform iOS=Micro, Default=Small}"
       TextColor="White"
       BackgroundColor="{OnPlatform Android=#FA3F7E, iOS=#34C759, UWP=#0077DF}" />

Nota importante sobre los valores asignados cuando usamos OnPlatform, OnIdiom, etc.
Cuando usamos, por ejemplo, OnPlatform el Intellisense de Visual Studio (en este ejemplo estoy usando Microsoft Visual Studio Community 2019 Version 16.10.0) te muestra los valores de la plataforma (iOS, Android, UWP, Default, etc.), pero no te muestra el intellisense para los valores asignados.
Por ejemplo, en el valor de FontSize del código XAML anterior, he usado el valor Micro para iOS y Small para el resto (Default), esos valores hay que ponerlos como se deben poner, me explico: si el valor es Micro con la m mayúscula, debe estar así escrito, si pones micro (con la m en minúscula) te dará error… Esto lo sé porque lo escribí en minúscula y al ejecutar el programa en el iPhone me dijo que nones… 😉

Si al crear un proyecto no te aparecen los emuladores ni dispositivos

Pues eso… he creado un nuevo proyecto para Xamarin.Forms para estos ejemplos y ejercicios y al intentar probarlo en otra plataforma distinta a UWP, vamos al intentar probarlo en Android o iPhone no me salían las opciones de los emuladores o los dispositivos.

¿La solución?
Cerrar la solución y volverla a abrir, así de simple.

En la página de las soluciones a los ejercicios tienes las capturas del proyecto que he creado y que está publicado en GitHub (aquí más abajo tienes el enlace).

Y esto es todo.

Solo falta publicar el proyecto en GitHub, pero como lo he usado en la aplicación que tengo para las reservas de MKN (la empresa donde trabajo), tendré que crear un proyecto/solución para poder ponerlo en GitHub y así poder descargarlo, etc.
Ya avisaré. Avisado estás de que ya está publicado en GitHub 😉
La solución a los dos ejercicios las pondré en otro post y también estarán en GitHub.

El código en GitHub

elGuille-Ejemplos

Nos vemos.
Guillermo

gsNotas.Mobile v2.1.0.4 y v2.1.0.5

gsNotas.Mobile multiplataforma
(versiones 2.1.0.4 y 2.1.0.5)

Nota:
Esta es la página para la última versión publicada de gsNotas multiplataforma.
Si estás buscando la versión 2.0.0.33 sigue el enlace. 

En la última actualización de ayer 26 de mayo de 2021 (la terminé de compilar, etc. ayer día 26 pero hoy 27 de mayo es cuando la hago público y pondré el código fuente de esta última release en GitHub) ha habido unos cambios con respecto a la última versión, entre ellos que está disponible para Windows UWP (Universal Windows Platform) y estará publicada en la Microsoft Store cuando este sitio tenga el certificado de seguridad, que aún no tiene por aquello del cambio de proveedor de hosting y el latazo de los cambios de registro de los dominios, etc.).

El nombre cambia a gsNotas (gsNotas.Mobile) pero que cada plataforma tendrá el suyo propio: gsNotas.Android para Android, gsNotas.UWP para la plataforma universal de Windows y gsNotas.iOS para el iPhone (en teoría para cualquier dispositivo iOS).

La versión para iOS (iPhone) ya he podido hacerla funcionar en el móvil que tengo: iPhone 7 plus.
Aún no puedo crear la aplicación para la App Store de Apple porque necesito un Mac con la última versión de Xcode, y el Mac que tengo actualmente a mi disposición (a través de conexión remota), el de mi nuera Olena, no tiene la última versión del Mac OS por tanto no puedo tener el último Xcode.
Aunque me ha comentado mi hijo David que está por actualizarlo, aunque esa última versión del MacOS no es de su agrado… se ve que tiene fallos… 

La versión para iOS (iPhone, etc.) tendrá que esperar, ya que había problemas entre Microsoft y Apple con el tema de los certificados, etc., y parece ser que ya lo han solucionado, el problema es que para poder crear el paquete de instalación necesito un Mac con la última versión de Xcode y el que tengo disponible es una versión del iOS que no soporta esa última versión de Xcode, así que… a esperar o a ver si un alma caritativa me ofrece un Mac de forma remota con la última versión del iOS.

 

Novedades en esta versión (2.1.0.4~2.1.0.5)

v2.1.0.5 (27-mayo-2021)

Aparte de poder compilar y probar la versión para iOS en un iPhone 7 Plus, he añadido código para que los Placeholder (el texto mostrado como indicador de qué se espera que escribas) se vean también en modo oscuro (en modo light/claro se veían bien, pero desaparecían en modo dark/oscuro).
Y es que yo suelo tener mi móvil (de Android) en modo oscuro, más que nada por el tema del ahorro de batería y normalmente no se veían esos placeholders salvo que cambiara a modo claro (quitando el ahorro extremo de batería).

Novedades cosméticas

La mayoría de estas novedades son más bien cosméticas, es decir, un pequeño lavado de cara, pero no en plan grande, si no, de apoco que dirían mis colegas del otro lado del charco; como por ejemplo, dividir todas las opciones que antes se mostraban en la pantalla de inicio en dos pantallas (ahora pondré las capturas).
De esta forma, las más usuales estarán en la primera pantalla y el resto en la otra.

Pero también hay novedades en cuanto a la funcionalidad.

Novedades funcionales

El otro día (ya no recuerdo qué día) me cambié de compañía telefónica en el móvil, tenía Digi Mobil y me cambié a Amena. El cambio fue porque yo vivo en el campo y aquí no hay cobertura telefónica, esto es como un agujero negro para las compañías telefónicas, solo tengo acceso por medio del Wi-Fi, pero no porque una compañía telefónica lo ofrezca, no, para eso también es un agujero negro, es porque un colega tiene un repetidor de señal que trae desde el pueblo (Nerja) hasta aquí los montes (Río de la Miel), y hasta ahora toda la comunicación era por medio de Internet. Pero los de Orange ofrecen un servicio llamado Llamadas por Wi-Fi, y como Orange es caro (para mí) me decidí por Amena que tiene una tarifa aceptable.
Retomamos la historia, sin tantas historias:
Y en ese transcurso del cambio de compañía, perdí la conexión a Internet mientras estaba en el pueblo, como esta utilidad la suelo usar para tomar notas, quise abrirla para consultar algo, y resulta que me decía que no había conexión a Internet, así que, decidí usar las notas locales, pero… ¡No me las mostraba! ¿Por qué? Porque no había conexión a Internet… ¿¿¿???
Así que… me dije a mí mismo:
A ver Guille… si las notas locales están para usarlas cuando no hay conexión y no se pueden usar cuando no tienes conexión… ¿para qué puñetas sirven?
Y me respondí:
¡Poh e verdá! (yo es que conmigo mismo hablo así)

Así que… esa es una de las novedades funcionales de la nueva versión:
¡Que se puede trabajar de forma local aunque no estés logueado!

Por tanto, y para que quede evidente, en la pantalla de LOGIN he añadido un botón para conectar de forma local: Acceder sin conexión.

La segunda novedad importante es que las notas permiten más de 2048 caracteres.
Por ahora no está accesible a todo el mundo, lo siento, solo para los que hayan hecho donativos de 25€ o más.
Pero no te preocupes, las notas se pueden seguir guardando aunque no guarde más de 2048 caracteres.
En realidad, la aplicación usa dos tablas de notas: Notas y NotasMax.
En la primera (Notas) usa un campo (Texto) de tipo nchar(2048), lo iba a cambiar a nchar(4000) que es el máximo permitido para nchar, pero para ello tenía que eliminar todos los datos que ya había (recrear la tabla) y… pues como que no era plan.
Así que, he creado la segunda tabla (NotasMax) en la que el campo Texto es de nvarchar(Max), es decir, con capacidad de 2GB máximo que viene a ser de 1GB de caracteres.
He probado el rendimiento tanto en Android como en Windows y va bien.

Como te he dicho antes, esa otra tabla solo está accesible si has donado 25€ o más.
Si no es así, no puedes seleccionar cuál de las dos tablas usar y por tanto, usará la tabla normal de 2048 caracteres máximo, que creo que para notas normales es más que suficiente.
La tabla que estás usando se muestra en la barra de estatus (abajo). Si usas las notas locales, la capacidad será la que da SQLite, que la verdad no sé cuál es. Sigue este enlace si quieres leer sobre el tema (aunque a mí no me queda claro cuántos caracteres se puede tener en un campo de texto).

Otros de los cambios, que serían más bien estéticos, es el coloreado de los textos y demás. Lo he probado con el tema claro y oscuro de mi móvil Android y va bien. En el emulador siempre van bien los dos tipos de temas, pero cuando la uso desde el móvil «de verdad» no siempre se muestran todos los textos.
En Windows también va bien con el tema oscuro, aunque en realidad solo afecta a los campos de edición, el resto se muestra igual con los dos tipos de temas.

Con la versión 2.1.0.5 ya está solucionado lo de los Placeholder en Android (en iOS y UWP no era problema).

Aunque en Android el texto de ayuda en los campos sigue sin mostrarse cuando se usa el tema oscuro, es decir lo que se indica en Placeholder. Algún día espero poder solucionarlo. 🙂

La configuración la guardo ahora en un fichero de texto interno (en Environment.SpecialFolder.LocalApplicationData) ya que al guardarlo como hasta ahora en Application.Current.Properties, no siempre recuperaba esos valores… Lo mismo es por fallo mío, pero… uno de mis dichos es: Si las cosas no siempre funcionan igual, intenta usar lo que siempre debería funcionar.
Por tanto, si has estado usando la versión anterior, puede que los valores de la configuración no te los lea cuando abras por primera vez esta nueva versión.

Cosas diferentes en la app de Android de la de UWP

Aunque no son funcionales, hay un par de cambios entre las app de Android y la de Windows (UWP), y es que en la de Windows (en escritorio que es como la utilizo) la flechita de ir atrás es muy pequeña, así que… he añadido botones para ir atrás que en la aplicación de Android (u otra que no sea de UWP) no se muestran. Esos botones solo sirven para ir a la página anterior, por tanto, no son realmente funcionales si no, más bien estéticos.

Respecto a esto, el botón de añadir nueva nota, en Android siempre se mostraba (+Nota), pero en UWP se mostraba el menú ese de tres puntitos a la derecha y quedaba como oculto esa posibilidad de agregar una nueva nota, así que… he optado por poner un botón bien visible para que quede claro si se quiere añadir una nueva nota qué es lo que hay que hacer.

Y creo que esto es todo.
Ahora te pondré un par de capturas tanto de la app de Android (en dispositivo real) como de UWP en la versión escritorio.

 

Descargas de las aplicaciones

Comentarte que a día de hoy 27 de mayo de 2021, la aplicación de UWP en Mocrosoft Store aún no está disponible, ya que me la rechazan porque el acceso a la política de privacidad no se muestra de forma correcta. Y esto es porque al acceder a este blog que aún no tiene el certificado de seguridad para usar HTTPS, pues… eso… dicen que nones.
Cuando esté disponbible pondré el enlace a la tienda.
Cambié la url de la política de privacidad y la publiqué… o eso pensé, ya que en realidad estaba aún con la advertencia… así que… esta mañana (7 de junio 2021) le di a publicar en la MS Store y ya está disponible.

La de Windows (UWP) la puedes instalar desde Microsoft Store.
Este es el enlace en Microsoft Store (v2.1.0.6).

La de Android la puedes descargar desde GitHub.
Este es el enlace para la release v2.1.0.5 en GitHub.

Donativos con PayPal

Como podrás ver en las capturas (figuras 3 y 6) he puesto un botón por si quieres Hacer un donativo con PayPal que te llevará a la misma página que el enlace anterior.
Ese donativo figurará como que es para gsNotas y por tanto te servirá para ir acumulando y acceder a las características de los donadores. 😉
Ya sabes que todo esto es gratis y aunque le dedico bastante tiempo no es que quiera cobrar por ese tiempo… pero ya sabes que de algo hay que vivir… pagar la comida, el alquiler de la casa, los impuestos, la conexión a Internet, etc. Así que… si te sientes generoso y quieres (y puedes hacerlo), ahí está el botón de hacer donativos. Imagina que me quieres invitar a un café o a una chela… pues… ¡ya sabes qué hacer! 😉

Capturas

De Android con el Placeholder solucionado en v2.1.0.5.
El texto en gris: Escribe aquí tu comentario antes no se veía cuando estaba seleccionado el terma oscuro. Que aunque en la captura no lo parezca, está usando el tema oscuro.

Figura 9
Figura 9. En Android (tema oscuro aunque no lo parezca) ya se ve el texto de los Placeholders.

De iPhone (iOS)

Figura 8
Figura 8. Captura de la pantalla de inicio en un iPhone 7 Plus.

De Windows (UWP) Escritorio

Figura 1. La página de inicio en Windows (UWP Desktop).
Figura 2. La página de acceso (Login) en Windows UWP.
Figura 3. Las opciones de configuración en UWP. Puedes ver el botón Volver que no está en Android.

De Android (dispositivo Pixel 4a)

Figura 4. La página de inicio en dispositivo Android (Pixel 4a).
Figura 5. La página de Otras opcione en dispositivo Android (Pixel 4a).
Figura 6. La página de configuración en dispositivo Android (Pixel 4a).
Figura 7. La página de acceso (Login) en dispositivo Android (Pixel 4a).

Nos vemos.
Guillermo

gsNotasNET.Android v2.0.0.33

Nota:
Esta es la versión 2.0.0.33 publicada el 31 de diciembre de 2021.
A fecha de hoy 27 de mayo de 2021 está la versión 2.1.0.4 que estará en el mismo post en el que estaba la anterior (por el tema de los enlaces) pero el contenido es diferente, ya que ahí te cuento las novedades añadidas recientemente (y será la que mantenga la última versión hasta que decida cambiar… 🙂 )

gsNotasNET multiplataforma

Aunque el nombre sea gsNotasNET.Android es una aplicación para dispositivos móviles (móviles y tabletas) pensada (inicialmente) para usar con Android, pero que después le he añadido proyectos para iOS (iPhone y iPad de Apple) y UWP (Universal Windows Plataform, en teoría para móviles, tabletas y Start de Windows 10). Pero que a día de hoy (31-dic-2020) no he sido capaz de hacerlos funcionar en esos dos últimos, la aplicación, que accede a una base de datos externa de SQL Server, además de una local creada con SQL Lite, por ahora solo funciona correctamente en dispositivos Android. Actualmente está publicada la versión 2.0.0.33, el paquete para Android lo puedes descargar desde esta release: gsNotasNET.Android v2.0.0.33

En distintas entradas de este blog he ido publicando lo que cada una de las releases (versiones) hace.

A continuación te pondré unos enlaces a esas distintas versiones para que vayas viéndolas. Empezaré por la más reciente.

  1. Quien dice 32, dice 33: gsNotasNET.Android v2.0.0.33.

  2. gsNotasNET.Android release v2.0.0.32.

  3. Ya está lista la app gsNotasNET.Android v2.0.0.*. gsNotasNET.Android v2.0.0.28.

  4. gsNotasNET para Android con Xamarin.Forms. Con comentarios y demás para la versión v1.0.0.18 (video explicativo) y v1.0.0.17 (capturas).

  5. Todas estas versiones están basadas en un intento de hacer una aplicación similar a gsNotasNETF.

Sobre el uso de la aplicación para dispositivos móviles en iOS y UWP

Como digo en el proyecto de gsNotasNET.Android publicado en GitHub, por ahora la aplicación que usa la base de datos de SQL Server alojada en un servidor en la nube solo funciona (y está operativa al 100%) en dispostiivos Android, los proyectos para iOS (iPhone, iPad) y para UWP (Windows 10) no funcionan, el de iOS no he sido capaz de hacerlo funcionar ni siquiera usando Visual Studio 2019 para Mac, y el de Windows 10 (UWP) no lo he podido poner en funcionamiento de forma local en Windows 10 (al intentar probarlo en los emuladores, se quedaba colgado intentando lanzar el dispositivo emulado).

Así que, seguramente crearé un proyecto multiplataforma pero que solamente use las notas en la base local, a ver si es por el acceso a SQL Server por lo que no funciona.

De todo esto te iré informando.

¡Feliz Año 2021!

Un par de capturas de la versión v2.0.0.33

La pantalla principal de la versión v2.0.0.33: alt text

La pantalla Acerca de v2.0.0.33: alt text

Nos vemos.
Guillermo

Adiós Xamarin.Forms, bienvenido .NET MAUI

Pues eso… en el anuncio de Visual Studio 2022 (disponible en versiones preview a partir de este verano) se avisa de que .NET MAUI será la forma de crear aplicaciones para móviles y Web multiplataforma.

Si quieres puedes ver el código (e incluso instalarlo) de .NET MAUI usando el enlace que te he puesto antes, que te llevará al proyecto en GitHub.

Por ahora no lo he probado… pero lo probaré y seguramente te comentaré cosas sobre este nuevo entorno de desarrollo (en realidad no es un entorno, pero para que nos entendamos, ya que se utiliza desde Visual Studio).

Nos vemos.
Guillermo

Problemas con el Provisioning en las aplicaciones para iOS con Xamarin.Forms creadas con Visual Studio para Windows

Pues eso… Si estás haciendo una aplicación con Xamarin.Forms para iOS (de Apple) y quieres probar el código en un emulador o un dispositivo conectado a tu equipo, debes tener en cuenta que si estás desarrollando con Visual Studio para Mac todo irá bien, pero si estás usando Visual Studio para Windows, simplemente no te funcionará… salvo que antes te funcionase… ahora te lo explico 😉

Aclaro esto último:
Según me cuentan hay un problema con el provisioning (el que se indica en iOS Bundle Signing), es decir, autenticar tu cuenta de Apple Developer (*) con la aplicación, debido a que recientemente Apple ha realizado un cambio que provoca que se bloquee temporalmente las peticiones y se obtenga un error.

También según me cuentan: Es una issue con prioridad alta y están revisándolo.

Así que… esperemos que pronto esté solucionado.

Lo que comenté de salvo que antes te funcionase es porque (también según me cuentan): Si en el PC, previamente se ha utilizado Hot Restart con la cuenta, se tiene en caché lo necesario para evitar alguna petición y por ese motivo, te puede funcionar sin problemas.

 

Capturas de iOS Bundle Signing

Aquí te dejo un par de (o tres) capturas de la opción iOS Bundle Signing en las opciones del proyecto para iOS, tanto en Windows (que es donde da el error) como en un Mac (que no da error y funciona sin problemas).

Figura 1. La firma (autenticación) en Visual Studio para Mac funciona correctamente.

 

Figira 2. Fallo al autenticar con Visual Studio para Windows usando un dispositivo.

 

Figura 3. Fallo al autenticar con Visual Studio para Windows usando el emulador.

 

Y esto es todo, espero que te sea de utilidad.

Cuando esté solucionado intentaré poner una nota en este post de que así es… ¡espero no olvidarme! 😉

Nos vemos.
Guillermo

(*)
Para desarrollar (creo que incluso para probar) aplicaciones de Xamarin.Forms para iOS (Apple) debes tener creada una cuenta de Apple Developer, que a día de hoy cuesta 99€ al año. Esa cuenta se debe usar tanto en Windows como en Mac.

P.S.
Título en inglés:
Provisioning issues in iOS apps with Xamarin.Forms built with Visual Studio for Windows.

Solucionando problemas varios con Xamarin.Forms para UWP

Pues eso… a raíz de lo que te puse hace un rato (sobre GetExecutingAssembly) que al querer hacer la captura en el proyecto de prueba (Prueba Mobile) para UWP (Universal Windows Platform o Plataforma Universal de Windows), resulta que no me funcionaba… pero como la otra aplicación que estoy haciendo (Reservas Kayak Mobile) para kayakmaro.com si que iba la versión para UWP, pues hice ahí la captura.

La cuestión es que tenía 4 errores, uno de ellos decía algo así:
type universe cannot resolve assembly, concretamente señalaba a una de las DLL que utilizo en el proyecto que usan las versiones de Android, UWP e iOS (bueno, esta última no, ya que he desistido en crear proyectos para iOS porque ni usando un Mac de forma remota lo compila).

El error concreto es (sin indicar el nombre de la DLL ni resto de información):
Cannot resolve Assembly or Windows Metadata file ‘Type universe cannot resolve assembly:

El proyecto ese que te comento que vale para las distintas versiones de la aplciación es una DLL (biblioteca de clases de .NET Standard 2.0) de forma que se pueda usar en distintas plataformas.
Esa DLL la tienes que tener referenciada en cada proyecto (de cada plataforma) y así es como funciona esto con Xamarin.Forms.
En mi caso, la DLL de .NET Standard se llama Prueba Mobile y la aplicación para Android es: Prueba Mobile.Android, y sin necesidad de poner mucha imaginación sabrás que la de UWP se llama Prueba Mobile.UWP.

Ese proyecto (el de la DLL) tiene referencias a otros dos proyectos, también creados para .NET Standard 2.0, en estos dos casos, los he hecho con Visual Basic para utilizar (con algunos cambios en cierto código) el código que ya tenía hecho y que no era plan de volver a hacerlo de nuevo y en C#, que es el lenguaje que usan las aplicaciones de Xamarin.Forms.

Pues bien, el error ese de error type universe cannot resolve assembly me apuntaba a una de esas dos DLL que hace referencia la DLL principal (el nombre da lo mismo), y según parece, al no encontrar esa DLL generaba otros errores, concretamente que no podía copiar ciertos ficheros de la carpeta obj\x86\Debug porque no existían.
Y ahí se quedaba.

Los erores de que no podía copiar ficheros de la carpeta obj\x86\Debug eran:
Could not copy the file «obj\x86\Debug\MainPage.xbf» because it was not found.
Could not copy the file «obj\x86\Debug\App.xbf» because it was not found.
Could not copy the file «obj\x86\Debug\Prueba Mobile.UWP.xr.xml» because it was not found.

Así que… me pongo a buscar en internet y me encuentro con varios consejos (algunos copiados de otros previamente hallados, por lo que supongo que el que lo decía, ni lo había comprobado), pero esos consejos (o casi todos) hacían referencia a .NET Framework y «el target framework» o a hacer referencias a paquetes NuGet, pero no eran esos los casos… ya que dicha DLL ni está creada con .NET Framework ni está en un paquete de NuGet, aún así… lo intenté… pero sin resultados, al menos con lo de los paquetes NuGet, ya que lo del target framework, como que no… en fin…

Por probar, copié el proyecto para UWP del otro proyecto al de prueba (cambiando los espacios de nombres, etc.), pero tampoco.

Que si eliminar el directorio .vs, que si eliminar las carpetas obj y bin, pero nada de nada…

La solución

Al final decidí añadir una referencia en el proyecto para UWP (que en realidad no debería hacer falta) a la DLL que generaba ese error, y… ¡SOLUCIONADO!
¡MANDA COHONES!

Repasando los errores

Y para ser más concreto, he vuelto a poner todo como estaba antes de solucionarlo, con idea de poder hacer capturas y ponerte la descripción exacta de los errores.

En realidad lo que he tenido que hacer es quitar la referencia a la DLL y eliminar las carpetas obj y bin del proyecto para UWP.

Esta es la captura de los errores de Visual Studio (pincha en la imagen para agrandar):

Figura 1. Los errores en Visual Studio.

Y esta captura (figura 2) tiene el proyecto para UWP con la referencia (realmente no necesaria) a la DLL que no puede resolver, hecho esto… todo funciona bien.

Figura 2. Las propiedades del proyecto con la referencia a la DLL «fatídica».

Te he dicho antes que realmente no necesaria (añadir la referencia al proyecto UWP) porque en realidad ese proyecto no utiliza esa DLL, y si la utiliza es a través de la DLL Prueba Mobile, que como puedes ver en la figura 3 tiene su propia referencia a MKNDatos, ya que desde el proyecto Prueba Mobile sí que se utilizan las clases de MKNDatos.

Figura 3. Los proyectos referenciados en Prueba Mobile.

Lo que he buscado en la red (en Google)

Aquí tienes el enlace (unod e ellos) que he usado para hacer la búsqueda en Google:

https://www.google.es/search?q=type+universe+cannot+resolve+assembly

Aunque en la figura 1 no se ve, originalmente me dio el XamlCompiler error WMC106 e hice esta búsqueda:

XamlCompiler error WMC1006

Y esto es todo amigo. Espero que, como de costumbre, te sea de utilidad 😉

Nos vemos.
Guillermo

Mejorar el rendimiento al usar GetExecutingAssembly

Pues eso… ya te lo comenté hace unos meses, aunque estaba escondido en las novedades de gsNotasNET.Android v2.0.0.33, y era porque me daba error (sin avisar, para más señas) a la hora de usar la forma recomendada de usar Assembly.GetExecutingAssembly.

En esa ocasión me daba error la aplicación de Xamarin.Forms y sin saber porqué… Pero la he vuelto a probar y por ahora, al menos en el IDE de Visual Studio 2019 va bien.
De todas formas, ya sabes si usas lo que te voy a explicar aquí, y ves que la aplicación casca, ya sabes porqué es.

La documentación (en inglés) dice esto:

For performance reasons, you should call this method only when you do not know at design time what assembly is currently executing. The recommended way to retrieve an Assembly object that represents the current assembly is to use the Type.Assembly property of a type found in the assembly.

Que en el idioma actualizado de Cervantes viene a decir esto (según Google Translator):

Por motivos de rendimiento, debe llamar a este método solo cuando no sepa en tiempo de diseño qué ensamblado se está ejecutando actualmente. La forma recomendada de recuperar un objeto Ensamblado que representa el ensamblado actual es usar la propiedad Type.Assembly de un tipo que se encuentra en el ensamblado.

Aquí te voy a poner el código (tanto de Visual Basic como de C#) para usar esta forma recomendada de asignar un ensamblado (de la clase System.Reflection.Assembly).

Este código está en bibliotecas (proyectos del tipo Class Library) para usar con .NET Standard 2.0 (de esta forma los ensamblados se podrán usar tanto en .NET Core como en .NET Framework).

Ejemplo para C#

public static string VersionDLL()
{
    var ensamblado = typeof(AboutViewModel).Assembly;
    var fvi = FileVersionInfo.GetVersionInfo(ensamblado.Location);
    // FileDescription en realidad muestra (o eso parece) lo mismo de ProductName
    var s = $"{fvi.ProductName} v{fvi.ProductVersion} ({fvi.FileVersion})" + 
        $"\r\n{fvi.Comments}";

    return s;
}

Ejemplo para Visual Basic

Public Function VersionDLL() As String
    Dim ensamblado = GetType(DatosMostrar).Assembly
    Dim fvi = FileVersionInfo.GetVersionInfo(ensamblado.Location)
    ' FileDescription en realidad muestra (o eso parece) lo mismo de ProductName
    Dim s = $"{fvi.ProductName} v{fvi.ProductVersion} ({fvi.FileVersion})" &
        $"{vbCrLf}{fvi.Comments}"

    Return s
End Function

Ese código mostrará la versión del ensamblado, la versión del fichero y la descripción, aunque en realidad a la propiedad a la que tienes que acceder es a Comments, ya que FileDesciption muestra lo mismo que ProductName.

Y aquí tienes una captura para la aplicación de Android con los comentarios de las 3 bibliotecas que estoy usando, 2 de ellas escritas con Visual Basic y la tercera (la que le da funcionalidad visual a la aplicación está escrita en C#).

Figura 1. Captura en el emulador de Android.
Figura 1. Captura en el emulador de Android.

Y esta otra captura es de la aplicación en el emulador (local) de UWP (Universal Windows Platform) pero con la aplicación real. Aunque en modo depuración.

Figura 2. Captura en el (emulador) de UWP.
Figura 2. Captura en el (emulador) de UWP.

Espero que te sea de utilidad… Esa es siempre la idea…

Nos vemos.
Guillermo

P.S.
El puñetero Jetpack agrega código (de más) a las imágenes y cuando estas se muestran desde www.elguille.info, simplemente no se ven… pero… puedes pulsar en el sitio (en blanco) en el que está la imagen y te la mostrará…
Lo mismo quito el Jetpack, que, aparte del «bloque» Markdown y el poder publicar en twitter y mi sitio de facebook, no me sirve de mucho…

Quien dice 32, dice 33: gsNotasNET.Android v2.0.0.33

gsNotasNET.Android v2.0.0.33

Utilidad para dispositivos móviles Android para tomar notas y guardarlas localmente o en una base de datos externa.

En esta versión (v2.0.0.33) la utilidad/aplicación hace lo siguiente:

Permite crear notas y marcarlas con estos atributos/propiedades:

  • Indicar a qué grupo (tag/etiqueta) pertenece.

  • Se pueden crear tantos grupos como se deseen.

  • El programa recordará el último nombre de grupo utilizado al guardar una nota.

  • Se pueden ver los grupos que hay creados, mostrando la información de las notas que contiene.

  • Al mostrar los grupos se muestra la información de las notas que contiene.

  • (v2.0.0.32) Al seleccionar un grupo (clic o tap) te muestra la información de tallada de las notas que contiene, así como la lista de esas notas pertenecientes a ese grupo. Desde esa lista puedes editar las notas.

Atributos /Propiedades de cada nota:

  • Favorita, al mostrar las notas (de la base de datos externa) las notas favoritas se muestran al principio.

  • Notificar, las notas marcadas para notificar se pueden usar para que al hacer login se muestren automáticamente, ahí puedes anotar los recordatorios que necesites ver cada vez que inicias sesión.

  • Archivada, esto hará que la nota no se muestre al mostrar las notas activas.

  • Eliminada, es otra forma de ocultar las notas, ya que nunca se eliminan físicamente de la base de datos (tanto local como externa).

  • Sincronizada, esta propiedad indica si la nota está sincronizada entre las bases local y externa. Las notas siempre se sincronizan entre las dos bases de datos.

Para mostrar las notas hay varios apartados en el menú o pantalla principal, pudiendo mostrar las notas según el atributo o propiedad seleccionado.

  • En la lista de notas se muestra la siguiente información:

  • El título de la nota que consiste en los primeros 50 caracteres o si hay cambios de líneas en la nota, la primera línea.

  • El nombre del grupo, la fecha de modificación y una letra cn el nombre del atributo y si está marcado (True) o no lo está (False).

  • Las abreviaturas de los atributos son:

    Favorita, Notificar, Archivada y Eliminada.

  • En una nueva actualización añadiré Sincronizada, aunque se supone que siempre deben estar sincronizadas.

  • Seguramente también añadiré una página (opción) para mostrar las notas sincronizadas y poder asegurarte que si no está sincronizada, lo haga.

En la configuración puedes indicar:

  • Recordar el usuario con el que se ha hecho Login.
  • Recordar el password usado.
  • Iniciar la aplicación con el último usuario.
  • Mantener las notas sincronizadas (siempre está activada esta opción).
  • Mostrar las notas a Notificar al iniciar el programa (o hacer Login).
  • Usar las notas locales (cuando se activa) o usar las notas de la base externa.

En la información del Perfil te muestra los datos de la cuenta con la que has hecho Login.

  • Ahí puedes cambiar la cuenta de correo y el password.

  • Si cambias la cuenta de correo, se enviarán 2 mensajes, uno a cada cuenta pidiendo confirmación.

  • Te muestra la inforamción de la fecha de alta, último acceso, cuántas notas de la base externa puedes escribir:

  • Para los primeros 90 usuarios que se registren tienen una cuota de 1.000 notas, a partir del usuario 100 (los otros 10 los tengo reservados para mí) tendrán 100 notas como máximo de forma totalmente gratuita.

  • En esa cantidad, se cuentan todas las notas, estén o no eliminadas (ya que nunca se eliminan las notas).

  • El importe por cada 1.000 notas será de una donación anual de 12$ USD (unos 10€).

  • En esa cuota no se cuentan las notas ofrecidas gratuitamente.

  • El importe indicado en Pagos será el importe que hayas ido pagando.

  • Ya te digo que solamente debes pagar si quieres más cantidad de notas. La aplicación es totalmente gratuita. Salvo que prefieras hacer un donativo voluntario.

  • El donativo lo puedes hacer mediante este enlace: Donativo para elGuille.

  • Todos los donativos serán siempre bienvenidos 🙂

Puedes realizar búsquedas en las notas (tanto en la base local como en la externa).

  • La búsqueda se realiza sin tener en cuenta el case (no diferencia entre mayúsculas y minúsculas).

  • Por ahora solo hace la búsqueda en el Texto de las notas.

  • En una nueva actualización incluiré que se pueda hacer tanbién (o solo) en los nombres de los grupos).

  • En el resultado de la búsqueda puedes pulsar (hacer clic o tap) en la nota para editarla.

  • Aunque estés usando las notas de la base de datos remota (de SQL Server) puedes mostrar las notas de la base de datos loca, en este caso las notas no son editables, solo se muestran en la lista y haciendo tap o clic en ellas no se muestran. ??? Si quieres editar una nota local, debes cambiarlo en la configuración seleccionando la opción Usar las notas locales.

En la pantalla principal además te encontrarás con estas opciones:

  • Validar Email. Esto tendrás que usarlo cuando te registres con un nuevo usuario. O al crear un nuevo usuario.

  • Sincronizar. Esta opción te sirve para comprobar si las notas están sincronizadas (deberían estarlo), pero en caso de que no lo estuvieran, puedes sincronizar las locales al romoto o al revés.

  • Comentarios. Por si quieres enviarme alguna sugerencia, bug o cualquier cosa que me quieras decir. Esta opción te permite indicar un comentario y al pulsar en el botón de ENVIAR… abrirá una cuenta de email que tengas configurada en tu dispositivo para poder enviar el mensaje. El texto que hayas escritor aparecerá en el cuerpo del mensaje.

  • Acerca de Abre una ventana con un poco de ayuda sobre la aplicación. Seguramente añadiré un enlace a esta página descriptiva, ya que tanto texto no se puede poner en ese tipo de páginas… o al menos no se vería bien.

  • Cambiar de usuario. Desde ahí puedes hacer login, si no lo has hecho ya, o bien poder registrar un nuevo usuario.

  • Con esta última actualización, tanto en la ventana principal (Menú) como en la de Acerca de se comprueba si hay una nueva versión y de ser así, se indica de ese hecho, De esta forma puedes estar avisado y te puedes descargar el paquete de instalación.

NOTA: Esta release (recuerda que las releases o paquetes de instalación) siempre son versiones Release no versiones Debug. Y en esta he tenido que hacer 9 comprobaciones en el dispositivo físico ya que me daba error al comprobar si había una nueva versión. En modo debug funcionaba bien, pero en la release daba error. Y todo era por hacer caso a los tips de la documentación de .NET, y es que para esa comprobación uso el ensamblado que se está ejecutando y yo siempre usaba (y seguiré usando, al menos en las versiones para móviles) este código para obtener el ensamblado:

var ensamblado = System.Reflection.Assembly.GetExecutingAssembly();

La documentación dice esto:

Remarks For performance reasons, you should call this method only when you do not know at design time what assembly is currently executing. The recommended way to retrieve an Assembly object that represents the current assembly is to use the Type.Assembly property of a type found in the assembly, as the following example illustrates.

using System;
using System.Reflection;

public class Example
{
   public static void Main()
   {
      Assembly assem = typeof(Example).Assembly;
      Console.WriteLine("Assembly name: {0}", assem.FullName);
   }
}
// The example displays output like the following:
//    Assembly name: Assembly1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

Pero al usar un código parecido, tal como este:

System.Reflection.Assembly ensamblado = typeof(AcercaDegsNotasNET).Assembly;

Da error y, sin nada de descripción, solo el nombre del ensamblado desde donde se ha llamado. Y lo curioso es eso, que no pod´çia saber porqué fallaba la aplicación, salvo después de ¡10 intentos! (y porque me imaginaba por dónde iban los tiros), en fin…

En todas (o casi todas) existe un botón POLÍTICA DE PRIVACIDAD que al pulsarlo te muestra (en el navegador) la política de privacidad, es decir, qué datos personales se recogen.

Ahora muestra el contenido de elguillemola.com: Política de privacidad en elguillemola.com pero seguramente lo cambiaré a una que sea específica de esta aplicación.

De todas formas, comentarte que con los datos que facilitas o las notas que escribe yo no hago nada, ni cambairé nada, salvo que tú me lo pidas expresamente, bien porque no tengas acceso o cualquier otra circunstancia que te impida acceder a las notas o tu cuenta de usuario.

Bueno y creo que esto es todo…

He escrito tanto con idea de crear una página en elguillemola.com y así poder usarla como ayuda de la aplicación.

También crearé un video explicativo con las cosas que debes saber sobre la aplicación.

Si has llegado leyendo hasta aquí… ¡muchas gracias! 🙂

Y como estamos en las fechas que estamos (30 de diciembre de 2020) te deseo ¡FELICES FIESTAS!

Guillermo

 

Galería de fotos / capturas de la versión 2.0.0.33

De la versión 2..33 solo hay dos que muestra la «nota» de comprobación de si hay una nueva versión, el resto son de las versiones v2.0.0.31 y v2.0.0.32

 

Nota:

Pulsa en la foto que quieras ver con más detalle para que se muestre a tamaño real.

Puedes descargar el "paquete" de instalación desde GitHub:

Este enlace es para la versión v2.0.0.33.

Este otro es para la versión v2.0.0.32 (si no te funciona el enlace es que lo has pulsado antes de que yo lo haya publicado 😉 )

 

Nos vemos.
Guillermo