2015-09-07 1 views
8

Моему расширению приложения необходимо открыть URL-адрес с многих веб-сайтов. Я делаю следующим образом:App Transport Security на расширении Safari

for (NSExtensionItem *item in self.extensionContext.inputItems) { 

    for (NSItemProvider *itemProvider in item.attachments) { 

     if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeURL]) { 

      [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeURL options:nil completionHandler:^(NSURL *url, NSError *error) { 
       NSLog(@"URL: %@",url); 

я могу получить URL, но в этот момент я получил эту ошибку:

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

Я попытался полностью выключить АТС,

<key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSAllowsArbitraryLoads</key> <true/> 
    </dict> 

но он не работает, и я не могу перечислять веб-сайты внутри NSExceptionDomain. Я пробовал на симуляторе и на устройстве. Кто-нибудь может помочь?

EDIT

я думаю, что код, который вызывает вопрос, что это:

NSString* htmlString = [NSString stringWithContentsOfURL: url encoding:NSUTF8StringEncoding] 

Я использую эту строку кода после входа URL-адрес, чтобы получить HTML как простой текст.

ответ

5

Вы добавив NSAppTransportSecurity словарь в Info.plist файла внутренней линии приложения, или просто в Info.plist файла родительского приложения? Поскольку, если расширение делает запросы, исключение должно быть в файле файла Info.plist.

Если это не поможет, попробуйте напрямую использовать NSURLConnection и посмотреть, не имеет значения. Я сомневаюсь, что это произойдет, но, возможно, стоит попробовать.

3

У меня возникла та же проблема, но установка NSAllowsArbitraryLoads в YES исправлена ​​для меня. Я предлагаю попробовать:

NSError *error; 

NSStringEncoding encoding; 

NSString *content = [NSString stringWithContentsOfURL:contentURL usedEncoding:&encoding error:&error]; 

* Обратите внимание, что я использую usedEncoding вместо кодирования.

Это позволит вам получить информацию об ошибке, и посмотреть, что такое лучшая кодировка. Возможно, вы используете неправильную кодировку или что файл, который вы передаете, не может быть декодирован; т. е. файлы .mp4, .m4a и .mp3 не будут работать, но .m3u8 будет.

+0

Спасибо за ваш ответ, но он не работает для меня. Это значение в plist установлено в YES, и я попробовал ваш метод, чтобы получить html, но он возвращает null мне – Totka

+0

@Totka Я предполагаю, что вы пробовали этот URL-адрес в ios8, и он работает. Я обнаружил, что иногда добавление «s» к http заставляет его работать на ios9. –