2

我了解 PackageMaker 现在已弃用。我们现在应该使用 pkgbuild/productbuild。

但是,我似乎找不到为 kext 创建安装程序的示例。我希望将包构建为我的 kext Xcode 项目构建步骤的一部分。所以任何 bash/脚本文件都会很棒。

4

1 回答 1

4

对于一般情况,这个答案是一个非常好的指南。

具体来说,对于一个 kext,在 Product -> Archive 步骤之后,要生成组件 plist,我发现我需要“cd”到构建的存档包目录中:

cd ~/Library/Developer/Xcode/Archives/2013-12-22/my-kext\ 22-12-2013\ 22.57.xcarchive

然后,pkgbuild --analyze步骤如下所示:

pkgbuild --analyze --root ./Products/ my-kext.plist

RootRelativeBundlePath生成的 plist 应该在密钥下包含一个看起来合理的 kext 安装目标。(通常/System/Library/Extensions/my.kext,或者如果代码签名并且对于 10.9+ 应该是/Library/Extensions/my.kext)如果没有,请在 Xcode 中修复您的 kext 目标的安装位置。

安装 kexts 时要注意的主要事项是正确获取权限并刷新 kext 缓存。pkgbuild 似乎默认将 kext 安装为 root,所以这很好。要强制刷新 kext 缓存,您需要更新修改的时间/System/Library/Extensions(或者/Library/Extensions如果这是您要安装的位置)。您想在完全安装 kext执行此操作,因此您需要一个安装后脚本。为其创建一个目录,例如 ./scripts 并创建一个名为“postinstall”的文件,其内容为:

#!/bin/sh
touch /System/Library/Extensions

然后使其可执行:

chmod +x postinstall

您现在可以使用以下命令为您的 kext 构建通用包:

pkgbuild --root ./Products/ --scripts ./scripts/ --component-plist my-kext.plist my-kext.pkg

对于定制、协同设计等,请按照 catlan 链接答案中的说明进行操作 - 你无法击败他们!

于 2013-12-23T07:33:19.720 回答