【问题标题】:File Ownership Modification by productbuild and pkgbuild通过 productbuild 和 pkgbuild 修改文件所有权
【发布时间】:2013-08-25 23:56:41
【问题描述】:
我正在尝试为 Mac OS 10.8.4 上的 Java 应用程序创建安装程序。该应用程序运行良好,我可以毫不费力地从 zip 文件中安装它。我可以使用 productbuild 或 pkgbuild 创建一个 .pkg 安装程序。我也可以成功安装任一安装程序 .pkg 文件,但是由于两个打包程序都将数据目录及其从属文件和子目录的所有权从用户更改为 root,因此该应用程序无法正常运行。我将此数据目录安装在 .app 包的 Resources 目录中,程序第一次执行时,它会将数据目录移动到 /Users/user/Library/Application Support。我尝试使用 pkgbuild 的 --ownership preserve 和 --ownership preserve-other 选项无济于事。我能够正确安装和执行的唯一方法是通过 zip 文件,因为它单独保留了文件所有权。这是我正在使用的 pkgbuild 命令:
pkgbuild --ownership preserve --component ./myApp.app ./myApp-installer.pkg
我的问题是:
如何强制 pkgbuild 遵守我的 --ownership 保留选项?
是否可以通过 pkgbuild 的 --synthesize 选项构建一个具有用户所有权并以用户区域为目标的单独的仅数据包并与可执行包合并?如果是,有人可以告诉我如何构建这样一个仅数据包吗?
【问题讨论】:
标签:
xcode
productbuild
pkgbuild
【解决方案1】:
我知道它已经很老了,我会回答以防其他人需要答案。
我通常做的是,我有一个为我创建 .pkg 文件的 shell 脚本。在该脚本中,我在打包之前设置了所有文件权限和所有权。这是一个例子:
NAME="PKGFILENAME"
IDENTIFIER="com.pkg.APPNAME"
VERSION="1.0.0"
INSTALL_LOCATION="PATH_TO_WHERE_THE_FILES_SHOULD_BE_COPIED_ON_USERS_MACHINE"
ROOT_LOCATION="PATH_TO_WHERE_FILES_ARE_ON_YOUR_MASCHINE"
# Remove any unwanted .DS_Store files.
find "$ROOT_LOCATION" -name '*.DS_Store' -type f -delete
# put any command for changing the ownership or permissions here
chmod -R +r "$ROOT_LOCATION"
# Build package.
/usr/bin/pkgbuild \
--root "$ROOT_LOCATION" \
--install-location "$INSTALL_LOCATION" \
--identifier "$IDENTIFIER" \
--version "$VERSION" \
"$NAME.pkg"
将此内容保存在 create-my-package.sh 之类的文件中,然后在命令行中运行。