使用MDM通过NSUserDefaults配置企业应用程序

时间:2013-12-23 22:39:01

标签: ios ios7 mdm osx-server

我在10.9上的OS X Server 3.0.1中使用Profile Manager将我的企业应用程序推送到运行iOS7的受管设备。这很好用,我也可以推送设备配置设置。

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

ManagedAppConfig提供了一个简单的plist,它应该用于将数据放入应用程序的NSUserDefaults,然后用于app配置;但是,没有给出如何使用MDM将此数据字典导入NSUserDefaults的方向。

我显然缺少一条关于如何将数据发送到托管应用程序的NSUSerDefaults的信息,但到目前为止,我的搜索一直没有结果。是否可以使用Profile Manager进行此操作?我还没有找到OS X Server的另一种方法吗?

以下是Apple关于ManagedAppConfig的文档的引用:

  

“ManagedAppConfig”演示了如何实现托管应用   iOS应用程序中的配置和反馈支持。这个   功能允许移动设备管理(MDM)服务器推送   将字典下载到托管应用程序的NSUserDefaults中   远程配置设置的目的。

以下是带有两个数据的示例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>

docs for NSUserDefaults甚至通过MDM提及配置,但没有给出具体细节。

  

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

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

非常感谢。

3 个答案:

答案 0 :(得分:16)

我写过一篇关于如何从Apple测试ManagedAppConfig的小博客文章。

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

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

答案 1 :(得分:9)

从MDM服务器下推的托管应用配置更改显示在NSUSerDefaults中,因此您可以添加观察者以提醒NSUserDefaults的任何更改。从MDM服务器下推的托管应用程序配置字典存储在名为com.apple.configuration.managed

的密钥中

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

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

示例应用程序的readme.txt文件建议您查看WWDC 2013 Session 301“扩展您的企业和教育用途的应用程序”,以获取此应用程序的演示。

答案 2 :(得分:8)

阅读配置(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捆绑包配置读取。

P,S: 只有托管应用才能获得这些配置。