Tutorial 4 - Actualizar tu aplicación¶
En el último tutorial, empaquetamos nuestra aplicación como una aplicación nativa. Si estás tratando con una aplicación del mundo real, eso no va a ser el final de la historia —es probable que hagas algunas pruebas, descubras problemas, y necesites hacer algunos cambios. Incluso si tu aplicación es perfecta, con el tiempo querrás publicar la versión 2 de tu aplicación con mejoras.
Por tanto, ¿cómo se actualiza la aplicación instalada cuando se realizan cambios en el código?
Actualización del código de la aplicación¶
Actualmente, nuestra aplicación declara por la consola cuando se pulsa el botón. Sin embargo, las aplicaciones IGU realmente no utilizarían la consola para la salida. Necesitan usar diálogos para comunicarse con los usuarios.
Añadamos un cuadro de diálogo para decir hola, en lugar de escribir en la
consola. Modifica el callback say_hello tal que aparezca así:
async def say_hello(self, widget):
await self.main_window.dialog(
toga.InfoDialog(
f"Hola, {self.name_input.value}",
"¡Hola!",
)
)
Necesitamos hacer el método async para que cuando exhibimos el diálogo, el
resto de la aplicación continúe ejecutándose. No te preocupes demasiado por este
detalle ahora mismo —daremos una explicación más detallada en el Tutorial
8.
Esto indica a Toga que abra un cuadro de diálogo modal cuando se pulse el botón.
Si ejecutas briefcase dev, introduces un nombre y pulsas el botón, verás el
cuadro de diálogo nuevo:
(../images/macOS/tutorial-4.png)Diálogo del Tutorial Hello World 4, en macOS
/// subtítulo
///
Diálogo Tutorial Hola Mundo 4, en Linux
/// subtítulo
///
Diálogo Hello World Tutorial 4, en Windows
/// subtítulo
///
Sin embargo, si ejecutas briefcase run, el cuadro de diálogo no aparecerá.
¿Por qué? Bueno, briefcase dev opera ejecutando tu código en su lugar —intenta
producir un entorno de ejecución lo más realista posible para tu código, pero no
proporciona ni utiliza ninguna de las infraestructuras de la plataforma para
empaquetar tu código como una aplicación. Parte del proceso de empaquetar tu
aplicación implica copiar tu código dentro del paquete de la aplicación —y por
el momento, tu aplicación todavía tiene el código antiguo.
Así que —necesitamos decirle a briefcase que actualice tu aplicación, copiando la nueva versión del código. Podríamos hacerlo borrando el directorio antiguo de la plataforma y empezando desde cero. Sin embargo, Briefcase proporciona una manera más fácil —puedes actualizar el código de su aplicación empaquetada existente:
(beeware-venv) $ briefcase update
[helloworld] Actualizando el código de la aplicación...
Instalando src/helloworld... hecho
[helloworld] Eliminando contenido innecesario de la aplicación...
Eliminando contenido innecesario del paquete de la aplicación... hecho
[helloworld] Aplicación actualizada.
(beeware-venv) $ briefcase update
[helloworld] Finalizando la configuración de la aplicación...
Seleccionando ubuntu:jammy (base Debian del proveedor)
Determinando la versión de glibc... hecho
Seleccionando glibc 2.35
Seleccionando Python 3.10
[helloworld] Actualizando el código de la aplicación...
Instalando src/helloworld... hecho
[helloworld] Eliminando contenido innecesario de la aplicación...
Eliminando contenido innecesario del paquete de la aplicación... hecho
[helloworld] Aplicación actualizada.
(beeware-venv) C:\...>briefcase update
[helloworld] Actualizando el código de la aplicación...
Instalando src/helloworld... hecho
[helloworld] Eliminando contenido innecesario de la aplicación...
Eliminando contenido innecesario del paquete de la aplicación... hecho
[helloworld] Aplicación actualizada.
Si Briefcase no puede encontrar la plantilla de andamiaje, invocará
automáticamente create para generar un andamiaje nuevo.
Ahora que hemos actualizado el código del instalador, podemos ejecutar
briefcase build para volver a compilar la aplicación, briefcase run para
ejecutar la aplicación actualizada, y briefcase package para volver a
empaquetar la aplicación para su distribución.
Nota
A los usuarios de macOS, recordad que como se indica en Tutorial
3, para el tutorial recomendamos ejecutar briefcase package
con el indicador --adhoc-sign para evitar la complejidad de configurar una
identidad de firma de código y mantener el tutorial lo más simple posible.
Actualizar y ejecutar en un solo paso¶
Si estás iterando rápidamente cambios en el código, es probable que quieras
hacer un cambio en el código, actualizar la aplicación, y volver a ejecutar
inmediatamente tu aplicación. Para la mayoría de los propósitos, el modo
desarrollador (briefcase dev) será la forma más fácil de hacer este tipo de
iteración rápida; sin embargo, si estás probando algo sobre cómo se ejecuta tu
aplicación como un binario nativo, o buscando un defecto que sólo se manifiesta
cuando tu aplicación está empaquetada, puede que necesites usar repetidas
invocaciones a briefcase run. Para simplificar el proceso de actualización y
ejecución de la aplicación empaquetada, Briefcase tiene un atajo para soportar
este patrón de uso —la opción -u (o --update) en el comando run.
Intentemos hacer otro cambio. Puedes haber notado que si no escribe un nombre en
el cuadro de entrada de texto, el diálogo dirá “Hola, ”. Vamos a modificar la
función say_hello de nuevo para manejar este caso extremo.
En la parte superior del archivo, entre las importaciones y la definición de la
clase class HelloWorld, añade un método de utilidad para generar un saludo
apropiado dependiendo del valor del nombre que se haya proporcionado:
def saludo(nombre):
if nombre:
return f"Hola, {nombre}"
else:
return "Hola, desconocido"
A continuación, modifica la invocación de retorno say_hello para utilizar este
método nuevo de utilidad:
async def say_hello(self, widget):
await self.main_window.dialog(
toga.InfoDialog(
greeting(self.name_input.value),
"¡Hola!",
)
)
Ejecuta tu aplicación en modo desarrollo (con briefcase dev) para confirmar
que funciona la lógica nueva; después actualiza, compila y ejecuta la aplicación
con un solo comando:
(beeware-venv) $ briefcase run -u
[helloworld] Actualizando el código de la aplicación...
Instalando src/helloworld... hecho
[helloworld] Eliminando contenido innecesario de la aplicación...
Eliminando contenido innecesario del paquete de la aplicación... hecho
[helloworld] Aplicación actualizada.
[helloworld] Compilando la aplicación...
...
[helloworld] Compilado build/helloworld/macos/app/Hello World.app
[helloworld] Iniciando la aplicación...
(beeware-venv) $ briefcase run -u
[helloworld] Finalizando la configuración de la aplicación...
Seleccionando ubuntu:jammy (base Debian del proveedor)
Determinando la versión de glibc... hecho
Seleccionando glibc 2.35
Seleccionando Python 3.10
[helloworld] Actualizando el código de la aplicación...
Instalando src/helloworld... hecho
[helloworld] Eliminando contenido innecesario de la aplicación...
Eliminando contenido innecesario del paquete de la aplicación... hecho
[helloworld] Aplicación actualizada.
[helloworld] Compilando la aplicación...
...
[helloworld] Compilado build/helloworld/linux/ubuntu/jammy/helloworld-0.0.1/usr/bin/helloworld
[helloworld] Iniciando la aplicación...
(beeware-venv) C:\...>briefcase run -u
[helloworld] Actualizando el código de la aplicación...
Instalando src/helloworld... hecho
[helloworld] Eliminando contenido innecesario de la aplicación...
Eliminando contenido innecesario del paquete de la aplicación... hecho
[helloworld] Aplicación actualizada.
[helloworld] Iniciando la aplicación...
El comando package también acepta el argumento -u, de modo que si realizas un
cambio en el código de tu aplicación y quieres volver a empaquetarlo
inmediatamente, puedes ejecutar briefcase package -u.
Siguientes pasos¶
Ahora tenemos nuestra aplicación empaquetada para su distribución en plataformas de escritorio, y hemos podido actualizar el código de nuestra aplicación.
Pero ¿qué pasa con los móviles? En el Tutorial 5, convertiremos nuestra aplicación en una aplicación móvil, y la desplegaremos en un simulador de dispositivo, y en un teléfono.