Řešení potíží se watchOSem

Tato stránka obsahuje další informace a alternativní řešení problémů, se kterými se můžete setkat.

Známé problémy

Obecné

  • Dřívější verze Visual Studio pro Mac nesprávně zobrazují jednu z ikon AppleCompanionSettings jako 88x88 pixelů. Výsledkem je chyba chybějící ikony, pokud se pokusíte odeslat do App Store. Tato ikona by měla být 87 × 877 pixelů (29 jednotek pro obrazovky @3x Sítnice). Tento problém nelze opravit v Visual Studio pro Mac – buď upravit prostředek obrázku v Xcode, nebo ručně upravit soubor Contents.json.

  • Pokud id sady sady WKApp WKApp Project > rozšíření Kukátka není správně nastavené tak, aby odpovídalo ID sady sad sady hodinek aplikace Watch, ladicí program se nepodaří připojit a Visual Studio pro Mac počká se zprávou Čekání na připojení ladicího programu.

  • Ladění je podporováno v režimu oznámení , ale může být nespolehlivé. Opakování někdy bude fungovat. Ověřte, že je aplikace Watch Info.plistWKCompanionAppBundleIdentifier nastavená tak, aby odpovídala identifikátoru sady nadřazené nebo kontejnerové aplikace pro iOS (tj. ta, která běží na iPhone).

  • iOS Designer nezobrazuje šipky vstupních bodů pro kontrolery rozhraní Rychlý přehled nebo Oznámení.

  • Do scénáře nelze přidat dva WKNotificationControllers . Alternativní řešení: Element notificationCategory ve scénáři XML se vždy vloží se stejným id. Chcete-li tento problém vyřešit, můžete přidat dva (nebo více) kontrolerů oznámení, otevřete soubor scénáře v textovém editoru a poté ručně změňte id prvek tak, aby byl jedinečný.

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

  • Při pokusu o spuštění aplikace se může zobrazit chyba Aplikace nebyla sestavena. K tomu dochází po vyčištění , pokud je projekt spuštění nastaven na projekt rozšíření kukátku. Opravou je vybrat Sestavit > znovu sestavit vše a pak znovu spustit aplikaci.

Odebrání alfa kanálu z obrázků ikon

Ikony by neměly obsahovat alfa kanál (alfa kanál definuje průhledné oblasti obrázku), jinak se aplikace během odesílání App Store odmítne s chybou podobnou této:

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.

Alfa kanál v systému Mac OS X můžete snadno odebrat pomocí aplikace Preview :

  1. Otevřete obrázek ikony v náhledu a pak zvolte Exportovat soubor>.

  2. Zobrazené dialogové okno bude obsahovat zaškrtávací políčko Alfa , pokud je k dispozici alfa kanál.

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

  3. Zrušte zaškrtnutí políčka Alfa a uložte soubor do správného umístění.

  4. Obrázek ikony by teď měl projít ověřovacími kontrolami Společnosti Apple.

Ruční přidání souborů kontroleru rozhraní

Důležité

Podpora sady WatchKit pro Xamarin zahrnuje navrhování scénářů hodinek v iOS Designeru (v Visual Studio pro Mac i Visual Studio), které nevyžadují následující kroky. Jednoduše dejte řadiči rozhraní název třídy na panelu vlastností Visual Studio pro Mac a soubory kódu jazyka C# se vytvoří automaticky.

