rozwiązywanie problemów z systemem watchOS

Ta strona zawiera dodatkowe informacje i obejścia problemów, które mogą wystąpić.

Znane problemy

Ogólne

  • Wcześniejsze wersje Visual Studio dla komputerów Mac niepoprawnie pokazują jedną z ikon AppleCompanion Ustawienia jako 88x88 pikseli, co powoduje błąd brakującej ikony w przypadku próby przesłania do sklepu App Store. Ta ikona powinna mieć 87x87 pikseli (29 jednostek dla ekranów @3x Retina). Nie można rozwiązać tego problemu w Visual Studio dla komputerów Mac — edytuj zasób obrazu w programie Xcode lub ręcznie edytuj plik Contents.json.

  • Jeśli identyfikator pakietu aplikacji Watch Extension Info.plist >WKApp nie jest poprawnie ustawiony tak, aby był zgodny z identyfikatorem pakietu aplikacji watch, debuger zakończy się niepowodzeniem, a Visual Studio dla komputerów Mac będzie czekać z komunikatem "Oczekiwanie na połączenie debugera".

  • Debugowanie jest obsługiwane w trybie powiadomień , ale może być zawodne. Ponawianie próby czasami będzie działać. Upewnij się, że aplikacja Watch App Info.plistWKCompanionAppBundleIdentifier jest ustawiona tak, aby odpowiadała identyfikatorowi pakietu aplikacji nadrzędnej/kontenera systemu iOS (tj. aplikacji działającej w pliku i Telefon).

  • Projektant systemu iOS nie wyświetla strzałek punktu wejścia dla kontrolerów interfejsu Glance lub Notification.

  • Nie można dodać dwóch WKNotificationControllers do scenorysu. Obejście: notificationCategory element w pliku XML scenorysu jest zawsze wstawiany z tym samym idelementem . Aby obejść ten problem, możesz dodać dwa (lub więcej) kontrolerów powiadomień, otwórz plik scenorysu w edytorze tekstów, a następnie ręcznie zmień id element tak, aby był unikatowy.

    Opening the storyboard file in a text editor and manually change the id element to be unique

  • Podczas próby uruchomienia aplikacji może zostać wyświetlony błąd "Aplikacja nie została skompilowana". Dzieje się tak po oczyszczeniu, gdy projekt startowy jest ustawiony na projekt rozszerzenia zegarka. Poprawka polega na wybraniu pozycji Kompiluj > ponownie wszystko , a następnie ponownym uruchomieniu aplikacji.

Usuwanie kanału alfa z obrazów ikon

Ikony nie powinny zawierać kanału alfa (kanał alfa definiuje przezroczyste obszary obrazu), w przeciwnym razie aplikacja zostanie odrzucona podczas przesyłania ze sklepu App Store z błędem podobnym do następującego:

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.

Można łatwo usunąć kanał alfa w systemie Mac OS X przy użyciu aplikacji w wersji zapoznawczej :

  1. Otwórz obraz ikony w wersji zapoznawczej, a następnie wybierz pozycję Eksportuj plik>.

  2. Wyświetlone okno dialogowe będzie zawierać pole wyboru Alfa , jeśli jest obecny kanał alfa.

    The dialog that appears will include an Alpha checkbox if an alpha channel is present

  3. Usuń zaznaczenie pola wyboru Alfa i Zapisz plik w odpowiedniej lokalizacji.

  4. Obraz ikony powinien teraz przejść testy poprawności firmy Apple.

Ręczne dodawanie plików kontrolera interfejsu

Ważne

Obsługa zestawu WatchKit platformy Xamarin obejmuje projektowanie scenorysów zegarków w projektancie systemu iOS (zarówno w Visual Studio dla komputerów Mac, jak i w programie Visual Studio), które nie wymagają kroków opisanych poniżej. Po prostu nadaj kontrolerowi interfejsu nazwę klasy w okienku właściwości Visual Studio dla komputerów Mac, a pliki kodu języka C# zostaną utworzone automatycznie.

