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

时间:2013-02-12 15:25:50

标签: iphone ios file configuration install

我正在尝试在safari中打开移动配置文件(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");

log - > can open

我尝试将所有路径(文件在Documents文件夹中)设置为文件而不是fileName,没有。 我该怎么做。 ?

Edit1 :此application执行相同操作(打开safari以安装配置)

Edit2 :我认为我必须搜索将文件(任何)发送到safari的方式,并且safari将知道如何处理它。

4 个答案:

答案 0 :(得分:13)

  1. 授权后台任务
  2. .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"]];
          }
      

答案 1 :(得分:3)

移动配置文件位于应用的沙箱中。 Safari无法访问它。 [UIApplication openURL]的返回值仅表示是否有应用程序了解 url scheme 。假设您将 myAppURLScheme 作为 uri处理程序添加到 info.plist ,我认为您将该网址发送给自己文件。

答案 2 :(得分:0)

我认为你可以使用数据URI来编码和启动mobileconfig。 (我这里没有IOS设备,所以我现在无法测试_

您可以使用http://dopiaza.org/tools/datauri/index.php对个人资料进行编码(不要忘记添加mime类型:application / x-apple-aspen-config)

然后你可以打开:

[[UIApplication sharedApplication] openURL:dataURLGenerated];

答案 3 :(得分:0)

我也没有运气但是如果其他人可以使用这些信息,我会发布此信息。我尝试通过移动版Safari支持的data:网址打开字符串,但不是openURL:支持 - 遗憾的是。

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");

对于测试,您可以在http://之前添加data:,然后它至少会在Safari中打开,您可以删除前缀以尝试它。也许一些javascript注入删除前缀将起作用;我不知道。