注意:这仅适用于OS X Installer程序包,提交到Mac App Store的程序包遵循不同的规则.
由于Mountain Lion的Gatekeeper,我终于不得不把我的PackageMaker构建脚本放在谷仓后面并拍摄它.PackageMaker已经从Xcode中删除并转移到"Xcode的辅助工具"中,所以希望它很快就会被遗忘.
现在的问题是我怎么用pkgbuild,productbuild和pkgutil来代替它?
我是iOS的开发者,开发了一个mac应用程序.现在我想分发我的应用程序以便搜索它并发现我们需要将.app上传到Mac App Store它看起来很好.对于自我分配,我们可以有三种选择:
在pkg文件中,我的客户想要安装应用程序而不介绍,阅读我以及许可协议,我删除了许可证和自述文件,但无法删除介绍部分.请帮助我从这里...
提前致谢
我使用pkgbuild创建了一个默认的Component Property List文件.该文件看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList- 1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>BundleHasStrictIdentifier</key>
<true/>
<key>BundleIsRelocatable</key>
<true/>
<key>BundleIsVersionChecked</key>
<true/>
<key>BundleOverwriteAction</key>
<string>upgrade</string>
<key>RootRelativeBundlePath</key>
<string>MyApp.app</string>
</dict>
</array>
</plist>
Run Code Online (Sandbox Code Playgroud)
我想使用shell脚本修改此文件.我尝试使用默认值写但它没有做任何事情.
有什么办法呢?(例如:我想将BundleIsRelocatable设置为false)
我一直在尝试将Mac PackageMaker命令行构建移植到pkgbuild和productbuild但是我被卡住了.遗憾的是,除了这个StackOverflow帖子以及pkgbuild和productbuild手册页之外,我还没有找到任何记录这些新程序如何工作的内容.
这是我的问题.我创建了一个根安装目录,其中包含以下文件:
/some_path/Applications
/MyProgram.app
/Library
/Frameworks
/MyFramework.framework
/[library files...]
Run Code Online (Sandbox Code Playgroud)
下面的命令行调用对PackageMaker非常有用.它创建了一个安装程序,安装了上面的所有文件.
$ /Developer/usr/bin/packagemaker \
--title "My Program" \
--root /some_path \
--version 1.0.0 \
--filter "\.DS_Store" \
--resources ./resources/ \
--scripts ./scripts/ \
--root-volume-only \
--domain system \
--verbose \
--no-relocate \
--target 10.5 \
--id com.my_company.pkg \
--out MyProgram.pkg
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试用pkgbuild编写这个并遇到一个重大问题.我使用以下电话:
$ pkgbuild \
--root /some_path \
--version 1.0.0 \
--install-location "/" \
--scripts "./scripts/" \
--identifier "com.my_company.pkg" \
MyProgram.pkg
Run Code Online (Sandbox Code Playgroud)
此命令构建一个安装程序,将MyProgram.framework目录复制到/ Library/Frameworks中.但是,它不会将MyProgram.app文件安装到/ Applications目录中.当我查看安装程序日志时,我看到以下消息: …
我使用pkgbuild productbuild来构建安装程序.但是,安装在OS X 10.12 Sierra上,安装完成后,我会看到"您是否要将安装程序移动到废纸篓?要将此包和磁盘映像保留在当前位置.请单击"保留".
我想禁用该表.怎么做?
有没有人有关于这种新行为的更多信息?

