使用MDM通过NSUserDefaultsconfiguration企业应用程序

我在10.9的OS X Server 3.0.1中使用Profile Manager将我的企业应用程序推送到运行iOS7的托pipe设备。 这工作正常,我也能够推动设备configuration设置。

我的障碍是如何获取Apple示例项目ManagedAppConfig中提供的信息,并将其应用到由Profile Manager分发的应用程序。

ManagedAppConfig提供了一个简单的plist,用于将数据放入应用程序的NSUserDefaults中,然后用于应用​​程序configuration; 但是,如何使用MDM将这个数据字典放到NSUserDefaults中是没有方向的。

我显然错过了一个关于如何将数据发送到托pipe应用程序的NSUSerDefaults的信息,但到目前为止,我的search没有结果。 configuration文件pipe理器有可能吗? 有没有我还没有find的OS X服务器的另一种方式?

以下是来自苹果的ManagedAppConfig文档的引用:

“ManagedAppConfig”演示了如何在iOS应用程序中实现托pipe应用程序configuration和反馈支持。 此function允许移动设备pipe理(MDM)服务器将字典压入托pipe应用程序的NSUserDefaults中,以便远程configuration设置。

下面是示例plist的两个数据,这些数据放在应用程序的NSUserDefaults中:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>serverURL</key> <string>http://developer.apple.com/</string> <key>disableCloudDocumentSync</key> <true/> </dict> </plist> 

NSUserDefaults的文档甚至提到通过MDMconfiguration,但没有具体的说明。

如果您的应用程序支持托pipe环境,则可以使用NSUserDefaults对象来确定pipe理员为了用户的利益pipe理哪些首选项。 托pipe环境对应于计算机实验室或教室,pipe理员或教师可能希望以特定方式configuration系统。 在这些情况下,教师可以build立一套默认的偏好,并强制这些偏好的用户。 如果以这种方式pipe理首选项,则应用程序应禁止用户通过禁用任何适当的控件来编辑该首选项。

我的下午一直在追寻这个难以捉摸的信息而没有成功,所以我请求SO社区的帮助。 任何人都可以指向我需要使用MDM将数据字典粘贴到NSUserDefaults的信息?

非常感谢。

我已经写了一篇关于如何去testingApple的ManagedAppConfig的小博客文章。

http://tomasmcguinness.com/2014/03/07/exploring-apples-managedappconfig-demo/

披露:这篇文章描述了使用我写的www.testmdmapp.com。

从MDM服务器下载的托pipe应用程序configuration更改显示在NSUSerDefaults以便您可以添加观察程序以提醒NSUserDefaults发生任何更改。 从MDM服务器下推的托pipe应用程序configuration字典存储在名为com.apple.configuration.managed

您的应用程序还可以将包含反馈的字典发送到MDM服务器。 发送回MDM服务器作为反馈的字典必须存储在此关键字com.apple.feedback.managed

为了testing所有这些,您需要一个由MDM服务器pipe理的设备,并且应用程序必须由支持ApplicationConfiguration设置和ManagedApplicationFeedback命令的MDM服务器安装。

示例应用程序的readme.txt文件build议您参阅WWDC 2013年会301“扩展您的企业和教育应用程序”以获取此应用程序的演示。

读取configuration(swift 3):

 if let managedConf = UserDefaults.standard.object(forKey: "com.apple.configuration.managed") as? [String:Any?] { if let serverURL = managedConf["serverURL"] as? String{ return serverURL } } if let serverURL = Bundle.main.object(forInfoDictionaryKey: "serverURL") as? String { return serverURL } return "https://apple.com/" 

正如您所看到的 – 应用程序需要手动启用从MDM软件包configuration读取。

P,S:只有托pipe的应用可以获得这些configuration。