URLSession 在 WatchOS 6 上停止工作,OS 5 有什么变化吗?
URLSession stopped working on WatchOS 6, did something change from OS 5?
我有一个使用 iOS、todayExtension 和 watchOS 作为目标的应用程序。
在新的 iOS 13 发布之前,一切正常,那一周我在我的 iPhone 和手表 OS 上下载了 iOS 13 beta 6 在我的手表上。然后,我的应用程序突然停止在手表上运行。当我将其置于调试状态时,我看到 none 的 URLSession 请求正在完成。有什么大的改变吗?
class func verifyInternet(errorHandler:@escaping (String) -> (), completionHandler:@escaping (JSON) -> ()) {
let myUrl = URL(string: "https://google.com/")
var request = URLRequest(url:myUrl!)
request.httpMethod = "GET";
request.httpBody = nil
request.cachePolicy = URLRequest.CachePolicy.reloadIgnoringLocalCacheData
let task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: {
data, response, error in
if error != nil
{
errorHandler(error.debugDescription)
return
}
if response.debugDescription.contains("Status Code: 200") {
completionHandler("connection ok")
return
}
if response != nil, let jsonString = JSON(parseJSON: response!.description) as? JSON {
//convert the JSON to raw NSData
do {
let json = try jsonString //JSON(data: dataFromString)
if json.dictionary?.keys.first?.contains("error") ?? false {
errorHandler(json.dictionary?.values.first?.stringValue ?? "error")
}
completionHandler(json)
} catch {
print("Error \(error)")
}
}
})
task.resume()
}
这实际上是我的一些代码,在 OS 5 上运行良好,在 OS 6(模拟器和手表)上运行不佳(我已经尝试标记选项 "Run independent from iPhone"还)。我会在这里粘贴我遇到的错误,但是当我 运行 我在 Watch 模拟器上的代码时,调试器没有打印任何东西:)。
经过大量调试后,我注意到您应该选中“项目”>“监视扩展”>“常规”>“部署信息”下的 "Supports Running Without iOS App Installation" 复选框。
在 Xcode 测试版中,手表模拟器永远不会像在 Xcode 10.3 上那样与手机模拟器一起启动。如果您不选中该框,手表将永远无法连接互联网,因为它取决于不存在的手机。
我希望其他用户发现这些信息有用!
我有一个使用 iOS、todayExtension 和 watchOS 作为目标的应用程序。
在新的 iOS 13 发布之前,一切正常,那一周我在我的 iPhone 和手表 OS 上下载了 iOS 13 beta 6 在我的手表上。然后,我的应用程序突然停止在手表上运行。当我将其置于调试状态时,我看到 none 的 URLSession 请求正在完成。有什么大的改变吗?
class func verifyInternet(errorHandler:@escaping (String) -> (), completionHandler:@escaping (JSON) -> ()) {
let myUrl = URL(string: "https://google.com/")
var request = URLRequest(url:myUrl!)
request.httpMethod = "GET";
request.httpBody = nil
request.cachePolicy = URLRequest.CachePolicy.reloadIgnoringLocalCacheData
let task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: {
data, response, error in
if error != nil
{
errorHandler(error.debugDescription)
return
}
if response.debugDescription.contains("Status Code: 200") {
completionHandler("connection ok")
return
}
if response != nil, let jsonString = JSON(parseJSON: response!.description) as? JSON {
//convert the JSON to raw NSData
do {
let json = try jsonString //JSON(data: dataFromString)
if json.dictionary?.keys.first?.contains("error") ?? false {
errorHandler(json.dictionary?.values.first?.stringValue ?? "error")
}
completionHandler(json)
} catch {
print("Error \(error)")
}
}
})
task.resume()
}
这实际上是我的一些代码,在 OS 5 上运行良好,在 OS 6(模拟器和手表)上运行不佳(我已经尝试标记选项 "Run independent from iPhone"还)。我会在这里粘贴我遇到的错误,但是当我 运行 我在 Watch 模拟器上的代码时,调试器没有打印任何东西:)。
经过大量调试后,我注意到您应该选中“项目”>“监视扩展”>“常规”>“部署信息”下的 "Supports Running Without iOS App Installation" 复选框。
我希望其他用户发现这些信息有用!