installer operating-system productbuild pkgbuild macos-sierra
我的Java应用程序有一个启动器,它是一个.app和一个与它捆绑在一起的帮助应用程序.
我正在尝试使用以下命令使用背景图像制作.pkg安装程序:
pkgbuild --root "./Temp" --identifier "com.company.id" --install-location "/Applications" --sign "signature" "temp.pkg"
productbuild --package-path "temp.pkg" --distribution "./Distribution.xml" --package-path "./Temp" --resources "./Resources" --sign "installer signature" "$FINAL_PKG"
Run Code Online (Sandbox Code Playgroud)
当我查看./Temp目录时,两个.app文件夹都存在,当我解构.pkg时:
pkgutil --expand "temp.pkg" "temp"
我看到.app文件夹,但有时从pkg安装时,其中一个.app文件夹不显示.它们似乎总是在第一次安装时出现,但是在多次安装和删除应用程序的机器上(如在测试和开发机器上),其中一个.app文件夹最终不会显示.我想知道这里会发生什么?
最初我们将帮助应用程序作为主应用程序放在一个单独的目录中,在这种情况下,帮助应用程序有时不会安装,但主应用程序总是会安装.接下来,我们尝试将帮助应用程序放在主应用程序中,然后这是第一次工作,但下次我尝试从安装程序安装主应用程序不在那里!
我正在尝试在Mac OS 10.8.4上为Java应用程序创建安装程序.该应用程序运行正常,我可以从zip文件中顺利安装它.我可以用productbuild或pkgbuild创建一个.pkg安装程序.我也可以成功安装任何一个安装程序.pkg文件,但由于两个打包程序都将数据目录及其下级文件和子目录的所有权从用户更改为root,因此应用程序无法正常运行.我将此数据目录安装在.app包的Resources目录中,并且在程序第一次执行时,它将数据目录移动到/ Users/user/Library/Application Support.我尝试使用-ownership preserve和--ownership保留 - 其他选项与pkgbuild无济于事.我能够正确安装和执行的唯一方法是通过zip文件,因为它只保留文件所有权.这是我正在使用的pkgbuild命令:
pkgbuild --ownership preserve --component ./myApp.app ./myApp-installer.pkg
我的问题是:
我如何强制pkgbuild兑现我的 - 所有权保留选项?
是否可以构建一个具有用户所有权并且发往用户区域的单独的仅数据包,并通过pkgbuild的--synthesize选项将其与可执行包合并?如果有,有人可以告诉我如何构建这样一个仅限数据的包吗?
我按照本教程打包我的Mac应用程序.
这些包分两步生成:
首先,我生成一个临时包pkgbuild.它只包含二进制文件
pkgbuild --root ${ROOT} --scripts ${SCRIPTS} --identifier myapp \
--version ${VERSION} --install-location ${INSTALL_DIR} %PKG%
Run Code Online (Sandbox Code Playgroud)
其中%PKG%是临时包文件名Distribution.xml.
然后我生成一个包含前一个tmp包,一个Distribution.xml,背景图像等的包productbuild:
productbuild --distribution ${DIST_FILE} --package-path ${PKG_PATH} \
--resources ${RESOURCES} ~/myapp.pkg'
Run Code Online (Sandbox Code Playgroud)Distribution.xml 看起来像这样:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<installer-gui-script minSpecVersion="1">
<title>MyApp</title>
<options hostArchitectures="x86_64"/>
<options customize="never" rootVolumeOnly="true"/>
<welcome file="Welcome.rtf"/>
<license file="license.rtf"/>
<background file="background.png" scaling="proportional" alignment="bottomleft"/>
<os-version min="10.6.6"/>
<options customize="never" require-scripts="false"/>
<product id="myapp" version="%VERSION%" />
<choices-outline>
<line choice="default">
<line choice="myapp"/>
</line>
</choices-outline>
<choice id="default"/>
<choice …Run Code Online (Sandbox Code Playgroud) 我有一些应用程序作为.pkg使用pkgbuild和创建的文件分发productbuild。使用 macOS Catalina,这不再起作用。安装程序抱怨我正在尝试将内容安装到系统卷。
三周前我发帖认为该错误与捆绑 Java 运行时有关。事实证明它与Java无关。
为了测试它,我有一个最小的名为 Hello 的项目,它有一个主窗口和一个单击按钮。在 XCode 中,我执行 Product -> Archive,然后 Distribute App 和 Copy App。这将创建一个Hello 2019-12-18 15-01-07包含内容的目录Hello.app。该应用程序运行良好。然后我
pkgbuild --root *7 Hello.pkg
创建了Hello.pkg.
当我在查找器中双击 Hello.pkg 时,安装程序会向我显示介绍、目标选择(仅提供一个选项)和安装类型(“Macintosh HD 上的标准安装”)屏幕,然后询问我的密码。然后它会说:“此软件包与此版本的 macOS 不兼容。该软件包正在尝试将内容安装到系统卷。请联系软件制造商寻求帮助。”
如果我共同设计和公证没有区别。Productbuild 只为失败的过程增加了一层。
我错过了什么?
我正在尝试为 macOS (Monterey) 上的 CLI 创建一个 .pkg 安装程序。我遇到过pkgbuild和productbuild。
它们已经安装在我的 mac 上。
我在哪里可以阅读有关这些 CLI 功能的更多信息?(不仅仅是如何使用)。
两者有什么区别?
我从这个堆栈溢出线程中遇到了它们: Making macOS Installer Packages which are Developer ID ready
pkgbuild ×10
macos ×6
productbuild ×6
installer ×3
xcode ×3
packagemaker ×2
cocoa ×1
dmg ×1
macos-sierra ×1
packaging ×1
plist ×1
scripting ×1
shell ×1