0 votos

Cómo empaquetar una aplicación con una base de datos sqlite3

Soy un nuevo usuario de Mac que intenta crear un archivo *.pkg que debe contener una aplicación *.app (llamémosla MyApp) y una base de datos sqlite3 correspondiente (llamémosla MyAppDB.sqlite3). Esta aplicación ha sido escrita en Python y transformada en una aplicación para Mac utilizando Pyinstaller . Por lo tanto, no es una aplicación "nativa" de Mac.

El proceso de instalación del *.pkg debe copiar el MyApp.app en ~/Applications/MyApp y la base de datos correspondiente en ~/Library/Application Support/MyApp/MyAppDB.sqlite3

Para ello he utilizado Paquetes Sin embargo, el programa parece no copiar la base de datos en el ~/Library/Application Support/ ya que no se crean nuevas carpetas o archivos allí después del proceso de instalación, sólo el ~/Applications/MyApp se crea correctamente la carpeta donde se copia la aplicación.

Sin la base de datos el programa se bloquea. He añadido un bash script que crea de manera post-instalación las carpetas que faltan en ~/Library/Application Support/MyApp/ y copia allí el archivo MyAppDB.sqlite3. Desgraciadamente, el archivo sólo tiene read persmisiones y no puedo cambiar eso.

De ahí mi pregunta:

  • cualquier experiencia con los paquetes y cómo añadir con éxito los archivos a otra carpeta que ~/Applications ? Quizás estoy haciendo algo mal... ?

Muchas gracias de antemano por su ayuda.

0voto

Steve Evans Puntos 155

Compruebe el registro del instalador

¿Ha comprobado el archivo de registro del instalador? /var/log/install.log ¿para los errores o problemas? Tal vez el paquete funciona pero no se instala donde usted espera.

Un enfoque mejor

Como comenta Mark en su otra pregunta Para evitar la necesidad de instalar archivos en varias ubicaciones.

Las herramientas de desarrollo de Apple para crear paquetes son:

Solución rápida con pkgbuild

Pruebe el siguiente enfoque para una solución rápida. Tenga en cuenta que esto se instala en /Applications y no ~/Applications :

  1. Prepare los archivos para el embalaje:

    ~/installer/
    ~/installer/Applications/
    ~/installer/Applications/YourApp.app
    ~/installer/Library/
    ~/installer/Library/Application Support/
    ~/installer/Library/Application Support/YourApp/
    ~/installer/Library/Application Support/YourApp/MyAppDB.sqlite3
  2. Cree el paquete con pkgbuild utilizando un comando como:

    pkgbuild --root ~/installer/ --install-location / ~/Desktop/MyApp.pkg

¡Evite este enfoque! ¿Por qué?

Este enfoque no se recomienda porque el install-location es root / . Un instalador robusto nunca instalará directamente en Root.

Los problemas incluyen, ¿qué pasa si los permisos de Aplicaciones, Biblioteca o Soporte de Aplicaciones del paquete difieren de los permisos o la propiedad del usuario? ¿Qué sucede si el usuario ha hecho un enlace simbólico a uno o más de estos archivos?

En su lugar, debe utilizarse un paquete de distribución que contenga dos paquetes estándar. Un paquete estándar tendrá un install-location de /Applications y el otro con /Library/Application Support . Este planteamiento indica a los installer para manejar todos los problemas de propiedad, permisos y enlaces simbólicos por usted.

Enfoque ideal

Lo ideal es que una aplicación para Mac se distribuya como un paquete de aplicaciones autónomo. Si el MyAppDB.sqlite3 necesita ser modificada, una aplicación de Mac que se comporte bien debería copiar un archivo de base de datos por defecto desde el paquete de la aplicación al Application Support y utilizar la copia según sea necesario.

Tenga en cuenta que si su solicitud es sandboxed la carpeta de soporte de aplicaciones en /Library/Application Support/ no será visible para la aplicación. La aplicación tendrá su propia carpeta de soporte, contenida. Esto significa que la instalación de una base de datos a /Library/Application Support/ no se comportará como usted espera.

Si puede agrupar todo en la aplicación, entonces una sola llamada a productbuild creará un paquete instalador seguro y listo para distribuir fuera del Mac App Store. Mejor aún, podría evitar un paquete instalador por completo y distribuirlo a través de una imagen de disco o un archivo zip.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X