咨询:能否为仅支持10.7.5的旧版Kext文件签名
给旧版M-Audio Kext签名的实用方案
嘿,我来帮你搞定这个旧Kext的签名问题~首先得指出你之前用的命令有个关键问题,咱们一步步来梳理:
1. 选对签名身份是核心
你用的Developer ID Application:身份是给普通App签名用的,内核扩展(Kext)得用专门的Developer ID Kernel Extension身份才行!这是苹果专门为内核级代码设计的签名证书,和应用证书不通用。你得先登录苹果开发者后台,在Certificates板块里确认有没有这个证书,如果没有,需要申请一个。
2. 适配旧Kext的签名细节
这个Kext是针对10.7.5做的,要注意两个点:
- 10.7.5本身的签名规则没现代macOS严格,但要让签名有效,得先确保Kext的
Info.plist里有CFBundleIdentifier这类必填字段——要是缺了这些基础信息,签名大概率会失败,先检查一下这个文件的完整性。 - 要是你打算在比10.7.5新的系统上用它,哪怕关闭SIP,签名也得符合苹果的基本要求,所以身份选对是第一步。
3. 正确的签名命令写法
把签名身份换成你的Developer ID Kernel Extension证书名称(比如Developer ID Kernel Extension: Your Name (ABC123)),试试这个命令:
codesign -s "Developer ID Kernel Extension: Your Name (ABC123)" --verbose Downloads/private/tmp/InstallerTemp/M-AudioFireWireBeBoB.kext/
要是Kext里嵌套了其他可执行文件,或者之前有旧签名残留,可以加上-f(强制覆盖)和--deep(深度签名)参数:
codesign -f -s "Developer ID Kernel Extension: Your Name (ABC123)" --deep --verbose Downloads/private/tmp/InstallerTemp/M-AudioFireWireBeBoB.kext/
4. 验证签名是否成功
签完之后一定要验证一下,跑这个命令:
codesign -vvv Downloads/private/tmp/InstallerTemp/M-AudioFireWireBeBoB.kext/
如果输出里出现valid on disk和satisfies its Designated Requirement,就说明签名成功啦。
5. 额外的实用提示
- 就算签了名,在现代macOS上加载这个旧Kext还是得调整SIP设置,比如用
csrutil enable --without kext开启SIP但允许加载未认证的Kext,完全关闭SIP当然也可以,但前者更安全一点。 - 要是你没有苹果开发者账号,也可以用自签名证书:打开Keychain Access,新建一个类型为
Code Signing的证书,然后用这个证书名称替换命令里的身份就行。不过自签名的Kext只能在关闭SIP的系统里用,而且系统更新后可能需要重新签名。
内容的提问来源于stack exchange,提问作者Niklas Arnitz
相关产品推荐
相关产品推荐

