[Xojo] Hilo general: Windows, macOS, Linux, iOS, Android y Web

PiradoIV

He abierto varios hilos en el pasado sobre frameworks, tanto para Web como para crear Juegos. Aquí va uno especial, porque ahora le dedico el 100% de mi tiempo a este proyecto. Iré ampliando el post con las dudas que vayan surgiendo en los comentarios.

Xojo

Xojo es una herramienta RAD comercial para crear aplicaciones nativas en todas las plataformas habituales, además de poder crear aplicaciones web, tipo SPA. Se le conoce como Xojo al IDE, al lenguaje de programación y al propio framework que incluye.

Lo descubrí en 2018, gracias a un mediavidero. Tanto me gustó, que acabé trabajando para esta empresa, en el framework Web, desde 2022 hasta hoy :)

Aunque inicialmente surgió como un dialecto de Basic, se ha desligado y ha evolucionado por su cuenta a lo largo de más de 20 años (su nombre original era RealBasic). La programación es 100% Orientada a Objetos.

Tienes varios tipos de proyecto:

  • Escritorio (Windows, macOS, Linux)
  • iOS
  • Android
  • Web (Tanto para aplicaciones tipo SPA, como para montarte una API)
  • Consola (Para aplicaciones de linea de comandos)

Salvo en consola, todo el diseño de la interfaz gráfica se hace de manera visual, colocando los controles en el panel de diseño.

Todos los tipos de proyecto funcionan más o menos igual. Hay particularidades, por ejemplo en iOS tendrás una pantalla especial "LaunchScreen", que es la que se ve al abrir la app en el móvil.

La manera de trabajar es poner controles en la pantalla y luego implementas los eventos que quieras manejar.

Este es un ejemplo de una ventana con un botón:

Estos son eventos que puedes implementar en ese control, yo voy a implementar en "Pressed":

Y dentro de ese evento, escribes el código que quieres que se ejecute, cuando el usuario pulse el botón:

Si te fijas en la última captura de pantalla, nada más que ves una linea de código. En Xojo no se trabaja con diferentes ficheros. Todas las clases, sus métodos, propiedades y eventos, se ven en el navegador del proyecto. Para editar un método concreto, buscas en el árbol y editas el código ahí mismo.

Esta manera de trabajar es común a todos los tipos de proyectos, ya sea escritorio, móvil o web.

Aplicaciones de escritorio

Las aplicaciones que se crean con Xojo son 100% nativas en cada plataforma, por lo que soportan cosas como modo oscuro, auto-completado, o las opciones de accesibilidad. En Linux se usa GTK, mientras que en macOS se usa Cocoa. Cuando Xojo migre los controles a controles XAML, para las aplicaciones de Windows, no tendrás que hacer nada, todo de manera transparente para ti, como desarrollador.

Soporta 32-bit y 64-bit, tanto en x86 como en ARM. Por lo que puedes crear aplicaciones nativas para Raspberry Pi 5, por ejemplo.

Cuando tienes la aplicación lista, desde el propio IDE puedes marcar las plataformas para las que quieres compilar, le das al botón "Build" y... listo. Se te creará un directorio con la aplicación compilada, para cada sistema operativo que hayas elegido.

Algunos ejemplos de apps creadas desarrolladas usando Xojo son PubCoder, para crear eBooks, o EverWeb, para crear sitios web.

Aplicaciones móviles y tablets

Ahora mismo está dividido en dos tipos de proyecto diferentes, iOS y Android, la idea es que se unan más adelante, como en los proyectos de Escritorio.

La particularidad de iOS es que se usa "Auto-Layout" para el posicionamiento de los controles.

De resto, funciona igual. Añadiendo el código para los eventos que quieras controlar.

Android se ha unido a la familia de proyectos de Xojo hace poco.

Si quieres ver una aplicación muy chula que ha lanzado este año uno de los usuarios de Xojo, busca "Photo Tape" en la App Store de iOS.

