0 votes

Comment empaqueter une application avec une base de données sqlite3

Je suis un nouvel utilisateur Mac essayant de créer un fichier *.pkg qui devrait contenir une application *.app (appelons-la MyApp) et une base de données sqlite3 correspondante (appelons-la MyAppDB.sqlite3). Cette application a été écrite en Python et transformée en une application Mac utilisant Pyinstaller . Ce n'est donc pas une application Mac 'native'.

Le processus d'installation *.pkg devrait copier l'application MyApp.app dans ~/Applications/MyApp et la base de données associée dans ~/Library/Application Support/MyApp/MyAppDB.sqlite3

Pour cela, j'ai utilisé Packages, cependant le programme semble ne pas copier la base de données dans le dossier ~/Library/Application Support/ car aucun nouveau dossier ou fichier n'est créé là-bas après le processus d'installation, seul le dossier ~/Applications/MyApp est correctement créé où l'application est copiée.

Sans la base de données, le programme plante. J'ai ajouté un script bash qui crée de manière post-installation les dossiers manquants dans ~/Library/Application Support/MyApp/ et copie le fichier MyAppDB.sqlite3 là-bas. Malheureusement, le fichier a seulement des permissions de lecture et je ne peux pas les modifier.

Donc ma question :

  • avez-vous de l'expérience avec Packages et comment ajouter avec succès des fichiers dans un autre dossier que ~/Applications ? Peut-être que je fais quelque chose de mal... ?

Merci d'avance pour votre aide !

0voto

Graham Miln Points 39606

Vérifiez le journal de l'installateur

Avez-vous vérifié le fichier journal de l'installateur, /var/log/install.log, pour des erreurs ou des problèmes ? Peut-être que le package fonctionne mais ne s'installe pas là où vous vous y attendez.

Une meilleure approche

Comme Mark le mentionne dans votre autre question, essayez d'éviter le besoin d'installer des fichiers à plusieurs endroits.

Les outils de développement d'Apple pour créer des packages sont :

Correction rapide en utilisant pkgbuild

Essayez l'approche suivante pour une correction rapide. Notez que cela s'installe dans /Applications et non dans ~/Applications :

  1. Préparez les fichiers à empaqueter :

    ~/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. Créez le package avec pkgbuild en utilisant une commande comme :

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

Évitez cette approche ! Pourquoi ?

Cette approche n'est pas recommandée car l'emplacement d'installation est la racine /. Un installateur robuste n'installera jamais directement à la racine.

Les problèmes incluent, que se passe-t-il si les permissions des Applications, Library, ou Application Support du package diffèrent des permissions ou de la propriété de l'utilisateur ? Que se passe-t-il si l'utilisateur a créé des liens symboliques vers un ou plusieurs de ces fichiers ?

À la place, un package de distribution contenant deux packages standard devrait être utilisé. Un package standard aura un install-location de /Applications et l'autre avec /Library/Application Support. Cette approche indique à l'outil installer de gérer tous les problèmes de propriété, permissions et de liens symboliques pour vous.

Approche idéale

Idéalement, une application Mac sera distribuée en tant qu'un bundle d'application autonome. Si le MyAppDB.sqlite3 doit être modifié, une application Mac bien comportée devrait copier un fichier de base de données par défaut du bundle de l'application vers le dossier Application Support approprié et utiliser la copie au besoin.

Sachez que si votre application est sous sandbox, le dossier Application Support à /Library/Application Support/ ne sera pas visible pour l'application. L'application aura son propre dossier de support contenu. Cela signifie que l'installation d'une base de données à /Library/Application Support/ ne se comportera pas comme prévu.

Si vous pouvez tout regrouper dans l'application, alors un seul appel à productbuild créera un package d'installation prêt à distribuer en dehors du Mac App Store. Mieux encore, vous pourriez éviter complètement un package d'installation et distribuer via une image disque ou un fichier zip.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X