2015-10-16 2 views
1

J'ai un ensemble d'applications (construit avec Unity 3d si cela est pertinent) que je suis capable de créer un installateur .pkg en utilisant productbuild et distribuer sur l'App Store sans problème . Toutefois, l'application télécharge et met en cache une quantité importante de médias et dispose de fichiers de configuration facultatifs qui doivent être partagés entre tous les utilisateurs de la machine. Selon Apple's documentation les fichiers de configuration devraient probablement aller dans le répertoire/Library/Application Support et le média dans/Library/Caches. J'ai fait une version modifiée de cette application qui utilise ces répertoires à la place de ceux auxquels l'application sandboxed peut accéder, mais elle n'a pas d'autorisation pour le répertoire/Library sauf si je lance l'application en tant que root, ce qui n'est pas option réaliste.Autorisation d'accès/Bibliothèque/Application Support à partir de l'ensemble Mac App

J'ai cherché Google pendant plusieurs heures, mais je n'arrive pas à trouver quoi que ce soit à propos de la création d'un tel programme d'installation. J'ai lu this answer qui a une capture d'écran d'un programme d'installation qui a l'option d'installer pour tous les utilisateurs, mais soit je manque une option pour l'activer ou cette capture d'écran est juste obsolète car je n'arrive pas à créer un .pkg me donne cette option. Donc je pense que ma question se résume à ceci: comment est-ce que je fais mon paquetage pour qu'il puisse être installé pour tous les utilisateurs, et soit autorisé à lire et écrire dans/Library/Application Support/{app name}, ou est -il un autre moyen préféré de partager des fichiers de configuration et/ou des médias entre plusieurs utilisateurs sur la même machine?

Répondre

2

Pour toute personne ayant un problème similaire, la réponse correcte est que vous ne pouvez pas le faire en utilisant productbuild, mais vous pouvez utiliser pkgbuild.

Mon productbuild construire étape pour le magasin d'applications ressemble à ceci:

productbuild --component "{mystoreapp.app/}" /Applications --sign "{signing identity}" "{mystorepkg.pkg}" 

La commande d'emballage correspondant pour PKGBUILD ressemble à ceci:

pkgbuild --component "{mymodifiedapp.app/}" --sign "{signing identity}" --ownership preserve --scripts "{path/to/my/scripts}" --identifier {com.yourcompany.yourapp} --version "{versionNumber}" --install-location /Applications "{mymodifiedpkg.pkg}" 

Notez que la signature est facultative ici car il sera distribué à l'extérieur du magasin. où {chemin/vers/mes/scripts} a un fichier appelé postinstall dans ce qui ressemble à ceci:

#this function creates a directory if it doesn't exist 
create_directory() { 
    if [[ ! -d "$1" ]] 
    then 
      if [[ ! -L "$1" ]] 
      then 
        echo "directory $1 doesn't exist. Creating now" 
        mkdir "$1" 

        echo "directory $1 created" 
      else 
        echo "directory $1 exists" 
      fi 
    fi 
} 

#this function gives all users read and write (and execute) access to the directory 
fix_dir_permissions() { 
    chmod 777 "$1" 
} 

baseDirName="/Library/Application Support/{your app name bere}" 

subDirs[0]="$baseDirName/{sub dir here}" 

#create base directory 
create_directory "$baseDirName" 

#create all subdirectories and give permissions 
for subDir in "${subDirs[@]}" 
do 
    create_directory "$subDir" 
    fix_dir_permissions "$subDir" 
done 

exit 0 

Ce script fonctionnera une fois l'installation terminée, et va créer votre répertoire de support d'application ainsi que tout sous-répertoires dont vous avez besoin et modifiez les permissions pour que tous les utilisateurs y aient accès.