This answer 是一个非常好的一般情况指南。
具体来说,对于一个 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
生成的 plist 应该在 RootRelativeBundlePath 键下包含一个外观合理的 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 链接答案中的说明进行操作 - 你无法击败他们!