Open .mobileconfig file saved in application in safari ios

后端 未结 4 2003
北恋
北恋 2020-12-15 00:29

I\'m trying to open a mobile configuration file (mobileconfig) in safari to install it but nothing work. I use URL Scheme:

NSURL *finalURL = [NSURL URLWithS         


        
相关标签:
4条回答
  • 2020-12-15 01:07

    The mobile config file is inside your app's sandbox. Safari doesn't have access to it. The return value of [UIApplication openURL] only indicates if there was an application that understands that url scheme. It looks to me as if you're sending that url to yourself, assuming that you added myAppURLScheme as a uri handler to your info.plist file.

    0 讨论(0)
  • 2020-12-15 01:15

    quite had no luck either but I post this anyway if someone else can use this information. I tried opening the string via data: url which is supported by Mobile Safari, but not by openURL: – sadly.

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

    For testing you can prepend http:// before data: then it will at least open in Safari and you can delete the prefix to try it. Maybe some javascript injection to remove the prefix will work; I don't know.

    0 讨论(0)
  • 2020-12-15 01:17
    1. Authorize a background task

    .h file :

    UIBackgroundTaskIdentifier bgTask;
    

    .m file : In applicationDidEnterBackground add a new background task :

    bgTask = [application beginBackgroundTaskWithExpirationHandler: ^{
            dispatch_async(dispatch_get_main_queue(), ^{
                [application endBackgroundTask:self->bgTask];
                self->bgTask = UIBackgroundTaskInvalid;
            });
        }];
    
    1. Add CocoaHTTPServer to your project

    2. Run the server and open the .mobileconfig file :

          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"]];
          }
      
    0 讨论(0)
  • 2020-12-15 01:27

    I think you can use data URI to encode and launch mobileconfig. (I don't have IOS device here, so I cannot test right now_

    You can use http://dopiaza.org/tools/datauri/index.php to encode your profile (don't forget to add mime type: application/x-apple-aspen-config)

    Then you can open:

    [[UIApplication sharedApplication] openURL:dataURLGenerated];
    
    0 讨论(0)
提交回复
热议问题