AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Ayuda / Desarrollar para iOS (iPhone/iPad)
  • Presentación
  • Crear un proyecto Catalyst con WINDEV Mobile
  • Desarrollar una aplicación Catalyst con WINDEV Mobile
  • Funciones específicas para el modo asíncrono
  • Ejemplo simple de adaptación de código en modo asíncrono
  • Ejemplo complejo de adaptación de código en modo asíncrono
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Presentación
Apple lanzó recientemente un SDK para compilar aplicaciones iOS para MacOS de forma nativa. WINDEV Mobile ha evolucionado para permitirle aprovechar estas nuevas funcionalidades.
Una aplicación Catalyst se desarrolla en varias etapas:
Esta página de ayuda presenta las etapas para crear y desarrollar un proyecto MacOS. El proyecto se genera y compila de la misma manera que una aplicación estándar de iOS.
Crear un proyecto Catalyst con WINDEV Mobile
Para crear un proyecto que pueda ser compilado para MacOS con WINDEV Mobile:
  1. Cree un proyecto para iOS (para obtener más información, consulte Desarrollar una aplicación para iPhone/iPad).
  2. Abra la ventana de descripción de la configuración actual: en la pestaña "Proyecto", en el grupo "Configuración del proyecto", haga clic en "Configuración actual".
  3. En la pestaña "General", seleccione la opción "Permitir que la aplicación se ejecute en macOS Catalina o posterior (Mac Catalyst)".
  4. Valide.
Desarrollar una aplicación Catalyst con WINDEV Mobile
Una aplicación que puede ser compilada para MacOS se desarrolla de manera similar a una aplicación estándar. Sin embargo, aparecen nuevas limitaciones.
La principal limitación es la desaparición del modo síncrono.
La aplicación no tiene permisos para bloquear la interfaz del usuario:
  • no hay procesos largos en el subproceso principal,
  • no hay mensajes de información o de errores,
  • ...

Funciones específicas para el modo asíncrono

WLanguage propone funciones específicas para mostrar información al usuario:
ConfirmAsynchronousMuestra un mensaje no bloqueante en un cuadro de diálogo estándar con las respuestas "Sí", "No", "Cancelar" y llama a un procedimiento WLanguage con la respuesta del usuario.
DialogAsynchronousMuestra un cuadro de mensaje no bloqueante y llama a un procedimiento WLanguage con el valor del botón pulsado por el usuario.
ErrorAsynchronousMuestra un mensaje de error personalizado en una ventana de error del sistema no bloqueante.
ErrorWithTimeoutAsynchronousMuestra un mensaje de error personalizado en una ventana de error del sistema no bloqueante durante un tiempo determinado.
InfoAsynchronousMuestra un mensaje personalizado no bloqueante en una ventana de información del sistema.
InfoWithTimeoutAsynchronousMuestra un mensaje personalizado en una ventana de información del sistema no bloqueante durante un tiempo determinado.
OKCancelAsynchronousMuestra un mensaje en un cuadro de diálogo estándar no bloqueante que propone las respuestas "OK" y "Cancelar" y llama a un procedimiento WLanguage con la respuesta del usuario.
WarningAsynchronousMuestra un mensaje personalizado en una ventana de advertencia del sistema no bloqueante.
YesNoAsynchronousMuestra un mensaje en un cuadro de diálogo estándar no bloqueante con las respuestas "Sí" y "No" y llama a un procedimiento WLanguage con la respuesta del usuario.
Como su nombre lo indica, estas funciones son asíncronas: no bloquean el código. Por lo tanto, el código que sigue a estas funciones se ejecuta directamente, aunque el usuario no haya validado el cuadro de información.
Esto significa que es necesario adaptar el código para obtener un comportamiento consistente.
Por ejemplo, las funciones ErrorAsynchronous y InfoAsynchronous esperan dos parámetros:
  • el texto a mostrar (a diferencia de las funciones Error e Info, este texto debe ser una sola cadena),
  • un procedimiento al que se llamará cuando el usuario valide el mensaje.

Ejemplo simple de adaptación de código en modo asíncrono

Para entender cómo adaptar el código en modo asíncrono, veamos un caso simple de verificación de entrada:
// Checks the name
IF EDT_Name ~= "" THEN
// Displays a message to the user
Error("You must enter a name")
// Force input in the control
SetFocus(EDT_Name)
// Stop the code
RETURN
END
En el modo asíncrono, se deberá adaptar este código de la siguiente manera:
// Checks the name
IF EDT_Name ~= "" THEN
// Displays a message to the user
// The cbErrorName procedure will be run when the error is validated
ErrorAsynchronous("You must enter a name", cbErrorName)
// Stop the code
RETURN
END
 
INTERNAL PROCEDURE cbErrorName()
// Set focus on the control
SetFocus(sControlName)
END
Observación: para un código más conciso, se pueden utilizar procedimientos Lambda en lugar de procedimientos internos.
// Checks the name
IF EDT_Name ~= "" THEN
// Displays a message to the user
// SetFocus will be run when the error is validated
ErrorAsynchronous("You must enter a name.",
() => { SetFocus(EDT_Name) } )
// Stop the code
RETURN
END

Ejemplo complejo de adaptación de código en modo asíncrono

En un control Looper, se puede definir que el gesto de eliminación se gestione automáticamente:
  1. Vaya a la pestaña "Detalles" de la ventana de descripción del control.
  2. En la opción "Deslizar una fila", seleccione "Eliminación automática".
  3. Valide. Los siguientes eventos se asocian al control automáticamente: "Antes de eliminar automáticamente una fila", "Después de eliminar automáticamente una fila", "Deslizamiento de una fila".
En el evento "Antes de eliminar automáticamente una fila", se puede cancelar la eliminación de la fila, por ejemplo después de solicitar una confirmación del usuario.
Utilice la instrucción "RETURN False" para anular el evento.
El siguiente código muestra un ejemplo en el evento "Antes de eliminar automáticamente una fila":
// Asks confirmation to the user
IF YesNo("Delete contact?") = Yes THEN
// Deletes the row
RETURN True
END
 
// Cancel deletion
RESULT False
En el modo asíncrono, se deberá adaptar este código utilizando la función WLanguage asíncrona correspondiente. Dado que la confirmación no es bloqueante, se puede cancelar la eliminación de forma predeterminada.
La eliminación se tiene en cuenta realmente cuando el usuario responde al cuadro de diálogo.
// Asks confirmation to the user
YesNoAsynchronous ("Delete contact?", _cbDeletion)
// Cancel deletion: // the deletion will only be done if the user selects "Yes"
RESULT False
 
INTERNAL PROCEDURE _cbDeletion(nResponse)
// If the user selects "Yes"
IF nResponse = Yes THEN
// Delete the desired row
LooperDelete(LOOP_Contacts)
  END
END
Una vez que se desarrolla la aplicación para MacOS, se debe generar la aplicación para iOS y, al igual que las aplicaciones iOS, se debe pasar a un Mac para compilar el proyecto Xcode:
  1. Haga clic en en los botones de acceso rápido.
  2. Si es necesario, seleccione la primera ventana que aparece en las diferentes plataformas (iPhone, iPad y Apple Watch).
  3. El asistente de generación se abre. Para obtener más información sobre la generación de proyectos en Xcode, consulte Generación de la aplicación.
Versión mínima requerida
  • Versión 25
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 08/06/2023

Señalar un error o enviar una sugerencia | Ayuda local