从 Mac 应用程序包访问 /Library/Application 支持的权限

Permission to access /Library/Application Support from Mac App bundle

我有一个应用程序包(如果相关,则使用 Unity 3d 构建),我可以使用 productbuild 创建一个 .pkg 安装程序并在 App Store 上毫无问题地分发。但是,该应用程序会下载并缓存大量媒体,并且有一些可选的配置文件需要在机器上的所有用户之间共享。根据 Apple's documentation,配置文件可能应该放在 /Library/Application 支持目录中,媒体应该放在 /Library/Caches 中。我已经制作了该应用程序的修改版本,它使用这些目录而不是沙盒应用程序可以访问的目录,但它没有 /Library 目录的权限,除非我 运行 应用程序作为根目录,这不是一个现实的选择。

我已经搜索 google 几个小时了,但我似乎找不到有关创建此类安装程序的任何信息。我确实读过 this answer,其中有一个安装程序的屏幕截图,可以选择为所有用户安装,但要么我缺少启用该选项的选项,要么该屏幕截图已经过时,因为我似乎无法创建一个 .pkg 给我那个选项。

所以我想我的问题可以归结为:如何打包我的应用程序以便它可以为所有用户安装,并有权读取和写入 /Library/Application Support/{app name},或者是否有另一种首选方法可以在同一台机器上的多个用户之间共享配置文件 and/or 媒体?

对于遇到类似问题的其他人,正确答案是您不能使用 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 "" ]]
    then
            if [[ ! -L "" ]]
            then
                    echo "directory  doesn't exist. Creating now"
                    mkdir ""

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

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

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

此脚本将在安装结束后 运行 创建您的应用程序支持目录以及您需要的任何子目录并更改它们的权限以便所有用户都可以访问它们。