所以,最近我在Jenkins的构建中出现了很多错误:
[00:28:47]: ▸ testSendingLocalModifications, failed - Failed to log in loginWithUsernamePasswordFailed(Error Domain=NSURLErrorDomain Code=-1009 "The Internet connection appears to be offline." UserInfo={NSUnderlyingError=0x60000025fda0 {Error Domain=kCFErrorDomainCFNetwork Code=-1009 "(null)" UserInfo={_kCFStreamErrorCodeKey=50, _kCFStreamErrorDomainKey=1}}, NSErrorFailingURLStringKey=https://example.net/oauth2/token, NSErrorFailingURLKey=https://staging-api-ec2.enquos.net/oauth2/token, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=50, NSLocalizedDescription=The Internet connection appears to be offline.})
它有时会运行 确定。在实际手机上运行时效果很好。所以它似乎与模拟器有关。这是在最新的Sierra上运行。
我正在尝试找出如何确定连接处于脱机状态。是否只是相信如果它无法获取相关网址?或者它实际上甚至没有尝试获取URL,因为它认为它是脱机的。如果是这样,模拟器本身如何确定它是在线还是离线?底层主机具有连接,因为它很乐意从Github检查代码以编译和构建它。目前,构建成功或不成功的几率为50/50。
如果我VNC到构建服务器并在模拟器上尝试Safari,我可以很好地访问网页,所以它似乎已经连接了。
答案 0 :(得分:0)
简而言之:
import SystemConfiguration
func isConnectedToInternet() -> Bool {
var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
}
}
var flags = SCNetworkReachabilityFlags()
if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
return false
}
let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
return (isReachable && !needsConnection)
}
答案 1 :(得分:0)
Simulator是一个独立的用户空间,共享主机操作系统内核,因此它共享主机操作系统网络堆栈。一般来说,如果mac认为它是在线的,那么模拟器也应如此。
如果您使用的是8.3 Beta,请提交错误并提供sudo sysdiagnose -q
和xcrun simctl diagnose
的输出(最好在启动相关模拟器时)。这将有助于我们追踪这一点。