You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS下使用SFML开发,如何避免每次编译后重设系统权限?

MacOS 10.14.2下SFML鼠标定位权限重复授权问题解决方案

方案1:为编译产物添加固定代码签名

MacOS权限系统通过程序的代码签名/哈希值识别应用,每次编译后程序哈希变化会被判定为新应用。用自签名证书固定签名,可让系统识别为同一应用:

  • 打开「钥匙串访问」→「证书助理」→「创建证书」,自定义名称(比如MyDevSign),证书类型选「代码签名」,存储位置设为「登录」,完成创建。
  • 修改编译脚本,在编译结束后添加签名命令:
    codesign -s "MyDevSign" ./你的程序文件名
    
    后续每次编译后自动执行签名,系统会保留已授权的权限。

方案2:将可执行文件打包为标准.app应用包

MacOS对.app格式应用的权限识别更稳定,替换包内可执行文件不会触发权限重新验证:

  • 创建如下目录结构:
    YourGame.app/
    ├─ Contents/
    │  ├─ MacOS/
    │  │  └─ 编译好的可执行文件
    │  └─ Info.plist
    
  • 在Info.plist中添加基础配置(示例):
    <?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>CFBundleName</key>
        <string>YourGame</string>
        <key>CFBundleExecutable</key>
        <string>你的可执行文件名</string>
        <key>CFBundleIdentifier</key>
        <string>com.yourname.yourgame</string>
    </dict>
    </plist>
    
  • 第一次运行YourGame.app时在系统设置中添加权限,后续仅需替换MacOS目录下的可执行文件即可,无需重新授权。

方案3:临时禁用权限验证(仅开发调试用)

适合快速调试,重启后失效,不建议用于正式发布:

  • 执行终端命令关闭辅助功能权限验证:
    sudo defaults write /Library/Preferences/com.apple.security.devicecontrol.plist DisableDeviceControl -bool true
    
  • 重启系统后,程序可直接调用鼠标定位功能。调试完成后恢复设置:
    sudo defaults delete /Library/Preferences/com.apple.security.devicecontrol.plist DisableDeviceControl
    
    再次重启系统生效。

方案4:直接调用CoreGraphics API替代SFML封装

绕开SFML的鼠标定位方法,直接调用系统CoreGraphics框架实现,配合签名解决权限问题:

  • 编写自定义鼠标定位函数:
    #include <CoreGraphics/CoreGraphics.h>
    
    void setMousePos(int x, int y) {
        CGEventRef moveEvent = CGEventCreateMouseEvent(
            NULL, kCGEventMouseMoved,
            CGPointMake(static_cast<CGFloat>(x), static_cast<CGFloat>(y)),
            kCGMouseButtonLeft // 仅占位,不影响鼠标移动
        );
        CGEventPost(kCGHIDEventTap, moveEvent);
        CFRelease(moveEvent);
    }
    
  • 编译时链接CoreGraphics框架:
    g++ your_source.cpp -o your_program -lsfml-graphics -lsfml-window -lsfml-system -framework CoreGraphics
    
  • 为编译后的程序添加固定签名,权限一次授权即可重复使用。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:22:38