2016-03-23 227 views
0

我試着更新我的mac的代理設置。 SCDynamicStoreSetValue:返回false,表示更新失敗。這是我使用的代碼。什麼是正確的方法?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以及如何繞過它。

+0

動態存儲包含其中包含的代理設置詞典的網絡服務。您需要獲取所需服務的字典,請參閱[系統配置架構](https://developer.apple.com/library/mac/documentation/Networking/Conceptual/SystemConfigFrameworks/SC_UnderstandSchema/SC_UnderstandSchema.html) – vadian

+0

好的,有問題的字典是Proxies字典。我可以像這樣得到它:let dict = SCDynamicStoreCopyProxies(ds)。字典應該通過哪裏? – brumbrum

+0

[設置當前代理設置]的可能重複(http://stackoverflow.com/questions/36175502/set-current-proxy-settings) – rckoenes

回答

1

SCDynamicStoreSetValue失敗後,調用SCError()獲得錯誤代碼:

let errorCode = SCError() 

或獲取錯誤與字符串:

let errorString = String.fromCString(SCErrorString(SCError())) 

在這兩種情況下,審查Status and Error Codes for the System Configuration Framework。這應該爲您提供SCDynamicStoreSetValue返回false的原因。

(如果您的應用沙盒中,可能的原因是kSCStatusAccessError,或「權限被拒絕」。沙盒應用程序不能設置這些值。)