【问题标题】:Set the "Location" value in Network pref pane without using private APIs在不使用私有 API 的情况下在网络首选项窗格中设置“位置”值
【发布时间】:2011-12-06 15:36:04
【问题描述】:

有没有一种方法可以在不使用私有 API 的情况下以编程方式在“网络”首选项窗格中设置“位置”值?

我需要以 Mac App Store 接受的方式执行此操作。

【问题讨论】:

  • 这有什么用?如果用户在不知情的情况下突然改变位置,我认为用户不会太高兴。
  • 客户想要该功能。去图吧。

标签: objective-c macos cocoa location mac-app-store


【解决方案1】:

AFAIK 没有库函数可以可靠地实现这一点,但您可以执行 networksetup 工具:

/usr/sbin/networksetup -switchtolocation $LOCATION

唉,我不确定 MAS 应用是否允许这样做。唯一确定的方法就是一如既往地尝试。

【讨论】:

    【解决方案2】:

    实际上,个公开的可用 API 可以满足您的需求。

    看看System Configuration framework。我在自己的代码中使用的设置新位置的实际调用(我的用户完全意识到它正在发生)是SCNetworkSetSetCurrent

    也就是说,您不能在自己的代码中执行此操作有两个原因:

    第 1 号)正如 @gcbrueckmann 所说(并且为他所说的 +1),在 Mac App Store 中出售的沙盒应用程序中这样做肯定是不行的。

    数字 2) 如果您要弄乱修改系统级别设置的系统配置设置,您需要通过特权(即以管理员或 root 身份运行)工具或应用程序进行操作。

    【讨论】:

    • 根据我的经验,SCNetworkSetSetCurrent() 无法按预期工作(正如您所指出的,需要 root 权限)。但是,networksetup 工具方法没有。 (不过,它记录了需要管理员权限。)
    【解决方案3】:

    scselect 可以工作,不需要管理员权限。

    scselect $LOCATION
    

    但您可能无法在沙盒中使用它。

    您也可以通过 AppleScript 更改它,但同样,从沙盒中可能会出现问题。

    【讨论】:

      猜你喜欢
      • 2015-07-13
      • 2021-10-27
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多