我尝试更新mac的代理设置。SCDynamicStoreSetValue:
返回false,表示更新不成功。这是我使用的代码。正确的方法是什么?
let ds: SCDynamicStoreRef = SCDynamicStoreCreate(nil, "setProxy" as CFString, nil, nil)!
let isUpdated = SCDynamicStoreSetValue(ds, "HTTPProxy" as CFStringRef, "111.111.111.1")
if isUpdated{
print("updated")
}else{
print("not updated")
}
问题是为什么SCDynamicStoreSetValue返回false以及如何规避它。
SCDynamicStoreSetValue
失败后,调用SCError()
获取错误代码:
let errorCode = SCError()
或者以字符串形式获取错误,其中包含:
let errorString = String.fromCString(SCErrorString(SCError()))
在任何一种情况下,请查看系统配置框架的状态和错误代码。这应该为您提供SCDynamicStoreSetValue
返回false的原因。
(如果你的应用程序是沙盒,可能的原因是kSCStatusAccessError
或"权限被拒绝"。沙盒应用程序无法设置这些值。)
我知道这是一个老话题,但SCDynamicStoreSetValue
的第三个参数应该是CFPropertyListRef
(在我们的例子中是CFString
,而不是字符串),就像在文档中一样
在我的案例中,这导致了函数调用失败。