You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为C语言编写的命令行程序添加com.apple.security.hypervisor权限

给编译后的C语言命令行程序添加com.apple.security.hypervisor权限

嘿,我来帮你搞定这个问题!当你用gcc这类命令行工具编译完C程序后,要让它能正常调用Hypervisor.framework,核心就是通过苹果的codesign工具给二进制文件注入对应的权限。下面是一步步的具体操作:

1. 创建权限配置文件(Entitlements Plist)

首先你需要一个plist文件来告诉系统要启用com.apple.security.hypervisor权限。用任意文本编辑器新建一个文件,比如命名为hypervisor.entitlements,填入以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.hypervisor</key>
    <true/>
</dict>
</plist>

2. 编译你的C程序

先按常规方式编译你的C源码,比如你的源文件是main.c,执行:

gcc main.c -o my_hypervisor_tool

这会生成名为my_hypervisor_tool的二进制可执行文件。

3. 用codesign注入权限并签名

这一步分两种场景,根据你的需求选择:

场景一:本地测试(自签名证书)

如果你只是在自己的机器上测试,用自签名证书就足够了:

  1. 打开钥匙串访问,点击顶部菜单栏的证书助理 -> 创建证书
  2. 填写证书名称(比如"My Local Code Signing"),证书类型选择代码签名,其余选项保持默认,一路点击下一步完成创建。
  3. 回到终端,执行签名命令:
    codesign --entitlements hypervisor.entitlements -s "My Local Code Signing" my_hypervisor_tool
    
    注意替换引号里的名称为你刚创建的证书名。

场景二:分发程序(开发者ID证书)

如果要把工具分发给其他用户,必须用苹果开发者账号的开发者ID证书签名,命令格式如下:

codesign --entitlements hypervisor.entitlements -s "Developer ID Application: Your Full Name (XXXXXX)" my_hypervisor_tool

替换引号里的内容为你的开发者ID证书完整名称(可以在钥匙串访问里查看)。

4. 验证权限是否生效

执行以下命令检查二进制文件的权限:

codesign -d --entitlements - my_hypervisor_tool

如果输出里包含com.apple.security.hypervisor = true,说明权限已经成功添加。

5. 运行程序

现在你可以直接运行你的工具了:

./my_hypervisor_tool

注意:macOS 10.15+系统下,第一次运行可能会弹出安全提示,需要前往系统设置 -> 隐私与安全性,找到对应的提示并允许程序运行。

额外注意事项

  • 自签名的程序仅能在创建证书的本地机器上运行,分发必须使用开发者ID签名,否则其他用户的macOS会阻止执行。
  • 确保你的用户账号有代码签名权限,若遇到权限问题,可尝试在codesign命令前加sudo(但尽量优先确保证书在钥匙串中是可访问状态)。
  • Hypervisor.framework仅支持Intel架构Mac(macOS 10.10+)和Apple Silicon架构Mac(macOS 11+),请确认你的机器符合要求。

内容的提问来源于stack exchange,提问作者Adrian

火山引擎 最新活动