Come pacchettizzare un'app con il database sqlite3

0

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

Il processo di instalazione * .pkg deve copiare MyApp.app in ~/Applications/MyApp e il database correlato in ~/Library/Application Support/MyApp/MyAppDB.sqlite3

Per questo scopo ho usato Pacchetti , tuttavia il programma sembra non copiare il db nella cartella ~/Library/Application Support/ poiché nessuna nuova cartella o file viene creata lì dopo il processo di installazione, solo la cartella ~/Applications/MyApp viene creata correttamente dove viene copiata l'app.

Senza il database il programma si blocca. Ho aggiunto uno script bash che crea in modo post-installazione le cartelle mancanti in ~/Library/Application Support/MyApp/ e copia lì il file MyAppDB.sqlite3. Sfortunatamente il file ha solo% persecuzioni% co_de e non posso cambiarlo.

Quindi la mia domanda:

  • qualsiasi expierience con i pacchetti e come aggiungere con successo file ad altre cartelle di read ? Forse sto facendo qualcosa di sbagliato ...?

Molte grazie in anticipo per il tuo aiuto!

    
posta user1544500 27.09.2016 - 13:54
fonte

1 risposta

0

Controllare il registro di installazione

Hai controllato il file di registro Installer, /var/log/install.log , per errori o problemi? Forse il pacchetto funziona ma non si installa dove ti aspetti.

Un approccio migliore

Come commenta Mark nella tua altra domanda , cerca di evitare di dover installare file in più posizioni.

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

Correzione rapida utilizzando pkgbuild

Prova il seguente approccio per una soluzione rapida. Nota questo installa su /Applications e non su ~/Applications :

  1. Prepara i file per la confezione:

    ~/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. Crea il pacchetto con pkgbuild usando un comando come:

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

Evita questo approccio! Perché?

Questo approccio non è raccomandato perché install-location è root / . Un programma di installazione affidabile non verrà mai installato direttamente su root.

I problemi includono, cosa succede se le autorizzazioni del pacchetto Applicazioni, Libreria o Supporto applicazione differiscono dalle autorizzazioni o dalla proprietà dell'utente? Cosa succede se l'utente ha un collegamento simbolico a uno o più di questi file?

Dovrebbe invece essere usato un pacchetto di distribuzione contenente due pacchetti standard. Un pacchetto standard avrà un install-location di /Applications e l'altro con /Library/Application Support . Questo approccio indica allo strumento installer di gestire tutti i problemi relativi a proprietà, permessi e link simbolici per te.

Approccio ideale

Idealmente, un'applicazione Mac verrà distribuita come pacchetto di applicazioni autonomo. Se è necessario modificare MyAppDB.sqlite3 , un'applicazione Mac ben educata dovrebbe copiare un file di database predefinito all'interno del pacchetto di applicazioni nella cartella Application Support appropriata e utilizzare la copia secondo necessità.

Tieni presente che se la tua applicazione è sandboxed , la cartella Supporto applicazioni in /Library/Application Support/ non sarà visibile a l'applicazione. All'applicazione verrà fornita una propria cartella di supporto contenuta. Ciò significa che l'installazione di un database su /Library/Application Support/ non si comporterà come previsto.

Se puoi raggruppare tutto nell'applicazione, una singola chiamata a productbuild creerà una pronta distribuzione da distribuire al di fuori del pacchetto di installazione del Mac App Store. Ancora meglio, è possibile evitare completamente un pacchetto di installazione e distribuirlo tramite un'immagine disco o un file zip.

    
risposta data 27.09.2016 - 16:10
fonte