fertiges Watchconnectivity-Beispiel für Swift 3 / XCode 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2020 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • fertiges Watchconnectivity-Beispiel für Swift 3 / XCode 8

    Hallo,

    kennt jemand zufällig ein fertiges Beispiel-Projekt mit funktionierender iPhone-Watch-Kommunikation unter Swift 3 / XCode 8?

    Ich fürchte, mein Projekt ist durch die diversen Swift-Umstellungen und XCode-Rettungsversuche unbrauchbar geworden. Jedenfalls klappt jetzt die Kommunikation nicht mehr. Deswegen wollte ich mir mal eines der vielen Beispiele im Netz anschauen. Allerdings sind die alle noch mit Swift 2 - die nützen mir nichts.

    mfg
    oli b.
  • Dann hole ich etwas weiter aus. Ich hatte vor längerer Zeit eine Anwendung (CashClock) entwickelt, die sich mit der AppleWatch synchronisiert. Als ich das Projekt nach längerer Pause wieder reaktivierte, bekomme ich jetzt beim Start des iPhone-Teils folgende Log-Ausgabe:

    Quellcode

    1. 2016-11-22 21:55:44.556820 CashClock[1074:66094] [WC] WCSession is not reachable
    2. 2016-11-22 21:55:44.557687 CashClock[1074:66094] [WC] -[WCSession _onqueue_notifyOfMessageError:withErrorHandler:] errorHandler: YES with WCErrorCodeNotReachable
    3. AppDelegate.applicationDidBecomeActive: <UIApplication: 0x7f9542b00df0> is active.
    4. Error sending message: Error Domain=WCErrorDomain Code=7007 "WatchConnectivity-Sitzung auf gekoppeltem Gerät nicht erreichbar." UserInfo={NSLocalizedDescription=WatchConnectivity-Sitzung auf gekoppeltem Gerät nicht erreichbar.}
    Für die Kommunikation habe ich einen ConnectivityHandler, der im Wesentlichen so aufgebaut ist:

    Quellcode

    1. import WatchConnectivity
    2. class ConnectivityHandler : NSObject, WCSessionDelegate {
    3. // Keep a reference for the session,
    4. // which will be used later for sending / receiving data
    5. var session = WCSession.default()
    6. ...
    7. }
    Dieser wird im ViewController aufgesetzt und verwendet:

    Quellcode: ClockViewController.swift

    1. class ClockViewController: UIViewController, UITextViewDelegate, ClockObserver {
    2. ...
    3. var connectivityHandler : ConnectivityHandler?
    4. override func viewDidLoad() {
    5. ...
    6. self.connectivityHandler = (UIApplication.shared.delegate as? AppDelegate)?.connectivityHandler
    7. connectivityHandler?.addObserver(self, forKeyPath: "messages", options: NSKeyValueObservingOptions(), context: nil)
    8. ...
    9. }
    10. ...
    11. }
    Alles anzeigen
    Und das Gegenstück auf der Watch ist der InterfaceController:

    Quellcode: InterfaceController.swift

    1. import WatchConnectivity
    2. class InterfaceController: WKInterfaceController, ClockObserver, WCSessionDelegate {
    3. ...
    4. var session = WCSession.default()
    5. ...
    6. }
    Ich hoffe, dass ich die wichtigsten Stelle herauskopiert habe, das komplette Projekt ist ansonsten unter github.com/oboehm/CashClock2/tree/develop/3 zu finden.

    Meine Vermutung ist, dass ich entweder:
    • bei der Umstellung auf Swift 3 irgendwo was kaputt gemacht habe oder
    • mein Projekt einen Schuss hat (dafür spricht, dass ich im Debugger Navigator nicht beide Anwendungen sehe).
    Zur Fehlereinkreisung wollte ich einfach mal ein korrektes Swift-3-Projekt hernehmen, um das korrekte Verhalten im Simulator nachvollziehen zu können. Ich kämpfe vor allem mit Xcode und wollte deswegen mal einem anderen Projekt einfach mal ein bißchen rumspielen, um das (für mich nicht immer nachvollziehbare) Verhalten von Xcode besser untersuchen zu können.
  • Hi,

    dein Problem steht direkt hier:

    Quellcode

    1. 2016-11-22 21:55:44.556820 CashClock[1074:66094] [WC] WCSession is not reachable
    Ich habe ähnliche Probleme gehabt, es war nix falsch programmiert. Nur bei mir hatte sich die Watch verschluckt und musste neu gestartet werden. Dann ging das Debugger auch wieder.
    Vielen Dank

    Gruß

    Bongartz