如何使用pkgbuild从Xcode中创建kext安装程序

时间:2013-01-08 08:55:12

标签: xcode kernel-extension pkgbuild

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

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

1 个答案:

答案 0 :(得分:4)

对于一般情况,

This answer是一个非常好的指南。

对于特定的kext,在产品之后 - >归档步骤,为了生成组件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

生成的plist应包含RootRelativeBundlePath键下kext的合理安装目的地。 (通常为/System/Library/Extensions/my.kext,或者如果已经过编码,则为10.9+,应为/Library/Extensions/my.kext)如果没有,请在Xcode中修复kext目标的安装位置。

安装kexts时要注意的主要事项是获得权限并刷新kext缓存。 pkgbuild似乎默认以root身份安装kext,所以这很好。要强制刷新kext缓存,您需要更新/System/Library/Extensions上的修改时间(或/Library/Extensions,如果您要安装的位置)。你想在完全安装你的kext之后这样做,所以你需要一个postinstall脚本。为它创建一个目录,例如./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链接答案中的说明进行操作 - 您无法击败它们!