watchOS-Problembehandlung

Diese Seite enthält zusätzliche Informationen und Problemumgehungen für Probleme, die möglicherweise auftreten.

Bekannte Probleme

Allgemein

  • Frühere Versionen von Visual Studio für Mac fälschlicherweise eines der AppleCompanionSettings-Symbole mit 88 x 88 Pixeln anzeigen. Dies führt zu einem Fehler des fehlenden Symbols, wenn Sie versuchen, an die App Store zu übermitteln. Dieses Symbol sollte 87 x 87 Pixel sein (29 Einheiten für @3x Retina-Bildschirme). Sie können dies nicht in Visual Studio für Mac beheben– entweder das Imageobjekt in Xcode bearbeiten oder die Datei Contents.json manuell bearbeiten.

  • Wenn die Info.plist > WKApp Bundle-ID des Watch-Erweiterungsprojekts nicht ordnungsgemäß auf die Bundle-ID der Watch-App festgelegt ist, kann der Debugger keine Verbindung herstellen, und Visual Studio für Mac wartet mit der Meldung "Warten auf die Verbindung des Debuggers".

  • Debuggen wird im Benachrichtigungsmodus unterstützt, kann aber unzuverlässig sein. Wiederholungen funktionieren manchmal. Vergewissern Sie sich, dass die Info.plistWKCompanionAppBundleIdentifier der Watch-App so festgelegt ist, dass sie mit dem Bundle-Bezeichner der übergeordneten iOS-/Container-App (also der, die auf dem iPhone ausgeführt wird) übereinstimmt.

  • iOS Designer zeigt keine Einstiegspunktpfeile für Controller der Glance- oder Benachrichtigungsschnittstelle an.

  • Sie können einem Storyboard nicht zwei WKNotificationControllers hinzufügen. Problemumgehung: Das notificationCategory Element im Storyboard-XML wird immer mit demselben ideingefügt. Um dieses Problem zu umgehen, können Sie zwei (oder mehr) Benachrichtigungscontroller hinzufügen, die Storyboarddatei in einem Text-Editor öffnen und das Element dann manuell so ändern id , dass es eindeutig ist.

    Öffnen der Storyboarddatei in einem Text-Editor und manuelles Ändern des ID-Elements in eindeutig

  • Beim Starten der App wird möglicherweise die Fehlermeldung "Die Anwendung wurde nicht erstellt" angezeigt. Dies tritt nach einem Clean auf, wenn das Startprojekt auf das watch-Erweiterungsprojekt festgelegt ist. Der Fix besteht darin, Alle neu erstellen > auszuwählen und die App dann erneut zu starten.

Entfernen des Alphakanals aus Symbolbildern

Symbole sollten keinen Alphakanal enthalten (der Alphakanal definiert transparente Bereiche eines Bilds), andernfalls wird die App während App Store Übermittlung mit einem Ähnlichen Fehler abgelehnt:

Invalid Icon - The watch application '...watchkitextension.appex/WatchApp.app'
contains an icon file '...watchkitextension.appex/WatchApp.app/Icon-27.5@2x.png'
with an alpha channel. Icons should not have an alpha channel.

Es ist einfach, den Alphakanal unter Mac OS X mithilfe der Vorschau-App zu entfernen:

  1. Öffnen Sie das Symbolbild in der Vorschau, und wählen Sie dann Dateiexport > aus.

  2. Das angezeigte Dialogfeld enthält ein Alpha-Kontrollkästchen , wenn ein Alphakanal vorhanden ist.

    Das angezeigte Dialogfeld enthält ein Alpha-Kontrollkästchen, wenn ein Alphakanal vorhanden ist.

  3. Deaktivieren Sie das Kontrollkästchen Alpha , und speichern Sie die Datei am richtigen Speicherort.

  4. Das Symbolbild sollte nun die Überprüfungsprüfungen von Apple bestehen.

Manuelles Hinzufügen von Schnittstellencontrollerdateien

Wichtig

Die WatchKit-Unterstützung von Xamarin umfasst das Entwerfen watch Storyboards im iOS-Designer (sowohl in Visual Studio für Mac als auch in Visual Studio), für die die unten beschriebenen Schritte nicht erforderlich sind. Geben Sie einfach einem Schnittstellencontroller im Visual Studio für Mac-Eigenschaftenpad einen Klassennamen, und die C#-Codedateien werden automatisch erstellt.

