iOS模拟器不向运行tomcat webservice的本地主机mac发送http请求

iOS模拟器不向运行tomcat webservice的本地主机mac发送http请求,ios,swift,swift3,Ios,Swift,Swift3,重要信息,我在一个测试用例下运行所有这些 我的URL是http://my-MacBook-Pro.local:8080/myapi/v2/Driver/getDriver?domain=123&driver=125&key=9808098 如果我将此URL粘贴到运行在同一台iPhone模拟器上的Safari上。它用JSON响应。我注意到我的catalina.out报告了这个请求 我已经在Settings->Developer上启用了允许HTTP服务 这是代码片段 print("fullurl -

重要信息,我在一个测试用例下运行所有这些

我的URL是
http://my-MacBook-Pro.local:8080/myapi/v2/Driver/getDriver?domain=123&driver=125&key=9808098

如果我将此URL粘贴到运行在同一台iPhone模拟器上的Safari上。它用JSON响应。我注意到我的catalina.out报告了这个请求

我已经在
Settings->Developer
上启用了
允许HTTP服务

这是代码片段

print("fullurl ->"+urlComponents.url!.absoluteString)

URLSession.shared.dataTask(with: urlComponents.url!, completionHandler: {
        (data, response, error) in
        if(error != nil){
            print("error")
        }else{
            do{
                let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : AnyObject]
                print (json)

            }catch let error as NSError{
                print(error)
            }
        }
    }).resume()
编辑

info.plist
中添加了以下内容,但我的http请求仍然没有通过我的
localhost
mac在
端口8080上运行tomcat

<dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>My-MacBook-Pro.local</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
        </dict>
    </dict> 

我猜我的代码有问题。

您需要在info.plist文件中设置适当的标志,就像请求跟踪用户位置或访问照片库和相机一样。默认情况下,苹果会阻止对不安全web调用(即http)的请求


您可以查看如何设置单个异常,或者将
nsallowsrabirtualloads
设置为true以允许
所有不安全的调用。当然,这被认为是更简单但不太安全的选项。

将其放在AppDelegate中:

setenv("CFNETWORK_DIAGNOSTICS", "3", 1);
就像这里描述的那样


这应该像“网络日志文件在file:x中”一样注销,您可以将该文件grep为您的URL,并检查是否有任何记录的错误没有显示在您的应用程序中。这是调试ATS或其他网络连接问题的一种非常好的方法,因为它非常冗长。

在测试用例下运行网络调用需要
xctestexpection
的框架

测试用例不等待调用
async
completionHandlers
。不幸的是,
xtestexpection
框架对设计不友好。我们应该能够在不改变类结构的情况下集成测试用例


让我们在控制台日志中跟踪对此的响应是否有错误?如果是,请将控制台日志中的无错误粘贴到此处。您的代码中有一堆
print
语句。您可以共享这些语句的输出吗?尚未运行。我向info.plist添加了权限。您看到了吗?我明天再看。添加
NSALLOWSArbitaryLoads
不起作用,我仍然看不到tomcat catalina。这个Xcode测试用例中的日志我想这就是我要找的。您的意思是,异步http响应将继续运行并登录到网络日志文件中进行脱机分析。伟大的我将这一行添加到AppDelegate,但我不知道在哪里可以找到网络日志文件。我所能看到的只是“测试会话日志”,我想我应该在CrashReporter文件夹中的
Logs
下找到该文件。我找不到该文件夹。设置该文件夹时,它应该是首先登录到控制台的内容之一。我是作为测试用例而不是应用程序运行它的。现在,当我把它作为一个应用程序运行时,一切都开始工作了。请发布运行它的整个方法
setenv("CFNETWORK_DIAGNOSTICS", "3", 1);