首先,这个任务是可能的。如果您将配置文件放在网页上并从 Safari 中点击它,它会被安装。如果您通过电子邮件发送配置文件并单击附件,它也会被安装。在这种情况下,“已安装”意味着“调用了安装 UI”-但我甚至没能做到那一步。
因此,我认为启动配置文件安装涉及导航到其作为 URL。我将配置文件添加到我的应用程序包中。
A) 首先,我尝试使用 file://URL 通过 [sharedApp openURL] 打开我的应用程序包中的文件。没有运气 - 什么都没有发生。
B) 然后,我将一个包含配置文件链接的 HTML 页面添加到我的应用程序包中,并将其加载到 UIWebView 中。单击链接什么也没发生。但是,从 Web 服务器在 Safari 中加载相同的页面却可以正常工作 - 链接是可点击的,配置文件也会被安装。我提供了一个 UIWebViewDelegate,在每个导航请求中回答 YES - 没有任何区别。
C) 然后,我尝试在 Safari 中从我的包中加载相同的 Web 页面(使用[sharedApp openURL])- 什么也没发生。我猜测,Safari 无法看到我的应用程序包中的文件。
D) 将页面和配置文件上传到 Web 服务器是可行的,但在组织层面上很麻烦,更不用说是失败的另一个原因(如果没有3G覆盖怎么办?等等)。
因此,我的一个重要问题是:如何通过编程方式安装配置文件?
另外还有一些小问题:什么会使链接在 UIWebView 中无法单击?是否可以从我的应用程序包中的 file://URL 在 Safari 中加载页面?如果不行,是否有本地位置可以放置文件,以便 Safari 可以找到它们呢?
编辑B):问题在于我们链接到了一个个人资料。我将它从.mobileconfig重命名为.xml(因为它真的是XML),修改了链接。然后这个链接在我的UIWebView中工作了。重新命名回来——同样的问题。看起来像是UIWebView不愿意做应用程序级别的操作——因为安装配置文件会关闭应用程序。我尝试通过UIWebViewDelegate告诉它没问题,但并没有说服它。同样的行为也出现在UIWebView内的mailto: URL。
对于mailto: URL,常见的技巧是将它们转换为[openURL]调用,但这对我的情况不太适用,请参阅方案A。
对于itms: URL,UIWebView按预期工作...
编辑2:尝试通过[openURL]向Safari提供数据URL——不起作用,请参阅这里:iPhone在Safari中打开数据:Url
编辑3:发现很多关于Safari不支持file:// URL的信息。然而,UIWebView非常支持。而且模拟器上的Safari可以打开它们。最后一个部分最让人沮丧。
编辑4:我从未找到解决方案。相反,我制作了一个简单的网络界面,用户可以通过它将配置文件发送到他们的电子邮件。