2013-02-12 28 views
7

Ich versuche, eine mobile Konfigurationsdatei (mobileconfig) in Safari zu öffnen, um es zu installieren, aber nichts funktioniert. Ich benutze URL-Schema:Öffnen Sie .mobileconfig-Datei in Safari ios

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

und ich versuche, den ganzen Weg zu bringen (die Datei in dem Ordner Documents) in die Datei stattdessen filename, nichts. wie kann ich es tun. ?

Edit1: diese application die gleiche (offenen Safari-Konfiguration zu installieren) tun

EDIT2: Ich denke, dass ich die Art und Weise zu suchen haben Datei (jede) Safari, zu senden und zu Safari wissen was damit zu tun ist.

Antwort

13
  1. Autorisieren Hintergrundaufgabe

.h-Datei:

UIBackgroundTaskIdentifier bgTask; 

.m-Datei: In applicationDidEnterBackground eine Aufgabe neuen Hintergrund hinzufügen:

bgTask = [application beginBackgroundTaskWithExpirationHandler: ^{ 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [application endBackgroundTask:self->bgTask]; 
      self->bgTask = UIBackgroundTaskInvalid; 
     }); 
    }]; 
  1. Fügen Sie Ihrem Projekt CocoaHTTPServer hinzu

  2. Führen Sie den Server aus, und öffnen Sie das.mobileconfig Datei:

    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

Ich konnte RoutingHTTPServer in CocoaHTTPServer nicht finden. Ist das etwas, was du geschaffen hast? –

+0

https://github.com/mattstevens/RoutingHTTPServer – malinois

+0

https://github.com/robbiehanson/CocoaHTTPServer – malinois

3

Die mobile Konfigurationsdatei befindet sich in Ihrer Sandbox in Ihrer App. Safari hat keinen Zugriff darauf. Der Rückgabewert von [UIApplication openURL] zeigt nur an, wenn es eine Anwendung gab, die das URL-Schema versteht. Es sieht für mich so aus, als würden Sie diese URL an sich selbst senden, vorausgesetzt, Sie haben myAppURLScheme als uri-Handler zu Ihrer Datei hinzugefügt, die in der Datei gespeichert ist.

+0

danke, ich war das gleiche denken, sondern sehen diese http://stackoverflow.com/questions/12082184/install-mobileconfig-programmatically (nicht zu 100% identisch), so i Probieren Sie es aus, weil ich keine Ahnung habe, wie es geht. aber ich denke, das wird die gleiche Sache sein, um jede andere Art von Datei in Safari von Sandbox zu öffnen. –

+0

In diesem Szenario kommt die Datei mobileconfig von einem Server zu Safari. Das funktioniert natürlich. Der URL-Handler wird verwendet, um von Safari zu Ihrer App zurückzukehren, nachdem Safari und Einstellungen das Profil installiert haben. – onnoweb

+0

danke, aber meine App erstellen Sie die Konfigurationsdatei und speichern Sie sie im Ordner Dokumente (kein Server benötigt), so das Hauptproblem ist, wie die Datei aus der App Sandbox zu Safari senden (wie die 'Öffnen in' Operation). –

0

Ich glaube, Sie Daten URI mobileconfig codieren und starten können. (Ich habe kein iOS-Gerät hier, also kann ich nicht testen rechts now_

Sie können http://dopiaza.org/tools/datauri/index.php verwenden um Ihr Profil zu kodieren (nicht vergessen, MIME-Typen hinzuzufügen: application/x-Apfel-Espe-config)

Dann können Sie öffnen:

[[UIApplication sharedApplication] openURL:dataURLGenerated]; 
+0

danke, aber ich sehe 2 Probleme: 1.how um eine valide URL mit diesen Daten zu generieren, weil URLWithString: NO zurückgeben, nicht eine valide URL? 2.wie kann ich diese Daten generieren? aber ich denke, das kann die Lösung sein (Data URIs werden in ios 3.2 und höher unterstützt: http://caniuse.com/datauri) –

0

hatte durchaus kein Glück entweder aber ich poste diese sowieso, wenn jemand anderes diese Informationen benutzen, kann ich versucht, die Zeichenfolge über data: uRL zu öffnen, die von mobile Safari unterstützt wird, aber nicht durch. openURL: -. leider

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

Zum Testen können Sie http:// vor data: voranstellen, dann wird es zumindest in Safari geöffnet und Sie können das Präfix löschen, um es zu versuchen. Vielleicht wird eine Javascript-Injektion zum Entfernen des Präfixes funktionieren; Ich weiß es nicht.

+0

danke, aber das funktioniert nicht ich habe diese Warnung msg wenn Safari geöffnet ist : "Safari kann die Seite nicht öffnen, da es sich um eine lokale Datei handelt." was meinst du mit Javascript-Injektion? Beacause 1) Ich möchte meine App im Appstore verkaufen, also kein Hack. 2) es muss offline sein. –

+0

Ich weiß nicht einmal, ob die '.mobileconfig 'gültig ist, also ist es vielleicht richtig, dass es nicht funktioniert. Ich meine etwas wie "http: // javascript: window.location = data_string_here" was offensichtlich nicht funktioniert –

Verwandte Themen