Aplicaciones web

Con Xojo también se pueden hacer aplicaciones Web. Funciona como una SPA. Al funcionar como una SPA y no indexarse bien en buscadores, el caso de uso de una aplicación Web hecha en Xojo serían aplicaciones que están detrás de un login.

Por ejemplo, una Intranet, una aplicación tipo SaaS, aplicaciones para controlar una Raspberry Pi de manera remota o cosas similares son un buen caso de uso. Si quieres montar un Idealista o un MilAnuncios, que dependen mucho del posicionamiento web, pues no.

Eso sí, incluso para este tipo de webs se pueden crear aplicaciones internas en Xojo para la gestión y el mantenimiento.

Aquí el límite entre "frontend" y "backend" es difuso, porque en Xojo lo puede hacer todo la misma persona desde el propio IDE. Siguiendo con el ejemplo que has visto más arriba, en el que pones un botón y se muestra un mensaje al pulsarlo. Tu código siempre se ejecuta en el servidor y es Xojo quien se encarga de actualizar el navegador.

Se pueden crear controles más avanzados combinando controles con un "contenedor". Por ejemplo, puedes crear los típicos botones de navegación combinando una imagen (WebImageViewer) con una etiqueta de texto (WebLabel).

Si quieres crear controles personalizados, ya sea desde cero, integrando una biblioteca de terceros, o usando un Web Component, hay un SDK que hace de puente usando JavaScript o TypeScript.

También puedes obviar toda la parte gráfica y simplemente montarte una API REST.

Al ejecutar la aplicación que has compilado, se expone un puerto TCP y ya puedes acceder desde el navegador.

Pero la manera más normal de desplegar las aplicaciones web en producción es lanzando varias instancias, usando algún Service Manager y que se balancee la carga detrás de NGINX o Apache. Si lo prefieres, también puedes meterlas en contenedores y usar Docker Compose, Nomad, Kubernetes y demás.

Si no te quieres complicar la vida, Xojo ofrece su propio servicio de managed hosting, con soporte técnico (Xojo Cloud). Y si prefieres hostearla tú pero sin tener que pelearte con NGINX, hay un usuario de Xojo que ha creado una aplicación de escritorio para gestionar servidores de Linux, que se llama Lifeboat.

Depuración remota

En todos los tipos de proyecto puedes depurar código. Pones tu punto de interrupción y, si la ejecución pasa por ese punto o si el programa encuentra una excepción, podrás depurar tu aplicación. Hasta ahí, todo normal, nada nuevo.

Ahora bien, puedes desarrollar una aplicación desde la comodidad de tu Mac o Windows, por ejemplo, y lanzar una sesión de depuración remota en una Raspberry Pi Zero 2, que no es muy potente. En ese caso, no hace falta instalar todo el IDE en la Raspberry Pi. Lo único que tienes que hacer es abrir una aplicación, que se incluye entre las herramientas de Xojo, en la Raspberry Pi. Luego, en tu IDE, le pones la IP y le pides que ejecute tu proyecto en ese dispositivo.

El mismo proceso funciona si estás ejecutando otro sistema operativo en una máquina virtual.

Licencia

Aunque es un producto comercial, desde este año se pueden compilar aplicaciones de escritorio, para Linux, de manera gratuita. De resto, se pueden usar todas las opciones del IDE sin necesidad de una licencia, incluyendo ejecutar las aplicaciones desde el propio IDE, o incluso la depuración remota.

Una vez que quieras distribuir la aplicación, toca pasar por caja (salvo en Linux). Hay diferentes licencias que van desde $99 (Desktop Lite) a $799 (la Pro, con la que puedes compilar cualquier tipo de proyecto). A lo largo del año se suelen sacar promociones y descuentos del 20%.

Con tu licencia puedes hacer la cantidad de aplicaciones que quieras, sin límite de usuarios, ni de ningún otro tipo.

