我的应用扩展程序需要从许多网站打开网址。我这样做:
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作为纯文本。
答案 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将会。