Come comprimere un'applicazione con database sqlite3

Sono un nuovo utente Mac che cerca di creare un file * .pkg che dovrebbe contenere un * .app (chiamarlo MyApp) e un corrispondente database sqlite3 (chiamarlo MyAppDB.sqlite3). Questa applicazione è stata scritta in Python e trasformata in un'applicazione Mac usando Pyinstaller . Non è perciò un'app di 'nativa' Mac.

Il process di installazione di * .pkg dovrebbe copiare MyApp.app in ~/Applications/MyApp e il relativo database in ~/Library/Application Support/MyApp/MyAppDB.sqlite3

A questo scopo ho usato i pacchetti , tuttavia il programma non sembra copiare il db nella cartella ~/Library/Application Support/ poiché non sono state create nuove cartelle o file dopo il process di installazione, solo la cartella ~/Applications/MyApp è stato creato correttamente where l'applicazione viene copiata.

Senza il database il programma si blocca. Ho aggiunto uno script bash che crea in modo postinstallazione le cartelle mancanti in ~/Library/Application Support/MyApp/ e copia il file MyAppDB.sqlite3. Purtroppo il file ha read solo le persimmure e non posso cambiarlo.

Quindi la mia domanda:

  • qualsiasi expierience con i pacchetti e come aggiungere con successo i file a un'altra cartella di ~/Applications ? Forse sto facendo qualcosa di sbagliato …?

Molte grazie in anticipo per il tuo aiuto!

Controllare il registro dell'installazione

Hai verificato il file di registro dell'installazione, /var/log/install.log , per errori o problemi? Forse il pacchetto funziona, ma non si installa where ci si aspetta.

Un approccio migliore

Come contrassegni dei commenti nell'altra domanda , cercare di evitare di installare file in più posizioni.

Gli strumenti di sviluppo di Apple per la creazione di pacchetti sono:

  • PKGBUILD
  • productbuild

Quick Fix utilizzando pkgbuild

Prova il seguente approccio per una correzione rapida. Nota questo si installa a /Applications e non ~/Applications :

  1. Preparare i file per l'imballaggio:

     ~/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. Creare il pacchetto con pkgbuild utilizzando un command come:

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

Evita questo approccio! Perché?

Questo approccio non è consigliato perché la install-location è root / . Un installatore robusto non verrà mai installato direttamente in root.

I problemi includono, che cosa succede se le autorizzazioni di applicazioni, libreria o supporto di applicazione del pacchetto differiscono dalle autorizzazioni o dalla properties; dell'utente? Cosa succede se l'utente ha collegato a symlink uno o più di questi file?

Invece dovrebbe essere utilizzato un pacchetto di distribuzione contenente due pacchetti standard. Un pacchetto standard avrà una install-location di install-location di /Applications e l'altra con /Library/Application Support . Questo approccio indica lo strumento di installer per gestire tutti i problemi di properties;, permessi e problemi di symlink.

Approccio Ideale

Idealmente, un'applicazione Mac verrà distribuita come un bundle di applicazione indipendente. Se il programma MyAppDB.sqlite3 deve essere modificato, un'applicazione Mac ben MyAppDB.sqlite3 dovrebbe copiare un file di database predefinito dall'interno del bundle dell'applicazione alla relativa cartella di Application Support e utilizzare la copia se necessario.

Tenere presente che se la tua applicazione è in modalità sandbox , la cartella Support Application /Library/Application Support/ non sarà visibile all'applicazione. L'applicazione riceverà una propria cartella di supporto, contenuta. Ciò significa che l'installazione di un database in /Library/Application Support/ non functionrà come ti aspetteresti.

Se puoi mettere tutto in bundle all'applicazione, una singola chiamata a productbuild di productbuild creerà una cassaforte pronta per la distribuzione al di fuori del pacchetto di installazione di Mac App Store. Meglio ancora, è ansible evitare un pacchetto di installazione e distribuire tramite un'image disco o un file di zip.