watchOS-Problembehandlung
Diese Seite enthält zusätzliche Informationen und Problemumgehungen für Probleme, die möglicherweise auftreten.
Manuelles Hinzufügen von Schnittstellencontrollerdateien für den Xcode-Schnittstellen-Generator.
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.plist
WKCompanionAppBundleIdentifier
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: DasnotificationCategory
Element im Storyboard-XML wird immer mit demselbenid
eingefü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 ändernid
, dass es eindeutig ist.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:
Öffnen Sie das Symbolbild in der Vorschau, und wählen Sie dann Dateiexport > aus.
Das angezeigte Dialogfeld enthält ein Alpha-Kontrollkästchen , wenn ein Alphakanal vorhanden ist.
Deaktivieren Sie das Kontrollkästchen Alpha , und speichern Sie die Datei am richtigen Speicherort.
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:
Öffnen Sie das Interface.storyboard der watch-App im Xcode-Schnittstellen-Generator.
Ziehen Sie einen neuen
InterfaceController
auf das Storyboard: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.
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); } } }
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:
Wählen Sie Alle erstellen > aus, damit die Xcode-Synchronisierung die neue Klasse (über das -Attribut) erkennt, die
Register
wir verwendet haben.Ö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:
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.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:
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).
Sie können jetzt Ausgänge und Aktionen erstellen, indem Sie STRG+ziehen aus dem Storyboard in die H-Headerdatei ziehen.
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:
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