La licencia te incluye un año de actualizaciones. Una vez que expira, puedes seguir usando esas versiones indefinidamente sin tener que renovar. Si la licencia ha expirado y quieres versiones nuevas, es ahí cuando te tocará renovar.

Recursos

Recopilación de dudas y preguntas

No hay ninguna de momento. Dispara.

11
Jastro

Buenas!

Como siempre gran curro, siempre te veo comentar sobre Xojo y aunque personalmente, no me llama la atencion esta guay saber que existe. Lo de la depuracion remota es lo que mas me llama la atencion la verdad, me echa para atras lo de tener que pagar, igual le doy un tiento para ver que tal la experiencia e igual me soprende

asi a ojo, sin mirarlo mucho me da cierto recuerdos a windows forms xD

1
PiradoIV

Yo estuve usando Xojo, sin pagar por la licencia, durante un año o así. Simplemente por aprender y ver qué ofrece. Luego estuve un par de años pagando la licencia para sacar un par de apps de escritorio que quería lanzar. En aquella época tenía que programar cosas con Vue... y era bastante relajante abrir el IDE y ver la ventanita de carga.

Es súper cómodo lo de la depuración en remoto, no tienes que andar pasando el ejecutable a mano de un ordenador a otro.

Ni idea de Windows Forms, no toco Windows desde que jugaba al Counter-Strike, salvo para probar alguna cosilla en la máquina virtual.

Para hacer juegos no lo he probado mucho... y no merece la pena teniendo cosas como Godot y Unity. No hay un framework específico de juegos (aunque sí que hay bibliotecas de Box2D y cosas así).

Pero de usarlo, sería utilizando un Canvas (o varios) y pintando ahí dentro. Lo guay es que es súper fácil reutilizar cosas. Si extiendes un Canvas que sea un mini-mapa para un juego, por ejemplo, pues ya está, te lo llevas al otro proyecto y es muy raro que se rompa, incluso usando versiones diferentes de Xojo.

Normal lo que comentas sobre la licencia, es una barrera de entrada, pero vamos, que se recupera rápido si vas a sacar una app comercial.

1 respuesta
Jastro

#3 tengo varias ideas en el tintero, pero estoy muy mal acostumbrado a que todo lo saco rapido con lo que estoy habituado, ademas que los rollos como estos estilo graficos me generan cierto rollo que no me mola, me gusta mas ver full code xD

Igualmente voy a darle un tiento y ver si me gusta, dudo que haga nada comercial, pero me parece interesante ir probando diferentes cosas y ver que tal

1
Dr_Manhattan

Gran hilo, muy detallado, lo voy a probar porque uso Linux XD. Este finde acabo los exámenes y a cacharrear.

Muchas gracias, igual te pregunto cosillas

1 1 respuesta
Jastro

#1 Estuve probando, algo muy chorra

Un boton, que activa un timer y empieza a contar, cambia el texto del boton, le das y lo detiene en el segundo que está

Cosas que no me gustan:

If (btn_start_count.Caption = "Iniciar") then
  time_count.RunMode = Timer.RunModes.Multiple
  btn_start_count.Caption = "Parar"
Else
  time_count.RunMode = Timer.RunModes.Off
  btn_start_count.Caption = "Iniciar"
