Mac 应用程序在 /etc/hosts 个文件之间切换,如何允许访问?
Mac app to switch between /etc/hosts files, how to allow access?
我正在制作一个小型 mac 菜单应用程序以在我拥有的主机文件之间快速切换,以便在我的网络环境之间切换。
try? FileManager.default.copyItem(at: URL(fileURLWithPath: "/etc/hosts__ENV_1"),
to: URL(fileURLWithPath: "/etc/hosts"))
以上 returns nil
,我假设是由于缺乏权限。
如何提供替换/etc/hosts
文件的权限?
为了修改像 /etc/hosts
这样只能由 root 写入的文件,您需要使用特权帮助工具,使用 SMJobBless()
安装它,并通过 XPC 与其通信。
Apple 的 EvenBetterAuthorizationSample 示例代码演示了执行此操作的推荐方法,并提供了一个您可以使用的小型示例库。它在 Objective-C 中,但是 Objective-C 代码不难集成到 Swift 项目中。 (总有一天,我会发布我自己的 Swift-native 版本,但目前需要清理,然后我才能为来源感到自豪。)
我正在制作一个小型 mac 菜单应用程序以在我拥有的主机文件之间快速切换,以便在我的网络环境之间切换。
try? FileManager.default.copyItem(at: URL(fileURLWithPath: "/etc/hosts__ENV_1"),
to: URL(fileURLWithPath: "/etc/hosts"))
以上 returns nil
,我假设是由于缺乏权限。
如何提供替换/etc/hosts
文件的权限?
为了修改像 /etc/hosts
这样只能由 root 写入的文件,您需要使用特权帮助工具,使用 SMJobBless()
安装它,并通过 XPC 与其通信。
Apple 的 EvenBetterAuthorizationSample 示例代码演示了执行此操作的推荐方法,并提供了一个您可以使用的小型示例库。它在 Objective-C 中,但是 Objective-C 代码不难集成到 Swift 项目中。 (总有一天,我会发布我自己的 Swift-native 版本,但目前需要清理,然后我才能为来源感到自豪。)