我有一个需要以root身份运行并由launchd启动的守护程序。这个守护进程需要存储一些用户提供的凭据,所以我使用SecKeychainOpen和类似的函数将它们写入System keychain。
我很确定,因为它以root身份运行,所以我必须使用系统密钥链(因为使用用户的登录密钥链不正确,因为这不像普通用户那样运行)。
我的安装程序在安装结束时使用launchctl将其加载到launchd中。问题是它直到重启后才真正启动。我在插件中将OnLOad设置为true,但似乎在使用系统钥匙串时我需要重新启动才能使其正常工作。
我想知道是否有人知道如何处理这个问题,因为如果不需要重新启动,这将是一个更好的用户体验。所以要清楚,我可以使用launchd以编程方式从守护进程访问系统密钥链而无需重启吗?
感谢您的任何建议或想法。
答案 0 :(得分:3)
因为我最终发现我的问题不是我认为的问题,我想我应该把解决方案放在这里。
事实证明(尽管我在一些网站上阅读过),使用launchd以编程方式访问系统密钥链而不重启是完全可以的。只需以正常方式加载plist(当然是root权限),一切正常。
我的问题是我的postinstall脚本从未运行过,在构建某些mac时实际上从未包含在我的.pkg安装程序中。显然,如果您没有安装PackageMaker.app,macports仍然会为您安装dmg,但安装程序是一个目录而不是正确的单个文件,它可能缺少某些部分(例如我的postinstall脚本)。
可以在Apple Developer网站的Xcode AuxTools包中找到PackageMaker.app(然后需要将它放在/ Applications或macports可以找到的其他地方)。