如何调整macOS中Launch Daemon/Agent在登录项列表的显示内容?
我在macOS上部署了系统级Launch Daemon,对应的配置plist文件路径为/Library/LaunchDaemons/com.example.MyDaemon.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>MachServices</key> <dict> <key>com.example.MyDaemon.launch.agent</key> <true/> </dict> <key>Disabled</key> <false/> <key>Label</key> <string>com.example.MyDaemon</string> <key>Program</key> <string>/Library/PrivilegedHelperTools/com.example/MyDaemon</string> <key>ProgramArguments</key> <array> <string>-d</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> </dict> </plist>
安装该plist或用户重新登录时,macOS会弹出不友好的提示窗口,程序也会出现在「设置-通用-登录项」列表中。针对这一情况,我有三个疑问,对应的解答如下:
疑问1:能否自定义弹窗中显示的程序名称?当前弹窗显示“MyDaemon”,希望替换为更友好的描述
可以自定义。弹窗里的名称读取的是程序二进制文件的显示名称(CFBundleDisplayName),你需要给Daemon程序添加Info.plist文件,在其中设置CFBundleDisplayName字段为你想要的友好名称。如果你的Daemon是命令行工具,建议把它放进标准的.app包结构的Contents/MacOS目录下,配合Info.plist来定义显示信息;也可以在代码签名时,把这些显示信息嵌入到二进制的代码段中。
疑问2:登录项中显示「来自未识别开发者」的提示,其他程序无此问题,该如何解决?
这是因为你的程序没有完成苹果要求的开发者签名+公证流程,解决步骤如下:
- 用苹果开发者账号,通过
codesign命令给Daemon程序做代码签名; - 将签名后的程序提交给苹果完成公证;
- 确保
/Library/PrivilegedHelperTools目录下的程序文件权限符合macOS要求,必要时给plist文件也做签名。
完成以上操作后,系统就能识别你的开发者身份,不再显示“未识别开发者”的提示。
疑问3:为何我的程序会触发该弹窗,而Zoom等程序不会?
Zoom这类正规软件都完成了苹果要求的完整代码签名+公证流程,而且它们的Launch Daemon/Agent是通过苹果认可的方式部署的(比如使用SMJobBless框架安装Privileged Helper Tools),这种方式属于用户授权的合法操作,系统不会触发警告。另外,它们的程序都包含完整的Info.plist信息,系统能正确识别程序的用途和开发者身份,自然不会弹出安全提示。而你的程序未经过这些合规步骤,系统无法确认其安全性,就会触发默认的安全弹窗。
内容的提问来源于stack exchange,提问作者c00000fd

