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

0

Soy un nuevo usuario de Mac que intenta crear un archivo * .pkg que debería contener un * .app (llamémoslo MyApp) y una base de datos sqlite3 correspondiente (llamémoslo MyAppDB.sqlite3). Esta aplicación se ha escrito en Python y se ha transformado en una aplicación Mac utilizando Pyinstaller . Por lo tanto, no es una aplicación Mac 'nativa'.

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

Para este propósito, he usado Packages , sin embargo, el programa no parece copiar el Haga una db en la carpeta ~/Library/Application Support/ , ya que no se crean nuevas carpetas o archivos después del proceso de instalación, solo la carpeta ~/Applications/MyApp se crea correctamente donde se copia la aplicación.

Sin la base de datos el programa se bloquea. He agregado una secuencia de comandos bash que crea en una forma posterior a la instalación las carpetas faltantes en ~/Library/Application Support/MyApp/ y copia allí el archivo MyAppDB.sqlite3. Desafortunadamente, el archivo solo tiene read persmissions y no puedo cambiarlo.

De ahí mi pregunta:

  • cualquier experiencia con paquetes y cómo agregar archivos exitosamente a otra carpeta que ~/Applications ? Tal vez estoy haciendo algo mal ...?

¡Muchas gracias de antemano por tu ayuda!

    
pregunta user1544500 27.09.2016 - 13:54

1 respuesta

0

Comprueba el registro del instalador

¿Ha revisado el archivo de registro del instalador, /var/log/install.log , por errores o problemas? Tal vez el paquete esté funcionando pero no se esté instalando donde espera.

Un mejor enfoque

Mientras Mark comenta en su otra pregunta , intente evitar la necesidad de instalar archivos en varias ubicaciones.

Las herramientas de desarrollo de Apple para crear paquetes son:

Solución rápida utilizando pkgbuild

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

  1. Prepare los archivos para empaquetar:

    ~/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 usando un comando como:

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

¡Evita este enfoque! ¿Por qué?

Este enfoque no se recomienda porque el install-location es la raíz / . Un instalador robusto nunca se instalará directamente en la raíz.

Los problemas incluyen, ¿qué sucede 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 enlazado uno o más de estos archivos?

En su lugar, se debe utilizar 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 enfoque le dice a la herramienta installer que maneje todos los problemas de propiedad, permisos y enlaces simbólicos por usted.

Enfoque ideal

Lo ideal es que una aplicación de Mac se distribuya como un paquete de aplicaciones independiente. Si el MyAppDB.sqlite3 necesita ser modificado, una aplicación Mac con buen comportamiento debería copiar un archivo de base de datos predeterminado desde el paquete de la aplicación a la carpeta Application Support apropiada y usar la copia según sea necesario.

Tenga en cuenta que si su aplicación 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 contenido, contenida. Esto significa que la instalación de una base de datos en /Library/Application Support/ no se comportará como espera.

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

    
respondido por el Graham Miln 27.09.2016 - 16:10