Pokud používáte Xcode Interface Builder, postupujte podle těchto kroků a vytvořte nové kontrolery rozhraní pro vaši kukátko a povolte synchronizaci s Xcode, aby výstupy a akce byly k dispozici v jazyce C#:

  1. Otevřete aplikaci Watch Interface.storyboard v Xcode Interface Builderu.

    Opening the storyboard in Xcode Interface Builder

  2. Přetáhněte nový InterfaceController na scénář:

    A InterfaceController

  3. Ovládací prvky teď můžete přetáhnout na kontroler rozhraní (např. popisky a tlačítka), ale zatím nemůžete vytvářet výstupy nebo akce, protože neexistuje žádný soubor záhlaví .h . Následující kroky způsobí vytvoření požadovaného souboru hlavičky .h .

    A button in the layout

  4. Zavřete scénář a vraťte se do Visual Studio pro Mac. Vytvořte nový soubor C# MyInterfaceController.cs (nebo jakýkoli název, který se vám líbí) v projektu rozšíření aplikace kukátku (NE samotná aplikace kukátku, ve které je storyboard). Přidejte následující kód (aktualizace oboru názvů, názvu třídy a názvu konstruktoru):

    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. V projektu rozšíření aplikace watch vytvořte další nový soubor C# MyInterfaceController.designer.cs a přidejte níže uvedený kód. Nezapomeňte aktualizovat obor názvů, název třídy a Register atribut:

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

    Tip

    Tento soubor můžete (volitelně) nastavit jako podřízený uzel prvního souboru přetažením do druhého souboru C# v oblasti řešení Visual Studio pro Mac. Zobrazí se takto:

    The Solution pad

  6. Vyberte Sestavit > vše , aby synchronizace Xcode rozpoznala novou třídu (prostřednictvím atributu Register ), kterou jsme použili.

  7. Znovu otevřete scénář tak, že kliknete pravým tlačítkem na soubor scénáře aplikace kukátko a vyberete Otevřít v > Xcode Interface Builderu:

    Opening the storyboard in Interface Builder

  8. Vyberte nový kontroler rozhraní a dejte mu název třídy, který jste definovali výše, např. MyInterfaceController. Pokud všechno fungovalo správně, mělo by se automaticky zobrazit v rozevíracím seznamu Třída: a můžete ho vybrat tam.

    Setting a custom class

  9. V Xcode zvolte zobrazení Editor asistenta (ikona se dvěma překrývajícími se kruhy), abyste mohli zobrazit scénář a kód vedle sebe:

    The Assistant Editor toolbar item

    Když je fokus v podokně kódu, ujistěte se, že se podíváte na soubor záhlaví .h , a pokud na panel s popisem cesty kliknete pravým tlačítkem myši, vyberte správný soubor (MyInterfaceController.h).

    Select MyInterfaceController

  10. Nyní můžete vytvářet výstupy a akce pomocí ctrl + přetažení z scénáře do souboru záhlaví .h .

    Creating outlets and actions

    Po uvolnění přetažení se zobrazí výzva k výběru, jestli chcete vytvořit výstup nebo akci, a zvolit jeho název:

    The outlet and an action dialog

  11. Po uložení změn scénáře a zavření Xcode se vraťte do Visual Studio pro Mac. Zjistí změny souboru hlaviček a automaticky přidá kód do souboru .designer.cs :

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

Teď můžete odkazovat na ovládací prvek (nebo implementovat akci) v jazyce C#!

Spuštění aplikace Watch z příkazového řádku

Důležité

Aplikaci Watch můžete spustit ve výchozím nastavení v normálním režimu aplikace a také v režimech rychlého přehledu nebo oznámení pomocí vlastních parametrů spouštění v Visual Studio pro Mac a Visual Studio.

K řízení simulátoru iOS můžete použít také příkazový řádek. Nástroj příkazového řádku použitý ke spouštění aplikací pro sledování je nedotčený.

Tady je úplný příklad (spuštěný jako jeden řádek v terminálu):

/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, který je potřeba aktualizovat tak, aby odrážel vaši aplikaci, je launchsimwatch:

--launchsimwatch

Úplná cesta k hlavní sadě aplikací pro aplikaci pro iOS, která obsahuje aplikaci watch a rozšíření.

Poznámka

Cesta, kterou potřebujete zadat, je určená pro soubor .app aplikace iPhone, tj. ten, který se nasadí do simulátoru iOSu a který obsahuje jak příponu kukátku, tak aplikaci kukátku.

Příklad:

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

Režim oznámení

Pokud chcete otestovat režim oznámení aplikace, nastavte watchlaunchmode parametr na Notification soubor JSON, který obsahuje datovou část testovacího oznámení, a zadejte cestu k souboru JSON.

Parametr datové části je vyžadován pro režim oznámení.

Přidejte například tyto argumenty do příkazu mtouch:

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

Další argumenty

Zbývající argumenty jsou vysvětleny níže:

--sdkroot

Povinná hodnota. Určuje cestu k Xcode (6.2 nebo novější).

Příklad:

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

--device

Zařízení simulátoru, které se má spustit. To lze zadat dvěma způsoby, a to buď pomocí udid konkrétního zařízení, nebo pomocí kombinace modulu runtime a typu zařízení.

Přesné hodnoty se liší mezi počítači a dají se dotazovat pomocí nástroje Apple Simctl :

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

UDID

Příklad:

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

Typ modulu runtime a zařízení

Příklad:

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