Wenn Sie den Xcode-Schnittstellen-Generator verwenden, führen Sie die folgenden Schritte aus, um neue Schnittstellencontroller für Ihre watch-App zu erstellen und die Synchronisierung mit Xcode zu aktivieren, sodass die Ausgänge und Aktionen in C# verfügbar sind:

  1. Öffnen Sie das Interface.storyboard der watch-App im Xcode-Schnittstellen-Generator.

    Öffnen des Storyboards im Xcode-Schnittstellen-Generator

  2. Ziehen Sie einen neuen InterfaceController auf das Storyboard:

    Ein InterfaceController

  3. Sie können jetzt Steuerelemente auf den Schnittstellencontroller ziehen (z. B. Bezeichnungen und Schaltflächen), aber Sie können noch keine Ausgänge oder Aktionen erstellen, da keine H-Headerdatei vorhanden ist. Die folgenden Schritte führen dazu, dass die erforderliche H-Headerdatei erstellt wird.

    Eine Schaltfläche im Layout

  4. Schließen Sie das Storyboard, und kehren Sie zu Visual Studio für Mac zurück. Erstellen Sie eine neue C#-Datei MyInterfaceController.cs (oder einen beliebigen Namen) im projekt watch App-Erweiterung (NICHT die watch App selbst, in der sich das Storyboard befindet). Fügen Sie den folgenden Code hinzu (aktualisieren Sie den Namespace, den Klassennamen und den Konstruktornamen):

    using System;
    using WatchKit;
    using Foundation;
    
    namespace WatchAppExtension  // remember to update this
    {
        public partial class MyInterfaceController // remember to update this
        : WKInterfaceController
        {
            public MyInterfaceController // remember to update this
            (IntPtr handle) : base (handle)
            {
            }
            public override void Awake (NSObject context)
            {
                base.Awake (context);
                // Configure interface objects here.
                Console.WriteLine ("{0} awake with context", this);
            }
            public override void WillActivate ()
            {
                // This method is called when the watch view controller is about to be visible to the user.
                Console.WriteLine ("{0} will activate", this);
            }
            public override void DidDeactivate ()
            {
                // This method is called when the watch view controller is no longer visible to the user.
                Console.WriteLine ("{0} did deactivate", this);
            }
        }
    }
    
  5. Erstellen Sie eine weitere neue C#-Datei MyInterfaceController.designer.cs im watch App-Erweiterungsprojekt, und fügen Sie den folgenden Code hinzu. Aktualisieren Sie unbedingt den Namespace, den Klassennamen und das Register Attribut:

    using Foundation;
    using System.CodeDom.Compiler;
    
    namespace HelloWatchExtension  // remember to update this
    {
        [Register ("MyInterfaceController")] // remember to update this
        partial class MyInterfaceController  // remember to update this
        {
            void ReleaseDesignerOutlets ()
            {
            }
        }
    }
    

    Tipp

    Sie können diese Datei (optional) zu einem untergeordneten Knoten der ersten Datei machen, indem Sie sie auf die andere C#-Datei im Visual Studio für Mac Lösungspad ziehen. Es sieht dann wie folgt aus:

    Das Lösungspad

  6. Wählen Sie Alle erstellen > aus, damit die Xcode-Synchronisierung die neue Klasse (über das -Attribut) erkennt, die Register wir verwendet haben.

  7. Öffnen Sie das Storyboard erneut, indem Sie mit der rechten Maustaste auf die watch App-Storyboarddatei klicken und Mit > Xcode-Schnittstellen-Generator öffnen auswählen:

    Öffnen des Storyboards im Schnittstellen-Generator

  8. Wählen Sie Ihren neuen Schnittstellencontroller aus, und geben Sie ihm den oben definierten Klassennamen, z. B. MyInterfaceController. Wenn alles ordnungsgemäß funktioniert hat, sollte es automatisch in der Dropdownliste Klasse: angezeigt werden, und Sie können es dort auswählen.

    Festlegen einer benutzerdefinierten Klasse

  9. Wählen Sie die Ansicht Assistenten-Editor in Xcode (das Symbol mit zwei überlappenden Kreisen) aus, damit Sie das Storyboard und den Code nebeneinander sehen können:

    Symbolleistenelement des Assistenten-Editors

    Wenn sich der Fokus im Codebereich befindet, stellen Sie sicher, dass Sie sich die H-Headerdatei ansehen, und klicken Sie, wenn sie nicht mit der rechten Maustaste auf die Breadcrumb-Leiste klicken, und wählen Sie die richtige Datei aus (MyInterfaceController.h).

    Wählen Sie MyInterfaceController aus.

  10. Sie können jetzt Ausgänge und Aktionen erstellen, indem Sie STRG+ziehen aus dem Storyboard in die H-Headerdatei ziehen.

    Erstellen von Verkaufsstellen und Aktionen

    Wenn Sie den Ziehen loslassen, werden Sie aufgefordert, auszuwählen, ob ein Outlet oder eine Aktion erstellt werden soll, und wählen Sie den Namen aus:

    Das Dialogfeld

  11. Sobald die Storyboardänderungen gespeichert und Xcode geschlossen wurde, kehren Sie zu Visual Studio für Mac zurück. Es erkennt die Änderungen der Headerdatei und fügt der Datei .designer.cs automatisch Code hinzu:

    [Register ("MyInterfaceController")]
    partial class MyInterfaceController
    {
        [Outlet]
        WatchKit.WKInterfaceButton myButton { get; set; }
    
        void ReleaseDesignerOutlets ()
        {
            if (myButton != null) {
                myButton.Dispose ();
                myButton = null;
            }
        }
    }
    

