AFNetworking 2.0 请求挂在 iOS 9 / WatchOS 2 中的 Today Extension 和 Watch 应用程序中

Posted

技术标签:

【中文标题】AFNetworking 2.0 请求挂在 iOS 9 / WatchOS 2 中的 Today Extension 和 Watch 应用程序中【英文标题】:AFNetworking 2.0 requests hanging in Today Extension and Watch app in iOS 9 / WatchOS 2 【发布时间】:2015-09-22 05:13:45 【问题描述】:

在使用 Xcode 7 (GM) 和 Xcode 7.1 (beta 1) 构建 WatchKit 和 Today 扩展时,我遇到了一个非常奇怪和令人沮丧的问题。使用 AFNetworking 2.0(截至本文发布时为最新版本),我从这些扩展中的任何一个中调用以下代码:

AFHTTPRequestOperation *op = [manager GET:endpoint parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) 

    NSLog(@"Response: %@", responseObject);

 failure:^(AFHTTPRequestOperation *operation, NSError *error) 

    NSLog(@"ERROR: %@", error);
];
NSLog(@"Called!");

这里的期望是在记录Called! 之后调用两个块之一。然而,从来没有一个人被处决。

然而,奇怪的是,如果我调用以下行:

[op cancel];

我得到了预期的failure 块的日志输出。我尝试过的任何其他方法(关闭计算机上的 Internet 连接、创建无意义的 URL 等)都无法执行 failure 块。

此时我不确定我是否一直在尝试调试它到深夜,这是否是 Xcode 7.x 的错误,或者我是否在某个地方犯了错误。任何帮助表示赞赏!

【问题讨论】:

【参考方案1】:

看起来这个问题源于几个不同的事情。

问题的根源在于 ios 9 的新应用传输安全规则。这些规则可以是应用程序的info.plist 文件中的overridden using certain keys。但是,我很难在扩展中使用 Xcode 7.0 (GM) 正确保存覆盖键,因为它会在尝试运行项目时抛出 an error。

第 1 步: 在 Xcode 7.1 beta 1 中,Xcode 实际上支持上述键(甚至自动完成),所以我能够将这些键添加到我的 WatchKit 和今天的扩展 info.plist 文件中:

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

第 2 步:此时,AFNetworking 仍处于挂起状态,不允许连接通过。即使现在我也不确定为什么会这样。相反,我求助于使用标准 iOS 类进行网络调用,最终解决了我的问题并能够像往常一样运行请求:

NSMutableURLRequest *connection = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://myurl.com/xyz"]];
[connection setValue:"Bearer myAuthorization" forHTTPHeaderField:@"Authorization"];
[NSURLConnection sendAsynchronousRequest:connection queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 

    if (error == nil) 

        NSString *dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        //Do stuff with data

     else 

        //Error handling
    
]; 

希望这里有一些东西可以帮助将来的人。这完全是一场噩梦,花了一天半的时间才能弄清楚!

【讨论】:

以上是关于AFNetworking 2.0 请求挂在 iOS 9 / WatchOS 2 中的 Today Extension 和 Watch 应用程序中的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 2.0 JSON 漏洞防护

iOS- AFNETWORKING 2.0 -AFHTTPRequestOperationManager - POST-MULTIPART-REQUEST

使用 AFNetworking 2.0 从 iOS 应用程序以流的形式上传 100 张图像

Cocoapods 集成AFNetworking从2.0版本升级到3.0版本的问题

AFNetworking 2.0 和请求标头

在 Afnetworking 2.0 中取消发布请求