gpt4 book ai didi

macos - 在用户删除 .app 时卸载它安装的项目,包括 SMJobBless 助手

转载 作者:行者123 更新时间:2023-12-04 14:28:54 24 4
gpt4 key购买 nike

简短版本:删除应用程序时是否可以删除应用程序设置的帮助工具(SMJobBless() 等)?如果是这样,如何?

长版:

不幸的是,我们正在开发的 Mac 应用程序需要管理员权限才能执行偶尔的操作,而且它还需要一个后台任务才能运行,以便其他应用程序的插件即使在应用程序本身没有运行时也能连接(这个可以是无特权的) .该应用程序将使用 Developer ID 证书进行签名,并且仅在 App Store 之外分发。

我们希望该应用程序尽可能成为“好公民”,在卸载时也是如此。

对于后台任务,我们使用了一个登录项,使用 SMLoginItemSetEnabled() 创建。 .这并不奇怪,因为 XPC 消息传递似乎不起作用(我们正在使用 CFMessagePort 代替 - 欢迎提供替代建议),但是如果用户删除该应用程序,则登录项至少不会再加载下次登录。我怀疑系统中的某个地方仍然有它的踪迹,但是使用了 .app 包中的可执行文件,当它消失时,登录项不再运行。

对于偶尔需要管理员权限的操作,我们有一个特权帮助工具,我们的应用程序使用 SMJobBless() 安装该工具。 ,并且它实现了一个命名的 XPC 服务,所以当它收到来自主应用程序的消息时,任务会按需启动。这是 Apple 在其 Even Better Authorization Sample 中推荐和描述的内容。 .

帮助程序可执行文件被复制到 /Library/PrivilegedHelperTools/来自 SMJobBless() , 嵌入的 launchd.plist 最终在 /Library/LaunchDaemons/ .即使操作系统有关于哪个应用程序“拥有”帮助程序的信息,当用户删除应用程序时它似乎并没有卸载它。除了 uninstall.sh 之外,Apple 的示例没有卸载。显然只在开发过程中使用的脚本。当应用程序未运行时,我们不需要这个帮助程序,因此将其安装为成熟的启动守护程序有点过头了,但我们也希望避免重复使用密码提示来烦扰用户。此外,Apple 建议不要使用除 SMJobBless() 之外的其他形式的管理员权限运行代码。这些天 - 例如 SMJobSubmit()被标记为已弃用。

那么我们如何清理自己呢?

我找到了 SMJobRemove() ,但是 (a) 在我们的情况下,我们什么时候会调用它 - 您不能在 .app 包删除时运行代码,或者可以吗?和 (b) it doesn't actually seem to clean up .

我能想到的唯一两件事不是非常令人满意:

  • 某种卸载程序应用程序或脚本。但这似乎也很丑陋。
  • 不要担心,当用户删除我们的应用程序时,只会留下一团糟。
  • 最佳答案

    Apple Developer Forums 上也有类似的问题,地址为 https://forums.developer.apple.com/thread/66821 - Apple 推荐的是手动卸载机制,如果用户不这样做,则消耗尽可能少的资源。

    Apple DTS 工作人员进一步建议在特权启动守护程序中实现自我卸载机制,通过 XPC 从应用程序触发。这就是我们要做的。

    关于macos - 在用户删除 .app 时卸载它安装的项目,包括 SMJobBless 助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39980495/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com