Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Aplicación para Mac con Lazarus (https://www.clubdelphi.com/foros/showthread.php?t=85835)

Jovalca 13-05-2014 19:29:38

Aplicación para Mac con Lazarus
 
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/...roduction.html
https://developer.apple.com/library/...utBundles.html

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

https://developer.mozilla.org/en-US/...s_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/I...nd_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

Cita:

Empezado por mamcx (Mensaje 476423)
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

Cita:

Empezado por roman (Mensaje 476425)
Pues hombre, para tranquilidad de Julián, ¿no podrías poner el howto? :)
// Saludos

^\||/^\||/^\||/

mamcx 14-05-2014 19:52:37

1 Archivos Adjunto(s)
Ok aqui va:

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

Instalar los prerequisitos.

Descargar la ultima version estable de FreePascal.

Actualmente es:

http://sourceforge.net/projects/laza...x.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/G...ks_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:

Código:

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:

Código:

cd lazarus
make

Se puede dar
Código:

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:
Código:

Memo1.Lines.SaveToFile(Application.Location+'archivo.ini');
Y para leer
Código:

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:
Código:

  <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.
Cita:

Empezado por Jovalca (Mensaje 476486)
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

Cita:

Empezado por ecfisa (Mensaje 476492)
... 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.


La franja horaria es GMT +2. Ahora son las 14:20:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi