为什么红蜘蛛在真正的 Apple Watch (WatchOS 6) 上不再工作了? [英] Why is Starscream not working anymore on real Apple Watch (WatchOS 6)?

查看:26
本文介绍了为什么红蜘蛛在真正的 Apple Watch (WatchOS 6) 上不再工作了?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

最近我将 Apple Watch 升级到 WatchOS 6.0.1,我的 iPhone 升级到 iOS 13.1.2,Xcode 升级到 11.1.MacOS 仍然是 10.14.6.

Recently I upgraded my Apple Watch to WatchOS 6.0.1, my iPhone to iOS 13.1.2, Xcode to 11.1. MacOS still 10.14.6.

我创建了一个独立的 Apple Watch 项目,我使用 Starscream 测试 Watch 和 WebSocket 服务器之间的通信:https://github.com/daltoniam/Starscream

I've created an Independent Apple Watch project where I test the communication between the Watch and a WebSocket server using Starscream: https://github.com/daltoniam/Starscream

在模拟器上完美运行,但在真正的 Apple Watch 上,当我尝试连接到服务器时,我遇到这些错误::>

It works perfectly on the Simulator but on real Apple Watch when I try to connect to the server I got these errors:

2019-10-08 18:57:53.064887+0200 BackgroundWebSocketOnlyWatch WatchKit Extension[251:31011] [] nw_connection_get_connected_socket [C1] Client called nw_connection_get_connected_socket on unconnected nw_connection

2019-10-08 18:57:53.068928+0200 BackgroundWebSocketOnlyWatch WatchKit Extension[251:31011] TCP Conn 0x16d8d5f0 Failed : error 0:50 [50]

websocket is disconnected: Optional("The operation couldn’t be completed. Network is down")

我将向您展示我的应用程序代码:

I'll show you the code of my app:

InterfaceController.swift

import WatchKit
import Foundation
import Starscream

class InterfaceController: WKInterfaceController, WebSocketDelegate {

let socket = WebSocket(url: URL(string: "ws://echo.websocket.org/")!)

@IBOutlet var label: WKInterfaceLabel!

/**************************************************************************************************/

override func awake(withContext context: Any?) {
    super.awake(withContext: context)

    socket.delegate = self
}

override func willActivate() {
    // This method is called when watch view controller is about to be visible to user
    super.willActivate()
}

override func didDeactivate() {
    // This method is called when watch view controller is no longer visible
    super.didDeactivate()
}

/************************************************************************************************/

@IBAction func connectButtonPressed() {

    socket.connect()
}

@IBAction func sendButtonPressed() {

    socket.write(string: "Hi!")
}

@IBAction func disconnectButtonPressed() {

    socket.disconnect()
}

/******************************************************************************************/

func websocketDidConnect(socket: WebSocketClient) {
    print("websocket is connected")
    label.setText("Connected")
}
func websocketDidDisconnect(socket: WebSocketClient, error: Error?) {
    print("websocket is disconnected: \(error?.localizedDescription)")
    label.setText("Disconnected")
}
func websocketDidReceiveMessage(socket: WebSocketClient, text: String) {
    print("got some text: \(text)")
    label.setText("Received: \(text)")
    createVibration()

}
func websocketDidReceiveData(socket: WebSocketClient, data: Data) {
    print("got some data: \(data.count)")
}
/******************************************************************************************/

// Creates vibration
func createVibration() {

    WKInterfaceDevice.current().play(.notification)
    print("Vibration created")
}

}

我尝试在 iOS 13.1.2 上使用 红蜘蛛,它在模拟器和真实 iPhone 上都可以完美运行.

I tried using Starscream with iOS 13.1.2 and it works perfectly both on Simulator and real iPhone.

这是 WatchOS 6 的错误还是需要升级的红蜘蛛?

Is this a bug of WatchOS 6 or is Starscream that needs an upgrade?

提前致谢!:)

2019 年 11 月 5 日

5th November 2019

我已将 Apple Watch 更新至 WatchOS 6.1,将 iPhone 更新至 iOS 13.2,但 WebSocket 仍无法在手表上运行...

I've updated my Apple Watch to WatchOS 6.1 and iPhone to iOS 13.2 and WebSocket still doesn't work on the watch...

虽然出现了一些新错误:

Got some new errors though:

2019-11-05 12:33:29.317757+0100 BackgroundWebSocketBothDevices WatchKit Extension[269:37201] dnssd_clientstub ConnectToServer: connect() failed path:/var/run/mDNSResponder Socket:4 Err:-1 Errno:1 Operation not permitted

2019-11-05 12:33:29.317919+0100 BackgroundWebSocketBothDevices WatchKit Extension[269:37201] [] nw_resolver_create_dns_service_locked [C1] DNSServiceCreateDelegateConnection failed: ServiceNotRunning(-65563)

2019-11-05 12:33:29.319083+0100 BackgroundWebSocketBothDevices WatchKit Extension[269:37255] [] nw_connection_get_connected_socket [C1] Client called nw_connection_get_connected_socket on unconnected nw_connection

2019-11-05 12:33:29.319150+0100 BackgroundWebSocketBothDevices WatchKit Extension[269:37255] TCP Conn 0x155a7360 Failed : error 0:-65563 [-65563]

websocket is disconnected: The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -72000.)

推荐答案

WatchOS 不幸的是我们缺少 kCFStream 属性来完成这项工作.

WatchOS us unfortunately is missing the kCFStream properties to make this work.

https://github.com/daltoniam/Starscream/blob/e6b65c6d9077ea48b4a7bdda8994a1d3c6969c8d/Sources/Starscream/WebSocket.swift#L171

这篇关于为什么红蜘蛛在真正的 Apple Watch (WatchOS 6) 上不再工作了?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