NSURLConnection完成时出现错误 - 代码-1002。

25

朋友们,我有一个简单的音频播放器(MPMoviePlayerController),可以播放音频流。在iOS 11上,我遇到了非常有趣的问题,成千上万次我都会出现错误,我的流媒体停止了:

NSURLConnection finished with error - code -1002
我复制了这段代码(我在 Stack Overflow 上看到的),但对我没有帮助:
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>cast.mysite.com</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
        </dict>
    </dict>

也许你知道最好的解决方案?


请确保您从安全服务器(具有有效证书的服务器)流式传输音频。 - Zeeshan Arif
这是义务吗?我有8个HTTP流,在iOS 10上可以完美运行,但在iOS 11上——5分钟后播放器停止。 - Genevios
我在“回答”部分回答了你的问题,因为在评论区很难解决你的问题。 - Zeeshan Arif
谢谢,但我有音频流,我知道音频流不需要使用https。 - Genevios
3个回答

39

这个错误不应该与使用HTTP而非HTTPS有关。App Transport Security失败会返回错误代码-1022。

错误代码-1002表示URL无效。也许你的HTTP实时流媒体播放列表文件包含结构上无效的URL(例如缺少方案、使用其他http/https以外的方案等)?

如需进行额外的调试,请设置此环境变量。

CFNETWORK_DIAGNOSTICS=1

在您的Xcode项目中重新运行应用程序。一旦您知道哪个URL出现了问题,问题很可能会变得更加明显。

如果没有解决,请提交一个错误报告。


你可以尝试将<key>NSExceptionRequiresForwardSecrecy</key><false/>添加到你的每个域名异常中。 - dgatwood
1
可以给我发送类似于这一行的屏幕截图吗?因为我不太理解。谢谢。这对所有跟进我的问题的人来说都非常有帮助。 - Genevios
1
https://dev59.com/9F0a5IYBdhLWcg3wFlNG - dgatwood
1
但是无论如何,新的Xcode带来了很多烦人的问题,比如TIC,这不仅仅是我的看法,只需要看看新版本Xcode在AppStore上的评分就知道了... - Genevios
1
与Xcode无关。这是iOS版本中的附加调试(以及模拟器)。 - dgatwood
显示剩余5条评论

1

如果您的URL中包含空格,可能会出现此问题。我通过用“%20”替换空格来解决它,然后您就可以安全地使用它了。以下是用Objective C代码替换空格的方法。

your_url_variable_name = [your_url_variable_name stringByReplacingOccurrencesOfString:@" " withString:@"%20"];

不,我的URL没有任何空格。就像这个site.com/blabla.json。 - Genevios
任何非法字符都应该导致NSURL为nil,因此,如果您可以成功从中创建NSURL,则不应该是非法字符问题,如果不能成功创建,则问题就在这里。 :) - dgatwood

-2

首先,您必须使用安全服务器(具有有效证书的服务器)。

我不确定是否必要,因为我从未尝试过访问具有无效证书的服务器。您可以尝试此代码(不确定它是否适用于您),将此代码放入Appdelegate.m中。

@implementation NSURLRequest(DataController)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
    return YES;
}
@end

1
我会在2-3天后尝试并回答,如果可以的话我会接受你的答案,但无论如何感谢! - Genevios
7
这是一个非常糟糕的想法。这将禁用您的整个应用程序的所有URL请求安全性,如果您尝试这样做,您的应用程序将被iOS应用商店拒绝。 - dgatwood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接