为什么红蜘蛛在真正的 Apple Watch (WatchOS 6) 上不再工作了? [英] Why is Starscream not working anymore on real 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屋!