Safari扩展上的App Transport Security

时间:2015-09-07 16:03:58

标签: ios objective-c nsstring nsurl ios9

我的应用扩展程序需要从许多网站打开网址。我这样做:

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

我可以获取网址,但此时我收到了此错误:

  

App Transport Security已阻止明文HTTP(http://)资源加载,因为它不安全。可以通过应用程序的Info.plist文件配置临时例外。

我试图完全关闭ATS,

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

但它不起作用,我无法在NSExceptionDomain中列出网站。我试过模拟器和设备。有人可以帮忙吗?

修改

我认为导致问题的代码就是这样:

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

我在url log之后使用这行代码将html作为纯文本。

2 个答案:

答案 0 :(得分:4)

您是将NSAppTransportSecurity词典添加到应用扩展程序的 Info.plist 文件中,还是仅添加到父应用的 Info.plist 文件中?因为如果扩展程序正在发出请求,则异常需要位于扩展程序的 Info.plist 文件中。

如果这没有帮助,请尝试直接使用NSURLConnection,看看它是否有所不同。我怀疑它会,但它可能值得一试。

答案 1 :(得分:2)

我遇到了同样的问题,但将NSAllowsArbitraryLoads设置为YES会为我修复此问题。我建议尝试:

NSError *error;

NSStringEncoding encoding;

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

*请注意我使用的是usedEncoding而不是编码。

这将允许您获得错误并查看最佳编码。可能是您使用了错误的编码,或者您传递的文件无法解码;即.mp4,.m4a和.mp3文件不起作用,但.m3u8将会。