Risoluzione dei problemi di watchOS

Questa pagina contiene informazioni aggiuntive e soluzioni alternative per i problemi che possono verificarsi.

Problemi noti

Generali

  • Le versioni precedenti di Visual Studio per Mac mostrano erroneamente una delle icone AppleCompanion Impostazioni come 88x88 pixel, che genera un errore icona mancante se si tenta di inviare all'App Store. Questa icona deve essere di 87x87 pixel (29 unità per @3x schermi Retina). Non è possibile correggerlo in Visual Studio per Mac: modificare l'asset immagine in Xcode o modificare manualmente il file Contents.json.

  • Se info.plist > WKApp Bundle ID del progetto di estensione espressioni di controllo non è impostato correttamente in modo che corrisponda all'ID bundle dell'app watch, il debugger non riuscirà a connettersi e Visual Studio per Mac attenderà con il messaggio "In attesa della connessione del debugger".

  • Il debug è supportato in modalità Notifiche , ma può non essere affidabile. La ripetizione dei tentativi a volte funzionerà. Verificare che Info.plistWKCompanionAppBundleIdentifier dell'app watch sia impostato in modo che corrisponda all'identificatore bundle dell'app padre/contenitore iOS (ad esempio quella eseguita nell'i Telefono).

  • Progettazione iOS non mostra le frecce del punto di ingresso per i controller dell'interfaccia Di colpo d'occhio o notifica.

  • Non è possibile aggiungere due WKNotificationControllers elementi a uno storyboard. Soluzione alternativa: l'elemento notificationCategory nel codice XML dello storyboard viene sempre inserito con lo stesso idoggetto . Per risolvere questo problema, è possibile aggiungere due o più controller di notifica, aprire il file storyboard in un editor di testo e quindi modificare manualmente l'elemento id in modo che sia univoco.

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

  • È possibile che venga visualizzato un errore "L'applicazione non è stata compilata" quando si tenta di avviare l'app. Ciò si verifica dopo un oggetto Clean quando il progetto di avvio è impostato sul progetto di estensione watch. La correzione consiste nel selezionare Compila ricompila > tutto e quindi riavviare l'app.

Rimozione del canale alfa dalle immagini icona

