问题标签 [pkgbuild]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1705 浏览

macos - osx - 作为 pkg 安装的一部分删除文件

使用 pkgbuild 我为我的 OSX 应用程序创建安装程序。有没有办法添加额外的安装步骤,这会删除一些文件?在这个特定的示例中 - 当我运行我的应用程序时,它会在二进制文件所在的目录中创建新文件。新版本的安装会替换二进制文件,但会保留以前创建的文件。安装新版本后我需要“重新开始”。

0 投票
1 回答
1469 浏览

macos - Mac OS X 包修改我的主目录中的文件,而不是安装到应用程序

我试图找出将图形Qt应用程序分发给 Mac OS X 用户的最佳方式。

我已经了解了pkgbuildproductbuild,并使用它们来创建带有扩展名的平面包。.pkg

但是,当我尝试在 Mac OS X 10.11 上安装这样的平面包时,我看到了一些非常奇怪的行为。看起来这些包的 Mac OS X 安装程序会在我的主目录中搜索我要安装的应用程序。如果它在那里找到了应用程序,那么它实际上窃取了该应用程序,将这些文件的所有权更改为 root,并且它无法将应用程序安装到/Applications我想要安装它的文件夹中。

预期的行为是该包应始终将我的应用程序安装到该/Applications目录中,并且不应修改我的主目录中任何文件的所有权。

这看起来真的很奇怪。发生了什么事,我该如何解决?扁平包看起来不错,但我想保证它们总是将应用程序安装在正确的位置,并且我不希望它们修改用户主目录中的文件。

重现问题的步骤

在您的主目录中安装Homebrew 。

运行brew install qt5以安装 Qt5。

用这三个文件创建一个新目录:

Info.plist.in

主.cpp

测试.sh

./test.sh现在通过在终端中输入来运行 test.sh。在我的电脑上,输出看起来像这样:

(显然,pkgbuild 正在检测我的暂存文件夹中的组件。我希望它不会那样做。我希望它只是将所有这些文件安装到用户的/Applications目录中。如果它仅仅因为它们有文件而特别对待这些Info.plist文件,那可能是坏事。)

接下来,通过运行open app.pkg并按照屏幕上的 GUI 安装包:

Mac OS X 平面包的标准 UI

运行ls /Applications/abc.app,您可以看到应用程序没有安装在预期的位置。

运行ls -l stagingor find . -uid root,可以看到里面的文件staging/abc.app现在都归root用户所有了,这是出乎意料的。

现在使用sudo rm -rf staging. 尝试再次安装该软件包。这次,由于安装程序没有在我的主目录中找到该应用程序,因此它已成功将其安装到/Applications.

备择方案

我对仅仅将.app文件夹打包成一个.dmg文件不感兴趣,因为我的应用程序实际上将有一个 GUI 和一个命令行组件,并且很难使用该方法将命令行组件放到用户的路径中。使用平面包,我可以通过将文件添加到/etc/paths.d.

是否有更好的工具来创作 Mac OS X 平面包?

源代码是否pkgbuild可用,以便我可以弄清楚它在做什么?

我可能会尝试这个答案中描述的更复杂的过程,看看是否有帮助。

0 投票
2 回答
1315 浏览

cmake - PKGBUILD 与 make all

我现在正在尝试为由几个子应用程序组成的 github 项目为 AUR 编写 PKGBUILD。
所以基本上这个项目的 CMake 文件只是运行一个 make 来 make && make 安装子应用程序。
这些是我的构建和打包步骤:

我的问题是现在一切正常,除了:

  • makepkg -i 在构建期间从不要求 sudo 权限(因此我必须在 make all 前面添加 sudo)
  • 当要求安装时,makepkg 无法识别包的大小。因此,在运行 packman -R packagename 时该包也不会卸载

我无法更改 CMake 文件,因为该项目不是我的,并且所有不同的子应用程序都属于一起,如果我尝试 make && make 分别安装它们,我会得到一堆错误,它们相互依赖。

0 投票
1 回答
600 浏览

archlinux - 是否可以从 pre_install() 中止 pacman 安装

创建 PKGBUILD 文件时,可以在 pre_install()、post_install() 等处执行挂钩。

我现在有一个自定义的 arch linux pacman 包,我需要在安装之前完成一些自定义检查以确定安装是否安全。

如果我在脚本中这么说,我想在 pre_istall() 脚本中运行我的测试并让 pacman 中止安装。

那么,如何实现呢?到目前为止,我所做的只是在日志中收到一条错误消息,但 pacman 继续安装...

0 投票
2 回答
1839 浏览

macos - 有没有办法更改 pkg 的日志记录位置?

我正在使用pkgbuildand构建安装程序productbuild。如果出现任何问题,我希望能够从我的用户那里收集安装日志。如果这些日志没有与他们安装的所有其他东西混合在一起,那就太好了。

默认情况下,看起来所有日志都转到/var/logs/install.log. 有什么方法可以更改我的应用程序安装程序日志的这个位置吗?

0 投票
3 回答
35897 浏览

macos - 如何为 mac 的 .app 创建 dmg 文件?

