PDA

Ver la Versión Completa : Aplicación para Mac con Lazarus


Jovalca
13-05-2014, 19:29:38
Hola a todos.

Tengo una aplicación casi terminada hecha en lazarus, para el sistema operativo Mac OS. La aplicación usa un archivo INI y varios reportes LazReport.
Cuando tengo abierto lazarus la aplicación funciona muy bien, sin problemas. En este momento, voy a opciones del proyecto y creo el envoltorio (bundle) para la aplicación. Posteriormente, modifico el bundle e introduzco el ejecutable del mismo nombre donde esta el enlace que hay dentro la carpeta MacOs.

El problema viene cuando cierro lazarus y abro la aplicación por si sola desde el bundle (.app). La aplicación funciona bien pero no carga ni el archivo INI ni carga los reportes, en su lugar solo sale el nombre del componente "frPreview". Para que lea el archivo INI y los reportes, estos deben ir junto con el ejecutable, al menos en windows, pero en Mac, donde los coloco dentro del bundle? He probado a meterlos dentro de la carpeta Resources, dentro de la carpeta MacOs, pero nada sigue igual.

Queria saber si alguien ha probado esto y si conocen alguna solución?

Muchas gracias de antemano.
Saludos.

Casimiro Notevi
13-05-2014, 21:13:05
¿El programa está hecho sobre un mac?

mamcx
13-05-2014, 21:24:08
Un bundle es un directorio que sigue una estructura especifica:

http://en.wikipedia.org/wiki/Application_bundle

Es lo que permite que las apps puedan instalarse con solo copiarse, porque TODO lo que necesiten esta empaquetado dentro del bundle. Si necesitas que el archivo ini "viaje" con la app, entonces simplemente debe estar dentro del bundle.

Jovalca
13-05-2014, 23:31:56
Gracias por vuestras respuestas.

Si, el programa esta hecho con lazarus en su ultima version la 1.2.2 y sobre mac os x tambien en su ultima version creo que es la 10.9.2.

Entiendo que todo lo que necesite la app debe estar dentro del bundle pero no se donde meterlo y si hay que hacerlo manualmente, incluyendo los reportes y el INI por ejemplo en la carpeta resources que esta dentro del bundle o hay alguna opcion en lazarus para incluir automaticamente estos archivos en el envoltorio. He intentado meterlos manualmente pero no ha funcionado, no se si debo declararlos en alguna parte del proyecto o en el archivo plist... He buscado en todos los idiomas y he probado mil cosas pero no lo consigo. Tambien he mirado algunos ejemplos y los he intentado aplicar a mi app pero sin resultados. Me estoy tirando de los pelos...

Gracias.

mamcx
14-05-2014, 00:14:54
Cuando te preguntes en iOS/OSX sobre algo, la documentacion de apple es generalmente buena:

https://developer.apple.com/library/mac/documentation/corefoundation/conceptual/cfbundles/Introduction/Introduction.html
https://developer.apple.com/library/mac/documentation/corefoundation/Conceptual/CFBundles/AboutBundles/AboutBundles.html

Mira como lo usan en Mozilla para empaquetar apps con XUL:

https://developer.mozilla.org/en-US/docs/Mozilla/Projects/XULRunner/Creating_custom_app_bundles_for_Mac_OS_X

como pa darte una idea. El chiste es que contents es como te de la gana de organizarlo

Julián
14-05-2014, 14:38:41
Yo intenté, como ya he comentado en algún otro hilo, conseguir esto mismo, es decir, programar, compilar y generar una app para OSX, aunque no me importaría tener que hacerlo desde win o linux. No lo conseguí ni encontre nada que me ayudara.

Asi que si alguien consigue hacerlo, que explique cómo se hace, y ponemos el mensaje fijo, con chincheta y letras rojas y grandes e intermitentes. Y al autor o autores de la hazaña los nombramos socios de honor de clubdelphi. :D

Es que, aunque ya sabemos, que según dicen, es posible hacerlo, sería la hostia saber cómo se hace y tener un ejemplo, aunque fuese un sencillo hola mundo, para Windows, OSX, iOS y por supuesto, Linux.

Un saludo

PD: Si hace falta un betatester o algo podria volver a poner Lazrus en mi OSX.

mamcx
14-05-2014, 19:08:21
Yo he hecho eso. Crear la app y con bundle. El fastidio es que lazarus se nota a leguas que esta hecho por linuxeros. No hay sino que ver como se desinstala (y recordando ademas como se instala? Que pereza hacerlo de nuevo):

