3

我有一个使用 iOS、todayExtension 和 watchOS 作为目标的应用程序。

在新的 iOS 13 发布之前,一切都运行良好,那一周我在 iPhone 上下载了 iOS 13 测试版,在手表上下载了 watchOS 6。然后,突然我的应用程序停止在手表上运行。当我将它进行调试时,我看到我的 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(模拟器和手表)上运行良好的一些代码(我已经尝试将选项标记为“独立于 iPhone 运行”)。我会在这里粘贴我得到的错误,但是当我在 Watch 模拟器上运行我的代码时,调试器没有打印任何东西:)。

4

1 回答 1

0

经过大量调试后,我注意到您应该选中 Project > Watch Extension > General > Deployment Info 下的“Supports Running without iOS App Installation”复选框。 选中该复选框,以便 Watch Simulator 具有 Internet 连接。 在 Xcode 测试版上,手表模拟器永远不会像在 Xcode 10.3 上那样随手机模拟器一起启动。如果您不选中该框,手表将永远无法连接互联网,因为它取决于不存在的手机。

我希望其他用户发现这些信息有用!

于 2019-08-30T15:10:45.720 回答