在safari ios中打开保存在应用程序中的.mobileconfig文件

我试图在safari中打开一个移动configuration文件(mobileconfig)来安装它,但没有任何工作。 我使用URL Scheme:

NSURL *finalURL = [NSURL URLWithString:[NSString stringWithFormat:@"myAppURLScheme://%@",fileName]]; BOOL canOpen = [[UIApplication sharedApplication] openURL:finalURL]; if (canOpen) NSLog(@"can open"); else NSLog(@"can't open"); 

日志 – > can open

我试图设置所有的path(该文件是在Documents夹中)文件,而不是文件名,什么都没有。 我该怎么做。 ?

编辑1 :这个应用程序执行相同的操作(打开Safari浏览器来安assembly置)

编辑2 :我认为我必须search的方式发送文件(任何)Safari浏览器,Safari会知道如何处理它。

  1. 授权后台任务

.h文件:

 UIBackgroundTaskIdentifier bgTask; 

.m文件:在applicationDidEnterBackground添加一个新的后台任务:

 bgTask = [application beginBackgroundTaskWithExpirationHandler: ^{ dispatch_async(dispatch_get_main_queue(), ^{ [application endBackgroundTask:self->bgTask]; self->bgTask = UIBackgroundTaskInvalid; }); }]; 
  1. 将CocoaHTTPServer添加到您的项目

  2. 运行服务器并打开.mobileconfig文件:

      RoutingHTTPServer *httpServer = [[RoutingHTTPServer alloc] init]; [httpServer setType:@"_http._tcp."]; [httpServer setPort:12345]; [httpServer setDefaultHeader:@"Content-Type" value:@"application/x-apple-aspen-config"]; [httpServer setDocumentRoot:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]]; if([httpServer start:nil]) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://localhost:12345/myprofile.mobileconfig"]]; } 

移动configuration文件位于应用的沙箱内。 Safari无法访问它。 [UIApplication openURL]的返回值仅指示是否存在理解该urlscheme的应用程序。 它在我看来,就像你发送该URL给你自己,假设你添加myAppURLScheme作为你的info.plist文件的URI处理程序

我想你可以使用数据URI来编码和启动mobileconfig。 (我没有iOS设备,所以我现在不能testing

您可以使用http://dopiaza.org/tools/datauri/index.php编码您的configuration文件(不要忘记添加mimetypes:application / x-apple-aspen-config)

然后你可以打开:

 [[UIApplication sharedApplication] openURL:dataURLGenerated]; 

也没有运气,但我发表这个无论如何,如果别人可以使用这些信息。 我试图通过移动Safari支持的data: url而不是openURL:打开stringopenURL: – 不幸的是。

 NSString *urlHeader = @"data:application/x-apple-aspen-config;charset=utf-8,"; NSString *mobileConf = @"<?xmlversion=\"1.0\"encoding=\"UTF-8\"standalone=\"yes\"?>" "<!DOCTYPEplistPUBLIC\"-//Apple//DTDPLIST1.0//EN\"\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">" "<plistversion=\"1.0\"><dict><key>PayloadUUID</key><string>A0670934-C558-42E1-9E80-9B8E079E9AB2</string><key>PayloadDisplayName</key><string>EnableTethering</string><key>PayloadDescription</key><string>EnablesTethering</string><key>PayloadOrganization</key><string>de.iphone-notes</string><key>PayloadVersion</key><integer>1</integer><key>PayloadIdentifier</key><string>de.iphone-notes.etisalat</string><key>PayloadType</key><string>Configuration</string><key>PayloadContent</key><array><dict><key>PayloadUUID</key><string>C1A41907-0CD9-4DC9-BAF1-A04A73B7E296</string><key>PayloadDisplayName</key><string>AdvancedSettings</string><key>PayloadDescription</key><string>ProvidescustomizationofcarrierAccessPointName.</string><key>PayloadOrganization</key><string>de.sendowski</string><key>PayloadVersion</key><integer>1</integer><key>PayloadIdentifier</key><string>de.iphone-notes.etisalat.apn</string><key>PayloadContent</key><array><dict><key>DefaultsDomainName</key><string>com.apple.managedCarrier</string><key>DefaultsData</key><dict><key>apns</key><array><dict><key>apn</key><string>Etisalat.ae</string><key>username</key><string></string><key>password</key><string></string><key>type-mask</key><integer>-2</integer></dict></array></dict></dict></array><key>PayloadType</key><string>com.apple.apn.managed</string></dict></array></dict></plist>"; mobileConf = [mobileConf stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; NSURL *finalURL = [NSURL URLWithString:[urlHeader stringByAppendingString:mobileConf]]; BOOL canOpen = [[UIApplication sharedApplication] openURL:finalURL]; if (canOpen) NSLog(@"can open"); else NSLog(@"can't open"); 

为了进行testing,您可以在data:前添加http:// ,那么它至less会在Safari中打开,您可以删除前缀来尝试。 也许一些JavaScript注入去除前缀将工作; 我不知道。