Открыть.файл mobileconfig, сохраненный в приложении в safari ios
Я пытаюсь открыть файл мобильной конфигурации (mobileconfig) в safari, чтобы установить его, но ничего не работает. Я использую схему URL:
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
папка) в файл вместо имени файла, ничего.
как я могу это сделать? ?
Edit1: это приложение сделайте то же самое (откройте safari для установки конфигурации)
Edit2: Я думаю что мне нужно найти способ отправить файл(любой) в safari, и safari будет знать, что с ним делать.
4 ответов
- авторизация фоновой задачи
.H-файл :
UIBackgroundTaskIdentifier bgTask;
.m-файл :
В applicationDidEnterBackground
добавить новую фоновую задачу :
bgTask = [application beginBackgroundTaskWithExpirationHandler: ^{
dispatch_async(dispatch_get_main_queue(), ^{
[application endBackgroundTask:self->bgTask];
self->bgTask = UIBackgroundTaskInvalid;
});
}];
добавить CocoaHTTPServer в проекте
-
запустите сервер и откройте.файл 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"]]; }
файл конфигурации mobile находится внутри вашего приложения в "песочнице". Safari не имеет к нему доступа. Возвращаемое значение [UIApplication openURL]
указывает только, было ли приложение, которое понимает, что схема url. Мне кажется, что вы отправляете этот url себе, предполагая, что вы добавили myAppURLScheme как обработчик uri на информация.файл plist.
Я думаю, вы можете использовать URI данных для кодирования и запуска mobileconfig. (У меня нет устройства IOS здесь, поэтому я не могу проверить прямо сейчас!--2-->
вы можете использовать http://dopiaza.org/tools/datauri/index.php для кодирования профиля (не забудьте добавить тип mime: application/x-apple-aspen-config)
затем вы можете открыть:
[[UIApplication sharedApplication] openURL:dataURLGenerated];
совсем не повезло, но я все равно после этого если кто-то может использовать эту информацию. Я попытался открыть строку через 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 для удаления префикса будет работать; я не знаю.