当我尝试从设备上运行的UI测试发出URL请求(使用URLSession.shared.dataTask
)时,如果URL位于本地网络上,则请求失败,并出现以下错误:
HelloWorldUITests-Runner[20156:4946160] Task <7634F9E1-915D-400B-9B68-4A768D58A4DE>.<1> finished with error [-1003] Error Domain=NSURLErrorDomain Code=-1003 "A server with the specified hostname could not be found." UserInfo={_kCFStreamErrorCodeKey=-72000, NSUnderlyingError=0x28224def0 {Error Domain=kCFErrorDomainCFNetwork Code=-1003 "(null)" UserInfo={_NSURLErrorNWPathKey=satisfied (Path is satisfied), interface: utun5, ipv4, _kCFStreamErrorCodeKey=-72000, _kCFStreamErrorDomainKey=10}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <7634F9E1-915D-400B-9B68-4A768D58A4DE>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <7634F9E1-915D-400B-9B68-4A768D58A4DE>.<1>"
), NSLocalizedDescription=A server with the specified hostname could not be found., NSErrorFailingURLStringKey=http://redacted.local/redacted, NSErrorFailingURLKey=http://redacted.local/redacted, _kCFStreamErrorDomainKey=10}
值得注意的是,我可以成功地发出URL请求:
- 从设备上运行的UI测试目标到外部互联网上的URL
- 从模拟器上运行的UI测试目标到本地URL
- 从设备上运行的应用目标到本地URL
然而,在最后一个应用程序中,应用程序会显示以下警报:
“HelloWorld”希望查找并连接到您本地网络上设备
...并且只有在我接受警告时才能正常工作。如果我点击“不允许”,它就会失败,并出现与上面相同的错误。这向我表明,测试运行程序需要以某种方式被授予与用户点击警告时应用程序获得的权限相同的权限。
我使用的是Xcode 14.0.1,而设备运行的是iOS 15.6.1。
是否有人知道此问题是否有解决方法?
1条答案
按热度按时间omhiaaxx1#
这是iOS 14+的一项功能
访问您的本地网络的应用程序可以收集附近设备的信息,以确定您加入哪些网络以及何时加入。此信息可用于创建您的个人资料。在iOS 14和iPadOS 14中,任何想要与您网络上的设备交互的应用程序在首次尝试浏览您的本地网络时都必须请求许可。
https://support.apple.com/en-us/HT211870
因此,对于设备上的UI测试,我猜您必须手动接受授权一次,然后运行您的UI测试