Sie können jetzt in C# auf das Steuerelement verweisen (oder die Aktion implementieren).

Starten der Überwachungs-App über die Befehlszeile

Wichtig

Sie können die Überwachungs-App standardmäßig im normalen App-Modus und auch im Modus "Blick" oder "Benachrichtigung" mit benutzerdefinierten Ausführungsparametern in Visual Studio für Mac und Visual Studio starten.

Sie können auch die Befehlszeile verwenden, um den iOS-Simulator zu steuern. Das Befehlszeilentool zum Starten watch Apps ist mtouch.

Hier sehen Sie ein vollständiges Beispiel (ausgeführt als einzelne Zeile im Terminal):

/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/bin/mtouch --sdkroot=/Applications/Xcode.app/Contents/Developer/ --device=:v2:runtime=com.apple.CoreSimulator.SimRuntime.iOS-8-2,devicetype=com.apple.CoreSimulator.SimDeviceType.iPhone-6
--launchsimwatch=/path/to/watchkitproject/watchsample/bin/iPhoneSimulator/Debug/watchsample.app

Der Parameter, den Sie aktualisieren müssen, um Ihre App widerzuspiegeln, ist launchsimwatch:

--launchsimwatch

Der vollständige Pfad zum Standard App-Bündels für die iOS-App, das die watch-App und -Erweiterung enthält.

Hinweis

Der Pfad, den Sie angeben müssen, ist für die App-Datei der iPhone-Anwendung, d. h. die Datei, die im iOS-Simulator bereitgestellt wird und sowohl die watch-Erweiterung als auch watch-App enthält.

Beispiel:

--launchsimwatch=/path/to/watchkitproject/watchsample/bin/iPhoneSimulator/Debug/watchsample.app

Benachrichtigungsmodus

Um den Benachrichtigungsmodus der App zu testen, legen Sie den watchlaunchmode Parameter auf festNotification, und geben Sie einen Pfad zu einer JSON-Datei an, die eine Testbenachrichtigungsnutzlast enthält.

Der Nutzlastparameter ist für den Benachrichtigungsmodus erforderlich .

Fügen Sie beispielsweise dem Befehl mtouch die folgenden Argumente hinzu:

--watchlaunchmode=Notification --watchnotificationpayload=/path/to/file.json

Weitere Argumente

Die restlichen Argumente werden unten erläutert:

--sdkroot

Erforderlich. Gibt den Pfad zu Xcode (6.2 oder höher) an.

Beispiel:

 --sdkroot /Applications/Xcode.app/Contents/Developer/

--Gerät

Das auszuführende Simulatorgerät. Dies kann auf zwei Arten angegeben werden, entweder mit dem udid eines bestimmten Geräts oder mit einer Kombination aus Runtime und Gerätetyp.

Die genauen Werte variieren zwischen den Computern und können mithilfe des Apple-Tools simctl abgefragt werden:

/Applications/Xcode.app/Contents/Developer/usr/bin/simctl list

UDID

Beispiel:

--device=:v2:udid=AAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE

Laufzeit und Gerätetyp

Beispiel:

--device=:v2:runtime=com.apple.CoreSimulator.SimRuntime.iOS-8-2,devicetype=com.apple.CoreSimulator.SimDeviceType.iPhone-6