macOS 13中已codesign的Go二进制为何被标记为未知开发者
macOS 13 登录项将已签名LaunchDaemon识别为未知开发者的核心原因
macOS 13 系统设置登录项面板的开发者身份识别逻辑,与spctl校验单个二进制签名合法性的逻辑完全独立:
- 该面板不会直接读取LaunchDaemon/LaunchAgent对应可执行文件本身的签名信息,而是通过启动项plist中声明的关联绑定ID,匹配到对应已安装的签名应用/安装包后,从主程序的签名信息中提取开发者身份展示。
- 你当前的配置存在两个明确不符合系统识别规则的问题:
- LaunchDaemon对应的plist配置缺失必填的
AssociatedBundleIdentifiers字段,系统无法将该启动项和你已签名公证的Mactless.app做归属关联 - 你将Go编写的LaunchDaemon可执行文件放在了.app包的
Contents/Resources目录下,不符合macOS应用Bundle结构规范,可执行辅助程序存放于Resources目录时,不会被系统识别为主应用的合法关联组件,哪怕二进制本身单独签名、公证通过也无法被关联识别。
- LaunchDaemon对应的plist配置缺失必填的
修复方案
- 调整LaunchDaemon二进制的存放路径:将tless从
Contents/Resources移动到主App包内的Contents/Library/LaunchServices目录,签名时按照先签嵌套二进制、再签外层App的顺序执行签名操作,完成后重新走公证流程。 - 在LaunchDaemon对应的plist配置文件中添加关联字段,示例配置如下:
<key>AssociatedBundleIdentifiers</key> <array> <string>你的主App Bundle ID</string> </array>
- 注册LaunchDaemon时优先使用系统官方API:macOS 13及以上版本用
SMAppService注册系统级服务,旧版本兼容使用SMJobBless,避免直接用脚本复制plist到/Library/LaunchDaemons目录的粗暴安装方式。 - 修复完成后可以执行
sfltool dumpbtm命令查看启动项条目信息,只要对应条目的developer字段正确显示你的Developer ID信息,系统设置登录项面板就不会再显示“未知开发者”。
补充说明:
spctl -a校验单个二进制返回accepted、source为Notarized Developer ID,仅代表该二进制本身满足系统运行的签名、公证要求,不能作为登录项归属识别正常的判断依据。
内容的提问来源于stack exchange,提问作者fsctl
相关产品推荐
相关产品推荐

