2013-02-12 13 views
7

Próbuję otworzyć mobilny plik konfiguracyjny (mobileconfig) w safari, aby go zainstalować, ale nic nie działa. używam Schemat URL:Otwórz plik .mobileconfig zapisany w aplikacji na 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

i próbuję ustawić całą ścieżkę (plik znajduje się w folderze Documents) do pliku zamiast pliku, nic. jak mogę to zrobić. ?

Edit1: to application zrobić to samo (otwarty safari zainstalować konfigurację)

Edit2: Myślę, że trzeba szukać sposobu, aby wysłać plik (dowolny) na safari i safari będą wiedzieć co z tym zrobić.

Odpowiedz

13
  1. autoryzować zadania w tle

.h plik:

UIBackgroundTaskIdentifier bgTask; 

pliku .m: W applicationDidEnterBackground dodać nowe zadanie w tle:

bgTask = [application beginBackgroundTaskWithExpirationHandler: ^{ 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [application endBackgroundTask:self->bgTask]; 
      self->bgTask = UIBackgroundTaskInvalid; 
     }); 
    }]; 
  1. Dodaj CocoaHTTPServer do swojego projektu

  2. Uruchom serwer i otwórz.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

Nie mogę znaleźć RoutingHTTPServer w CocoaHTTPServer. Czy to jest coś, co stworzyłeś? –

+0

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

+0

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

3

Mobilny plik konfiguracyjny znajduje się wewnątrz piaskownicy aplikacji w aplikacji. Safari nie ma do niego dostępu. Zwracana wartość [UIApplication openURL] wskazuje tylko, czy istnieje aplikacja, która rozumie ten schemat adresu URL: . Wydaje mi się, jakbyś wysyłania tego adresu URL do siebie, zakładając, że dodałeś myAppURLScheme jako uri obsługi do Info.plist pliku.

+0

dziękuję, myślałem tak samo, ale to zobaczyć http://stackoverflow.com/questions/12082184/install-mobileconfig-programmatically (nie 100% to samo), więc spróbuj, bo nie mam pojęcia, jak to zrobić. ale myślę, że to będzie to samo, aby otworzyć dowolny inny plik na safari z piaskownicy. –

+0

W tym scenariuszu plik mobileconfig pochodzi z serwera do Safari. To działa, oczywiście. Procedura obsługi adresu URL służy do powrotu z Safari do Twojej aplikacji po zainstalowaniu profilu Safari i ustawień. – onnoweb

+0

dziękuję, ale moja aplikacja tworzy plik konfiguracyjny i zapisuje go w folderze Dokumenty (bez serwera), więc głównym problemem jest wysłanie pliku z obszaru aplikacji do safari (np. Operacja "otwórz w"). –

0

Myślę, że możesz użyć danych URI do kodowania i uruchamiania mobileconfig. (Nie mam tu urządzenia IOS, więc nie mogę sprawdzić prawy teraz_

Można użyć http://dopiaza.org/tools/datauri/index.php zakodować swój profil (nie zapomnij dodać typ MIME: application/x-jabłko-osika-config)

Następnie można otworzyć:

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

dziękuję, ale widzę 2 problemy: 1.Jak wygenerować adres URL valide z tymi danymi, ponieważ URLWithString: return 'NO', a nie URL Valid? 2. Jak mogę wygenerować te dane? ale myślę, że to może być rozwiązanie (URI danych są obsługiwane w ios 3.2 i wyżej: http://caniuse.com/datauri) –

0

zupełnie nie miał szczęścia albo ale mogę napisać to w każdym razie jeśli ktoś inny może wykorzystać te informacje próbowałem otwierając ciąg poprzez data: URL, który jest obsługiwany przez Mobile Safari, ale nie. openURL: - niestety

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

Do testowania można przedłożyć http:// przed data:, a następnie otworzy się przynajmniej w Safari i można usunąć przedrostek, aby go wypróbować. Może wstrzyknięcie javascript, aby usunąć prefiks, zadziała; Nie wiem

+0

dziękuję, ale to nie działa Mam ten komunikat msg, gdy safari jest otwarte : "safari nie może otworzyć strony, ponieważ jest to plik lokalny." co masz na myśli po wstrzyknięciu javascript? beacause 1) chcę sprzedać moją aplikację w appstore, więc nie hack. 2) musi być offline. –

+0

Nie wiem nawet, czy '.mobileconfig' jest poprawny, więc może to prawda, że ​​nie działa. Mam na myśli coś takiego jak "http: // javascript: window.location = data_string_here", co oczywiście nie działa –

Powiązane problemy