http://wiki.lazarus.freepascal.org/Installing_Lazarus_on_MacOS_X#Uninstalling_Lazarus_and_Free_Pascal

El problema no es tanto lograrlo. Es quien esta tan loco* de depender de una herramienta asi. Lazarus es una mala herramienta (FreePascal es buena!).

Es de las mas anti-OSX que he usado.

* Con mis respetos al que inicia este hilo ;)

roman
14-05-2014, 19:16:03
Yo he hecho eso. Crear la app y con bundle.

Pues hombre, para tranquilidad de Julián, ¿no podrías poner el howto? :)

// Saludos

Casimiro Notevi
14-05-2014, 19:32:24
Pues hombre, para tranquilidad de Julián, ¿no podrías poner el howto? :)
// Saludos
^\||/^\||/^\||/

mamcx
14-05-2014, 19:52:37
Ok aqui va:

Leer toda la información en http://wiki.lazarus.freepascal.org/Installing_Lazarus_on_MacOS_X

Instalar los prerequisitos.

Descargar la ultima version estable de FreePascal.

Actualmente es:

http://sourceforge.net/projects/lazarus/files/Lazarus%20Mac%20OS%20X%20i386/Lazarus%201.2.2/fpc-2.6.4.intel-macosx.dmg/download

Se puede bajar el binario de lazarus, pero según se explica en el wiki, en Mavericks ya no esta instalado por defecto GDB (el debugger) porque Apple ha movido todo a una toolchain mas superior (LLVM, CLANG, LLDB), asi que hay que instalar aparte:

http://wiki.lazarus.freepascal.org/GDB_on_OS_X_Mavericks_and_Xcode_5

Notar en el wiki cual es la version que combina de lazarus. Para FPC 2.6.4 es Lazarus 1.2.2.

Visitar a http://svn.freepascal.org/svn/lazarus/tags/ y descargar con subversion el tag 1.2.2:

svn co http://svn.freepascal.org/svn/lazarus/tags/lazarus_1_2_2/ lazarus

Este es un paso incorrecto (o mejor dicho: Problematic) en el wiki. El wiki asume descargar de la rama de desarrollo (trunk) que requiere recompilar FPC y usar un código potencialmente inestable. En cambio, aqui usamos un binario FPC estable + código Lazaurs estable:


cd lazarus
make


Se puede dar make install pero no quiero, así dentro de la carpeta lazarus se crea lazarus.app y no hay que contaminar (aun mas de lo que hace FPC) los directorios. Se puede ejecutar la app directamente o arrastrar al dock.

Se va a quejar de que no tiene acceso a las fuentes de FPC ni al debugger. Los ignoro como todo un desgraciado. Lo del debugger se arregla como dice el wiki, y lo de las fuentes ahi que descargar del tag correcto por subversion.

Guardo el proyecto en una carpeta. Lo ejecuto.

Dentro de esa carpeta quedara [NOMBRE PROYECTO].app (si todo sale bien).


FIN.

Jovalca
14-05-2014, 20:30:16
Bueno, no es la primera vez que me llaman loco por usar lazarus y mas para mac :D:D pero me lo tomo con humor.

Solo decir, en defensa de lazarus, que en versiones anteriores a la que hay actualmente si que había miles de fallos y era bastante inestable tanto para windows como para mac, pero en esta versión todo parece funcionar bien y por lo menos a mi no se me ha colgado ninguna vez. En cuanto a la instalación si que es un fastidio, y la desinstalación... también a pesar de que lo quieren poner fácil con el archivo uninstall.sh, que creo no sirve de mucho.

En cuanto al tema principal, hasta ahora he conseguido lo siguiente.
Compilar y ejecutar la aplicación con lazarus.
Crear el envoltorio .app con lazarus.

Ahora en el directorio del proyecto tengo los archivos:
- Programa.app
- Programa.exec
- Todas las .pas y demás.

Si en este momento, me llevo el archivo .app al escritorio y lo intento ejecutar dice que esta incompleto. Por ello, muestro el contenido del paquete Programa.app y dentro de la carpeta MacOs, introduzco el archivo Programa.exec sustituyendo al que hay.
Ahora, cuando me vuelvo a llevar el Programa.app al escritorio ya si que se ejecuta correctamente y todo funciona bien.

Mi cuestión sigue siendo dónde meter los archivos INI y Report.lrf dentro del Programa.app para que éstos funcionen.
Lo lógico y según he leído, es meterlos en Resources, pero lo he intentado y no resulta.

