我有一个应用程序包(如果相关的话,使用Unity 3d构建),我可以使用productbuild创建一个.pkg安装程序并在App Store上分发而不会出现问题。但是,该应用程序会下载并缓存大量媒体,并且需要在计算机上的所有用户之间共享一些可选配置文件。根据{{3}},配置文件可能应该放在/ Library / Application Support目录和/ Library / Caches中的媒体中。我已经修改了那个使用这些目录的应用程序,而不是沙盒应用程序可以访问的目录,但它没有/ Library目录的权限,除非我以root身份运行应用程序,这不是现实的选择。
我搜索谷歌几个小时,但我似乎无法找到任何关于创建这样的安装程序。我确实阅读了Apple's documentation,它有一个安装程序的屏幕截图,可以选择为所有用户安装,但要么我缺少一些选项来启用它,或者截图刚刚过时,因为我似乎无法创建一个.pkg给了我这个选项。
所以我想我的问题归结为:我如何打包我的应用程序,以便可以为所有用户安装,并且有权读取和写入/ Library / Application Support / {app name},或者是否有另一种在同一台机器上的多个用户之间共享配置文件和/或媒体的首选方法?
答案 0 :(得分: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}"
请注意,此处签名是可选的,因为它将在商店外部分发。其中{path / to / my / scripts}中有一个名为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
此脚本将在安装结束后运行,并将创建您的应用程序支持目录以及您需要的所有子目录,并更改它们的权限,以便所有用户都可以访问它们。