End If
  • Me duele usar then, en vez {, lo mismo con el igual xD
  • No veo manera de organizar mi zona de curro, me parece un coñazo tener que hacer click en inspector o library cada vez que quiero hacer algo (igual soy yo que estoy ciego).

Sinceramente, es como volver a la FP cuando tenia que trabajar con windows forms, es literal esto, la misma mecanica. Solo que alli usaban C# (creo) ya no me acuerdo.

No es el tipo de software que me gusta para desarrollar, aborreci mucho WF. Igualmente, prometo en algun momento darle en mas profundidad

Mi super "APP"

2 respuestas
aren-pulid0

#6 es parecido también al constructor de UI's que traía el Netbeans para Java pero Xojo está vitaminado x1000, tiene pinta de ser una herramienta muy buena para sacar apps a punta pala, lo único malo que le veo es lo de que las apps Android/iOS vayan por separado, por lo demás si le coges maestría y quieres sacar proyectos para hacer pasta y empezar un negocio real es una buena opción.

2 respuestas
PiradoIV

#6 ¡Gracias por probarlo!

Es raro llegar a escribir un Then a mano. Shift + Enter te auto-completa todo el bloque.

Y bueno, como con todo, conociendo el framework, llegarías a este código que hace lo mismo:

time_count.Enabled = Not time_count.Enabled
btn_start_count.Caption = If(time_count.Enabled, "Parar", "Iniciar")
1 respuesta
PiradoIV

#5 ¡Genial! por aquí andamos si tienes cualquier duda.

#7 Sí, tal cual, es perfecto para los one-man-army. Por ejemplo, hay una empresa automovilística europea que gestiona todos los envíos de las partes con Xojo... y el equipo son básicamente dos personas xD

Lo de que iOS y Android estén por separado, sip, el plan es juntarlos más adelante y dejarlo como los proyectos de escritorio.

Jastro

#7 no conozco el constructor de UI's de Netbeans, pero ya te digo, literal es WF, solo que WF esa solo Desktop y Xojo es multiplataformas, os enseño imagen xD

#8 A ver imagino, es el primer acercamiento y por probar algo rapido, igualmente no esta mal, para web / desktop no se si lo usaria, pero a lo mejor para movil, si tuviera alguna idea que me interesara desarrollar, seguramente si que lo usaria como una opcion para desarrollar.

btw Curiosa forma de usar el ternario xD

1
PiradoIV

Para desktop o web, que lo tienes más o menos descartado de entrada, piensa también en apps que te faciliten la vida a la hora de programar en otras cosas.

Por ejemplo, di que usas Unreal/Unity/Godot para el juego. Puedes hacerte una app en Xojo para gestionar las cinemáticas (o cualquier otra cosa) y luego exportarlo en un JSON o CSV que puedas leer en el motor del juego.

O para crear un sitio web con Jekyll o Hugo, puedes gestionarlo con una app hecha en Xojo que luego genere los .md para el motor de sitios estáticos que uses.

Para ese tipo de herramientas Xojo va genial. Además, si no es una app que vayas a distribuir, nunca te va a hacer falta una licencia. Puedes lanzarla desde el IDE gratis.

Un ejemplo real, WebStyler:

Eso es una herramienta interna que uso para generar estilos de Bootstrap, sin tener que tocar _variables.scss.

1 respuesta
Jastro

#11

mente galaxia total

1
Zh3RoX

Trabajo con algo parecido, también es un framework con su "IDE" gráfico, solo que está ultra deprecated porque es del año de la pera, le faltan muchas features y no se programa con un lenguaje nativo sino con Javascript.

Este parece mucho más completo e intuitivo. Buen hilo.

1 1 respuesta
PiradoIV

#13 Pues nada, a migrarlo a Xojo xD ¿Cómo se llama?

1 1 respuesta
Zh3RoX

#14 Se llama Tibco General Interface.

Si por mi fuera le prendía fuego a todo el proyecto, es legacy y para migrar eso necesitas un equipo grande y un par de años de trabajo, porque es un parche enorme.

1 respuesta
PiradoIV

#15 No lo conocía, gracias

1
eondev

La alternativa BASIC a Embarcadero RAD studio. Qué ofrece esto que no tenga ya el de Embarcadero?

1 respuesta
PiradoIV

Un IDE que funciona en Windows, macOS y Linux :P

PiradoIV

Si ya tiras de Delphi, seguramente llevas usándolo tanto tiempo que no vas a cambiar a otra cosa. Por costes de licencia, si acaso.

Dr_Manhattan

Mañana acabo los exámenes Pirado15 y ya tengo en mente lo que quiero hacer.

1
Jastro

#17 buah, de los primeras cosas que hice fue con delphi, good old times

2
Dr_Manhattan

Amego pirado ¿por qué si tengo el theme dark no se lanza la app en dark? No he visto ningún tutorial, voy con el brazo por fuera de la ventanilla

EDIT: ya de paso si me dices cómo añadir una imagen al lado de un botón... las he añadido al proyecto, pero no veo la forma de ponerlos en la ventana principal:

3 respuestas
PiradoIV

#22 ¿Qué distro y gestor de ventanas usas? Tiene pinta de que no se está pillando bien la configuración de modo oscuro. En una VM con Debian 12 veo el problema que dices, pero es que me pasa con otras apps también (el propio Terminal me sale en modo claro)

He probado varias maneras y no lo he conseguido, hace tiempo que no uso Linux yo. Luego le pregunto a uno de los compañeros y te cuento.

Sobre lo del botón, el control que soporta iconos se llama DesktopBevelButton.

Y el resultado:

1 1 respuesta
Dr_Manhattan

#23 te como la pija, menuda currada de respuesta. Debian 12 es el caso también. Lo del botón muchas gracias, esta tarde sigo

1 1 respuesta
PiradoIV

#24 A mandar =)

Por cierto, ahí estoy usando lo de la depuración en remoto desde macOS, para no tener que instalar el IDE en esa VM, ni andar copiando y pegando la app cada vez que la compilo.

1 1 respuesta
Dr_Manhattan

#25 ya estaba yo pensando que te había obligado a ponerte una vm, instalar linux, el ide etc etc xddd me siento un poco menos culpable ajajaj

1
Zh3RoX

Estoy cacharreando.

Algo he tocado y ahora no me deja hacer click derecho en el navegador de elementos que hay a la izquierda, antes si le daba click derecho me salían distintas opciones para eliminar, inspeccionar, crear subclases...ahora no.

ah, y esto es una tontería pero el show tab order (tab order editor) se abre en otra pantalla, en cambio el auto adjust tab order si se abre en la pantalla donde se está ejecutando el IDE.

1 1 respuesta
PiradoIV
#27Zh3RoX:

Estoy cacharreando.

Grande, gracias por darle una oportunidad.

#27Zh3RoX:

Algo he tocado y ahora no me deja hacer click derecho en el navegador de elementos que hay a la izquierda, antes si le daba click derecho me salían distintas opciones para eliminar, inspeccionar, crear subclases...ahora no.

No me ha pasado eso nunca. ¿Qué sistema operativo usas?

#27Zh3RoX:

ah, y esto es una tontería pero el show tab order (tab order editor) se abre en otra pantalla, en cambio el auto adjust tab order si se abre en la pantalla donde se está ejecutando el IDE.

Por lo que veo, el Tab Order Editor es una ventana normal y corriente, el Auto Adjust Tab Order es un modal y siempre se va a abrir encima de la propia ventana. Voy a abrir un Feature Request para que las dos sean modales. ¡Gracias!

1 1 respuesta
Zh3RoX

#28 Uso Windows 11, ya te digo, ni idea de como ha ocurrido, solo te puedo decir que cerrando y abriendo el proyecto se soluciona.

#28PiradoIV:

Por lo que veo, el Tab Order Editor es una ventana normal y corriente, el Auto Adjust Tab Order es un modal y siempre se va a abrir encima de la propia ventana. Voy a abrir un Feature Request para que las dos sean modales. ¡Gracias!

De nada! Así da gusto!

1 respuesta
PiradoIV

Usamos GitLab Issues para recopilar todo el Feedback que nos llega de los usuarios. La mayoría de las cosas que se implementan en cada versión viene por parte de la comunidad.

Se puede entrar al backlog y participar desde el propio IDE:

Pero vamos, para eso que has comentado en concreto ya he creado una Feature Request interna. Si tienes otra sugerencia y te apetece, puedes crear un nuevo caso.

2