我了解 PackageMaker 现在已弃用。我们现在应该使用 pkgbuild/productbuild。
但是,我似乎找不到为 kext 创建安装程序的示例。我希望将包构建为我的 kext Xcode 项目构建步骤的一部分。所以任何 bash/脚本文件都会很棒。
我了解 PackageMaker 现在已弃用。我们现在应该使用 pkgbuild/productbuild。
但是,我似乎找不到为 kext 创建安装程序的示例。我希望将包构建为我的 kext Xcode 项目构建步骤的一部分。所以任何 bash/脚本文件都会很棒。
对于一般情况,这个答案是一个非常好的指南。
具体来说,对于一个 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 链接答案中的说明进行操作 - 你无法击败他们!