Le icone non devono contenere un canale alfa (il canale alfa definisce aree trasparenti di un'immagine), altrimenti l'app verrà rifiutata durante l'invio in App Store con un errore simile al seguente:

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.

È facile rimuovere il canale alfa in Mac OS X usando l'app Di anteprima :

  1. Aprire l'immagine dell'icona in Anteprima e quindi scegliere Esportazione file>.

  2. La finestra di dialogo visualizzata includerà una casella di controllo Alfa se è presente un canale alfa.

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

  3. Deselezionare la casella di controllo Alfa e Salvare il file nel percorso corretto.

  4. L'immagine dell'icona dovrebbe ora superare i controlli di convalida di Apple.

Aggiunta manuale dei file del controller di interfaccia

Importante

Il supporto di WatchKit di Xamarin include la progettazione di storyboard watch nella finestra di progettazione iOS (sia in Visual Studio per Mac che in Visual Studio), che non richiede i passaggi descritti di seguito. È sufficiente assegnare un nome di classe al controller di interfaccia nel riquadro proprietà Visual Studio per Mac e i file di codice C# verranno creati automaticamente.

Se si usa Xcode Interface Builder, seguire questa procedura per creare nuovi controller di interfaccia per l'app watch e abilitare la sincronizzazione con Xcode in modo che gli outlet e le azioni siano disponibili in C#:

  1. Aprire il file Interface.storyboard dell'app watch in Xcode Interface Builder.

    Opening the storyboard in Xcode Interface Builder

  2. Trascinare un nuovo InterfaceController oggetto nello storyboard:

    A InterfaceController

  3. È ora possibile trascinare i controlli nel controller di interfaccia ,ad esempio etichette e pulsanti, ma non è ancora possibile creare outlet o azioni, perché non è presente alcun file di intestazione .h . I passaggi seguenti causeranno la creazione del file di intestazione H richiesto.

    A button in the layout

  4. Chiudere lo storyboard e tornare a Visual Studio per Mac. Creare un nuovo file C# MyInterfaceController.cs (o qualsiasi nome desiderato) nel progetto di estensione dell'app watch (NON l'app watch in cui si trova lo storyboard). Aggiungere il codice seguente (aggiornamento dello spazio dei nomi, del nome classe e del nome del costruttore):

    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. Creare un altro nuovo file C# MyInterfaceController.designer.cs nel progetto di estensione dell'app watch e aggiungere il codice seguente. Assicurarsi di aggiornare lo spazio dei nomi, il nomeclasse e l'attributo Register :

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

    Suggerimento

    Facoltativamente, è possibile impostare questo file come nodo figlio del primo file trascinandolo nell'altro file C# nel riquadro della soluzione Visual Studio per Mac. Verrà quindi visualizzato come segue:

    The Solution pad

  6. Selezionare Compila > tutto in modo che la sincronizzazione Xcode riconosca la nuova classe (tramite l'attributo Register ) usata.

  7. Riaprire lo storyboard facendo clic con il pulsante destro del mouse sul file storyboard dell'app watch e scegliendo Apri con > Xcode Interface Builder:

    Opening the storyboard in Interface Builder

  8. Selezionare il nuovo controller di interfaccia e assegnare il nome di classe definito in precedenza, ad esempio. MyInterfaceController. Se tutto funziona correttamente, dovrebbe essere visualizzato automaticamente nell'elenco a discesa Classe: ed è possibile selezionarlo da questa posizione.

    Setting a custom class

  9. Scegliere la visualizzazione Assistente Editor in Xcode (l'icona con due cerchi sovrapposti) in modo da visualizzare lo storyboard e il codice affiancato:

    The Assistant Editor toolbar item

    Quando lo stato attivo si trova nel riquadro del codice, assicurarsi di esaminare il file di intestazione .h e, in caso contrario, fare clic con il pulsante destro del mouse sulla barra di navigazione e selezionare il file corretto (MyInterfaceController.h)

    Select MyInterfaceController

  10. È ora possibile creare outlet e azioni premendo CTRL+ trascinando dallo storyboard nel file di intestazione .h .

    Creating outlets and actions

    Quando si rilascia il trascinamento, verrà richiesto di selezionare se creare un punto di uscita o un'azione e sceglierne il nome:

    The outlet and an action dialog

  11. Una volta salvate le modifiche dello storyboard e Xcode viene chiuso, tornare a Visual Studio per Mac. Rileverà le modifiche apportate al file di intestazione e aggiungerà automaticamente il codice al file .designer.cs :

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

È ora possibile fare riferimento al controllo (o implementare l'azione) in C#!

Avvio dell'app Watch dalla riga di comando

Importante

Per impostazione predefinita, è possibile avviare l'app Espressioni di controllo in modalità app normale e anche in Modalità di visualizzazione rapida o notifica usando parametri di esecuzione personalizzati in Visual Studio per Mac e Visual Studio.

È anche possibile usare la riga di comando per controllare il simulatore iOS. Lo strumento da riga di comando usato per avviare le app watch è mtouch.

Di seguito è riportato un esempio completo (eseguito come singola riga nel terminale):

/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

Il parametro che è necessario aggiornare per riflettere l'app è launchsimwatch:

--launchsimwatch

Percorso completo del bundle dell'app principale per l'app iOS che contiene l'app watch e l'estensione.

Nota

Il percorso da specificare è relativo al file .app'applicazione i Telefono, ad esempio quello che verrà distribuito nel simulatore iOS e che contiene sia l'estensione watch che l'app watch.

Esempio:

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

Modalità di notifica

Per testare la modalità di notifica dell'app, impostare il watchlaunchmode parametro su Notification e fornire un percorso a un file JSON che contiene un payload di notifica di test.

Il parametro payload è obbligatorio per la modalità di notifica.

Ad esempio, aggiungere questi argomenti al comando mtouch:

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

Altri argomenti

Gli argomenti rimanenti sono illustrati di seguito:

--sdkroot

Obbligatorio. Specifica il percorso di Xcode (6.2 o versione successiva).

Esempio:

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

--Dispositivo

Dispositivo simulatore da eseguire. Questo può essere specificato in due modi, usando l'udid di un dispositivo specifico o usando una combinazione di runtime e tipo di dispositivo.

I valori esatti variano tra i computer e possono essere sottoposti a query usando lo strumento simctl di Apple:

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

UDID

Esempio:

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

Runtime e Tipo di dispositivo

Esempio:

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