我是 iOS 的开发者,开发了一个 mac 应用程序。现在我想分发我的应用程序,以便搜索它并发现我们需要将 .app 上传到 Mac App Store,它看起来很好。而对于自我分发,我们可以有三种选择:

  1. 是分享我们的应用程序
  2. 是创建 .dmg 文件
  3. 是共享 .pkg 文件(Package Maker)。

在 pkg 文件中,我的客户想要在没有介绍的情况下安装应用程序,阅读我以及许可协议,我删除了许可和自述文件,但无法删除介绍部分。请从这里帮助我......</p>

提前致谢

0 投票
0 回答
727 浏览

macos - OS X:制作 pkg,以 root 身份运行后安装脚本

我正在使用来构建 PKG 安装程序。它的目标很简单:将我的应用程序传送到/Applications文件夹并启动它。Packages.app 除了一件事外,几乎完成了它的工作。当它启动安装后脚本(启动刚刚安装的应用程序的简单脚本)时,该脚本以 root 身份启动,因此该应用程序也以 root 身份启动。这是不受欢迎的行为。奇怪的是为什么安装程序在安装过程中需要管理员密码,我在 PKG 项目中未选中此设置。所以,问题是:如何让安装程序在当前登录的用户下运行安装后脚本?

0 投票
1 回答
131 浏览

xcode - 如何禁止 .pkg 安装程序在与指定安装目录不同的位置搜索包含的 .app,

这个问题已经在 Stackoverfl0w 上讨论过多次,但不幸的是我没有看到任何真正令人满意的解决方案。

情况:

(仅包括在内,因为大多数先前的答案都与“只是不要这样做!没有理由拥有多个版本的应用程序..等等”这一行一致,我同意大多数情况下,但不是这个。)

我们目前正在发送一个 .pkg 文件,该文件将我们的软件包安装到 /Applications/$CompanyName/$SoftwareName_$VersionNumber 。在文件夹名称中包含版本号而不删除旧版本是必要的,因为我们的许多客户同时使用我们当前的发行版和 beta 版本,此外,许多客户使用旧版本软件是因为他们认证了它用于特定用途案例,但他们对当前项目使用当前版本。

我们过去只为 macOS 提供命令行工具和库,因此多年来它对我们来说工作得很好。

但是,我们开始仅将我们的 GUI 应用程序从 Windows 移植到 Windows / macOS / Linux,它们在 macOS 下以 .app 格式提供。

问题:

如果 .app 包含在 .pkg 安装程序中,安装程序会在空盘中搜索相同 .app 的旧实例。如果找到,它会替换它找到的实例(非常糟糕),并且也不会将 .app 放在指定的安装目录中(也很糟糕)。

我找到的解决方案:

a) 为每个发布的版本更改 .app 的 CFBundleIdentifier。对我来说似乎不是一个干净的方式。我认为它还会导致 .app 在启动板中多次出现
b) 在安装程序执行之前搜索 .app 的所有实例,压缩它们,并在安装后再次提取它们。(听起来也不是一个好的解决方案。)

有人对此有干净的方法吗?无法相信 Apple 没有办法指定在创建 .pkg 期间应省略此行为。

有比我找到的更好的文档吗?:

https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/DistributionDefinitionRef/Chapters/Distribution_XML_Ref.html#//apple_ref/doc/uid/TP40005370-CH100-SW15

http://s.sudre.free.fr/Stuff/Ivanhoe/FLAT.html(良好的文档,但经过约 8 年的正常运行时间后,许多字段仍标有“即将发布的说明”。)

编辑:添加 XCode 作为标签。用这个问题赢得风滚草后撞了。将不胜感激任何建议:)

0 投票
0 回答
188 浏览

macos - 在 osx 中使用选择文件夹选项编写安装程序

我正在为 mac os 中的 Adob​​e photoshop 编写插件安装程序。所以,当我用谷歌搜索时,我发现 mac os 的安装程序有两种格式:dmg 和 pkg。在 dmg 中没有选项要求用户选择软件的文件夹位置(在这种情况下为 Adob​​e photoshop)。这是将插件文件放置在 adobe photoshop 软件位置所必需的。而在 pkg 中,可以选择仅询问硬盘驱动器级别而不是文件夹位置级别(我可能在这里错了。如果我错了,请纠正我)。

Applescript 可能会解决问题,但我需要包含一份许可协议让客户接受它然后继续安装,这使我没有选择 applescript

请帮我解决这个问题并提出一种方法。

0 投票
1 回答
824 浏览

macos - pkgbuild OSX,在降级的情况下强制安装失败

我根据--component-plist文件制作了一个包含 2 个组件的包。在 plist 文件中,我添加了以下标志以防止降级:

当我执行降级方案时,我收到以下消息:

这是意料之中的,但不幸的是,安装继续进行,并且其他组件正在正确安装,preinstallpostintsall脚本也是如此 - 所以我得到了两个版本的混合。

有没有办法在任何尝试实际安装它们之前强制执行组件版本验证,并在验证未通过的情况下停止安装过程。

更新 :

另一种可以帮助我的方法是防止运行安装前和安装后脚本,以防尝试降级。

我在这里看到了关于这个问题的未回答问题的参考。