Alguien sabe si debo declararlos en algún archivo mediante lazarus o manualmente?

Gracias de nuevo.

mamcx
15-05-2014, 03:26:35
Que es lo que no resulta?

Jovalca
15-05-2014, 11:02:22
Lo que no resulta es que la app no carga el archivo INI ni los reportes, he echado un vistazo a la documentación y por lo que entiendo estos archivos deben ir en la carpeta resources del .app, pero los meto ahí y sigue sin cargarlos. Las rutas que tengo puestas en la aplicacion son del tipo ('conf.ini'), he intentado cambiarlas y poner ('resources/conf.ini') pero tampoco los carga, puede que sea esto? Me estoy equivocando al poner la ruta?

Gracias de nuevo.

Jovalca
15-05-2014, 17:41:09
Creo que he encontrado una solución... Al menos temporal.

Por lo que creo, en mac no se puede llamar a un archivo sin la ruta completa, es decir, no puedo poner el programa.app en el escritorio y decirle por ejemplo al pulsar un botón que cree un archivo.txt por que no lo crea. En windows si pongo el .exe en el escritorio y le digo lo mismo si que crea un .txt en el escritorio.

Asi que he llegado a la solución de obtener el path de programa.app con Application.Location y añadirle ahí que cree el archivo y posteriormente lo lea. Es decir en un ejemplo:

Memo1.Lines.SaveToFile(Application.Location+'archivo.ini');

Y para leer

Memo1.Lines.:LoadFromFile(Application.Location+'archivo.ini');


Asi que de tal modo, he de introducir los reportes en la carpeta MacOs dentro de programa.app junto al ejecutable y darle esa ruta para que los pueda usar. Aun lo he probado pero voy a ello, pero aunque no funcione al menos he encontrado una forma de solucionar lo del archivo INI. De cualquier modo, estos archivos siguen si estar en la carpeta RESOURCES dentro de programa.app que es donde deberían estar creo. Hay alguna forma de llamar a Application.Location y eliminar /MacOs/ y poner /Resources/ ?? Ya que me gustaría que los archivos estuviesen ahi...

Gracias.

Jovalca
15-05-2014, 18:05:33
Si que funcionan, ahora mismo funciona todo, reportes, archivo INI, etc. Todo perfecto.

Ahora solo me falta probarlo en otro mac a ver si también funciona, aunque he forzado el cierre de lazarus para evitar que quede nada abierto y así probarlo, creo que probarlo en otro que no tengo nada de lazarus instalado estaría bien. Tengo otro con un poco mas antiguo, lo probare e ire informando.
Ahora solo me falta el icono, no soy capaz de ponerlo.
Lo he generado con Icon Composer (El original de Apple). Con el, ya tengo el iconset (.icns), ahora abro el info.plist del programa.app e introduzco las lineas:

<key>CFBundleIconFile</key>
<string>iconfile.icns</string>

Introduzco el iconfile.icns dentro de la carpeta Resources que dicen es donde debe ir, pero el icono no cambia, sigue siendo el papel con el pincel y el lápiz. Quizás hay algún otro método?

Gracias.
P.D.: Si lo creeis oportuno puedo hacer una pequeña guía de los pasos que he seguido para conseguir que funcione y que pueda servirle a otros usuarios aunque para completarla necesitaría una mano con el icono y el tema de cambiar la ruta de los archivos.

Gracias de nuevo.
Un Saludo.

ecfisa
15-05-2014, 19:09:06
Hola Jovalca.

P.D.: Si lo creeis oportuno puedo hacer una pequeña guía de los pasos que he seguido para conseguir que funcione y que pueda servirle a otros usuarios aunque para completarla necesitaría una mano con el icono y el tema de cambiar la ruta de los archivos.

No está ni en mis mas remotos planes trabajar en ese entorno, pero te puedo asegurar que vas a encontrar muchos agradecidos si publicaras una pequeña guía paso a paso sobre como generar una aplicacion para OSX :)

Saludos :)

Casimiro Notevi
15-05-2014, 19:13:23
... pero te puedo asegurar que vas a encontrar muchos agradecidos si publicaras una pequeña guía paso a paso sobre como generar una aplicacion para OSX :)

Tanto es así, que algunos dicen que no se puede :)

Jovalca
15-05-2014, 20:32:28
Ok, investigo un poco mas a ver si consigo algo estable y me pongo con la guia.