【发布时间】:2018-04-13 05:03:56
【问题描述】:
我可以从下面的 MDM 有效负载托管应用程序配置中读取要读取的代码
func getManagedAppServerUrl() -> String? {
if let managedConf = UserDefaults.standard.object(forKey: "com.apple.configuration.managed") as? [String:Any] {
if let serverURL = managedConf["server_url"] as? String{
return serverURL
}
}
return nil
}
以上代码按预期工作。
我希望在 MDM 服务器对 “MDM 有效负载托管应用配置”
进行更改时收到通知我尝试在关键 “com.apple.configuration.managed” 上添加 Userdefault 观察者,下面是添加观察者的代码
UserDefaults.standard.addObserver(self, forKeyPath: "com.apple.configuration.managed", options: NSKeyValueObservingOptions.new, context: nil)
回调方法,一旦发生变化就会被调用
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {//key value of mdm configraion change detection
if let keyPathChangeDetect = keyPath {
if keyPathChangeDetect == "com.apple.configuration.managed" {
print("configuration change detected")
}
}
}
但回调方法,即 override func observeValue.... 当服务器对托管应用程序配置进行更改时,永远不会收到调用。
即使应用程序使用计时器进行了更改并更改了 "com.apple.configuration.managed" 用户默认值也不会撤销 observeValue 方法。
【问题讨论】:
-
我有完全相同的问题,不希望在 NSUserDefaults 上设置通知,因为我的应用程序一直在写入,我只想知道托管字典中是否有 MDM 更改.你找到解决办法了吗?
-
@Plasma 我在下面为你写了答案