Jeśli używasz narzędzia Xcode Interface Builder, wykonaj następujące kroki, aby utworzyć nowe kontrolery interfejsu dla aplikacji zegarka i włączyć synchronizację z programem Xcode, aby punkty i akcje były dostępne w języku C#:

  1. Otwórz scenorys Interface.storyboard aplikacji zegarka w narzędziu Xcode Interface Builder.

    Opening the storyboard in Xcode Interface Builder

  2. Przeciągnij nowy InterfaceController na scenorys:

    A InterfaceController

  3. Teraz można przeciągać kontrolki na kontroler interfejsu (np. etykiety i przyciski), ale nie można jeszcze tworzyć gniazd ani akcji, ponieważ nie ma pliku nagłówka .h . Poniższe kroki spowodują utworzenie wymaganego pliku nagłówka .h .

    A button in the layout

  4. Zamknij scenorys i wróć do Visual Studio dla komputerów Mac. Utwórz nowy plik w języku C# MyInterfaceController.cs (lub dowolną nazwę) w projekcie rozszerzenia aplikacji zegarka (a nie w samej aplikacji zegarka, w której znajduje się scenorys). Dodaj następujący kod (aktualizując przestrzeń nazw, nazwę klasy i nazwę konstruktora):

    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. Utwórz kolejny nowy plik C# MyInterfaceController.designer.cs w projekcie rozszerzenia aplikacji zegarka i dodaj poniższy kod. Pamiętaj, aby zaktualizować przestrzeń nazw, nazwę klasy i Register atrybut:

    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 ()
            {
            }
        }
    }
    

    Napiwek

    Możesz (opcjonalnie) ustawić ten plik jako węzeł podrzędny pierwszego pliku, przeciągając go do innego pliku C# w okienku rozwiązania Visual Studio dla komputerów Mac. Pojawi się on w następujący sposób:

    The Solution pad

  6. Wybierz pozycję Kompiluj > wszystko , aby synchronizacja programu Xcode rozpoznała nową klasę (za pośrednictwem atrybutu), która została użyta Register .

  7. Otwórz ponownie scenorys, klikając prawym przyciskiem myszy plik scenorysu aplikacji zegarka i wybierając polecenie Otwórz za pomocą > narzędzia Xcode Interface Builder:

    Opening the storyboard in Interface Builder

  8. Wybierz nowy kontroler interfejsu i nadaj mu nazwę klasy zdefiniowaną powyżej, np. MyInterfaceController. Jeśli wszystko działa prawidłowo, powinno być wyświetlane automatycznie na liście rozwijanej Klasa: i możesz ją wybrać z tego miejsca.

    Setting a custom class

  9. Wybierz widok Edytor asystenta w programie Xcode (ikona z dwoma nakładającymi się okręgami), aby zobaczyć scenorys i kod obok siebie:

    The Assistant Editor toolbar item

    Gdy fokus znajduje się w okienku kodu, upewnij się, że patrzysz na plik nagłówka .h , a jeśli nie kliknij prawym przyciskiem myszy na pasku stron nadrzędnych, a następnie wybierz prawidłowy plik (MyInterfaceController.h)

    Select MyInterfaceController

  10. Teraz możesz tworzyć gniazda i akcje, naciskając klawisze Ctrl + przeciągnij z scenorysu do pliku nagłówka .h .

    Creating outlets and actions

    Po zwolnieniu przeciągania zostanie wyświetlony monit o wybranie, czy utworzyć gniazdo, czy akcję, i wybrać jego nazwę:

    The outlet and an action dialog

  11. Po zapisaniu zmian scenorysu i zamknięciu programu Xcode wróć do Visual Studio dla komputerów Mac. Spowoduje to wykrycie zmian pliku nagłówka i automatyczne dodanie kodu do pliku .designer.cs :

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

Teraz możesz odwołać się do kontrolki (lub zaimplementować akcję) w języku C#!

Uruchamianie aplikacji watch z wiersza polecenia

Ważne

Domyślnie możesz uruchomić aplikację watch w normalnym trybie aplikacji, a także w trybach rzutu oka lub powiadomienia przy użyciu niestandardowych parametrów wykonywania w programie Visual Studio dla komputerów Mac i Visual Studio.

Możesz również użyć wiersza polecenia, aby kontrolować symulator systemu iOS. Narzędzie wiersza polecenia używane do uruchamiania aplikacji do oglądania to mtouch.

Oto pełny przykład (wykonywany jako pojedynczy wiersz w terminalu):

/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

Parametr, który należy zaktualizować, aby odzwierciedlić aplikację, to launchsimwatch:

--launchsimwatch

Pełna ścieżka do głównego pakietu aplikacji dla systemu iOS, która zawiera aplikację i rozszerzenie zegarka.

Uwaga

Ścieżka, którą należy podać, dotyczy pliku .app aplikacji i Telefon, czyli tej, która zostanie wdrożona w symulatorze systemu iOS i która zawiera zarówno rozszerzenie zegarka, jak i aplikację do obejrzenia.

Przykład:

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

Tryb powiadomień

Aby przetestować tryb powiadomień aplikacji, ustaw watchlaunchmode parametr na Notification i podaj ścieżkę do pliku JSON zawierającego ładunek powiadomień testowych.

Parametr ładunku jest wymagany dla trybu powiadomień.

Na przykład dodaj następujące argumenty do polecenia mtouch:

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

Inne argumenty

Pozostałe argumenty zostały wyjaśnione poniżej:

--sdkroot

Wymagany. Określa ścieżkę do środowiska Xcode (6.2 lub nowszego).

Przykład:

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

--Urządzenia

Urządzenie symulatora do wykonania. Można to określić na dwa sposoby, używając udid określonego urządzenia lub kombinacji środowiska uruchomieniowego i typu urządzenia.

Dokładne wartości różnią się między maszynami i można wykonywać zapytania za pomocą narzędzia simctl firmy Apple:

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

UDID

Przykład:

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

Środowisko uruchomieniowe i typ urządzenia

Przykład:

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