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 版本,但目前需要清理,然后我才能为来源感到自豪。)