2015-10-16 15 views
1

У меня есть пакет приложений (построенный с помощью Unity 3d, если это уместно), что я могу создать установщик .pkg с использованием продукта и распространять его в App Store без проблем , Тем не менее, приложение загружает и кэширует достаточное количество носителей и имеет некоторые дополнительные файлы конфигурации, которые должны быть доступны для всех пользователей на компьютере. Согласно Apple's documentation файлы конфигурации, вероятно, должны находиться в каталоге/Library/Application Support и в медиатеке/Library/Caches. Я сделал модифицированную версию этого приложения, которое использует эти каталоги, а не те, к которым имеет доступ к изолированному программному обеспечению, но у него нет права на каталог/Library, если я не запустил приложение как root, что не является реалистичный вариант.Разрешение на доступ/Библиотека/Поддержка приложений из пакета приложений Mac

Я искал google в течение нескольких часов, но я не могу найти ничего о создании такого установщика. Я прочитал this answer, у которого есть скриншот установщика, который имеет возможность установить для всех пользователей, но либо у меня отсутствует какой-то вариант, чтобы тот или иной скриншот был просто устаревшим, потому что я не могу создать файл .pkg, который дает мне этот вариант.

Поэтому я думаю, что мой вопрос сводится к следующему: как мне упаковать приложение, чтобы оно могло быть установлено для всех пользователей, и иметь разрешение на чтение и запись в/Library/Application Support/{имя приложения} или существует еще один предпочтительный способ совместного использования файлов конфигурации и/или мультимедиа между несколькими пользователями на одном компьютере?

ответ

2

Для любого другого, у кого есть аналогичная проблема, правильный ответ заключается в том, что вы не можете сделать это с помощью productbuild, но вы можете использовать pkgbuild.

Мой productbuild сборки шаг для магазина приложений выглядит следующим образом:

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

Соответствующая упаковка команда для PKGBUILD выглядит следующим образом:

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}" 

Обратите внимание, что подписание не является обязательным здесь, как это будет распределенных вне магазина. где {путь/к/мои/сценарии} имеет файл с именем в нем postinstall который выглядит следующим образом:

#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 

Этот скрипт будет работать после установки закончится, и создать каталог поддержки приложений, а также любые подкаталоги, которые вам нужны, и изменить права на них, чтобы все пользователи имели к ним доступ.