2013-02-12 2 views
7

Я пытаюсь открыть файл конфигурации для мобильных устройств (mobileconfig) в сафари для его установки, но ничего не работает. Я использую URL Scheme:Открыть файл .mobileconfig, сохраненный в приложении в 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"); 

журнал ->can open

и я пытаюсь установить все пути (файл находится в папке Documents) в файл вместо файла, ничего. как я могу это сделать. ?

Edit1: это application сделать то же самое (открытое сафари для установки конфигурации)

Edit2: Я думаю, что я должен искать способ отправить файл (любой) на сафари, и сафари будет знать Что с этим делать.

ответ

13
  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"]]; 
        } 
    
+0

Я не смог найти RoutingHTTPServer в CocoaHTTPServer. Это то, что вы создали? –

+0

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

+0

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

3

Мобильный файл конфигурации находится в вашей песочнице . Safari не имеет к нему доступа. Возвращаемое значение [UIApplication openURL] указывает только если была заявка, которая понимает, что url-схема. Мне кажется, что вы отправляете этот URL-адрес себе, при условии, что вы добавили myAppURLScheme в качестве uri-обработчик на ваш info.plist файл.

+0

спасибо, я думал то же самое, но увидеть это http://stackoverflow.com/questions/12082184/install-mobileconfig-programmatically (не 100% такие же), так что я попробуйте, потому что я понятия не имею, как это сделать. но я думаю, что это будет то же самое, что открыть любой другой тип файла в сафари из песочницы. –

+0

В этом случае файл mobileconfig поступает с сервера на Safari. Это работает, конечно. Обработчик URL-адресов используется для возврата из Safari в приложение после того, как Safari и настройки установили профиль. – onnoweb

+0

спасибо, но мое приложение создало файл конфигурации и сохранил его в папке «Документы» (не требуется сервер), поэтому основная проблема заключается в том, как отправить файл из песочницы приложений в сафари (например, операция «открыть»). –

0

Я думаю, вы можете использовать URI данных для кодирования и запуска mobileconfig. (У меня нет устройства IOS, поэтому я не могу проверить правильный Практика_

Вы можете использовать http://dopiaza.org/tools/datauri/index.php кодировать свой профиль (не забудьте добавить тип пантомимы: применение/х-яблочно-осина-конфигурации)

Затем вы можете открыть:

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

спасибо, но я вижу 2 проблемы: 1. Как создать валидный url с этими данными, потому что URLWithString: return 'NO', а не валидный url? 2. Как я могу сгенерировать эти данные? , но я думаю, что это может быть решение (URI данных поддерживаются в ios 3.2 и выше: http://caniuse.com/datauri) –

0

совсем не заладилась либо, но я отправляю это в любом случае, если кто-то может использовать эту информацию, я пытался открывать строку через data: URL, который поддерживается Mobile Safari, но не. 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-инъекция для удаления префикса; Я не знаю.

+0

спасибо, но это не работает. У меня есть это сообщение msg, когда сафари открыты : «Safari не может открыть страницу, потому что это локальный файл». Что вы подразумеваете под инъекцией javascript? beacause 1) Я хочу продать свое приложение в AppStore, чтобы не взломать. 2) он должен быть в автономном режиме. –

+0

Я даже не знаю, действительно ли '.mobileconfig', поэтому, возможно, правильно, что он не работает. Я имею в виду что-то вроде 'http: // javascript: window.location = data_string_here', который явно не работает – 2013-02-16 16:10:20

Смежные вопросы