Share via


Solución de problemas de watchOS

Esta página contiene información adicional y soluciones alternativas para los problemas que puede encontrar.

Problemas conocidos

General

  • Las versiones anteriores de Visual Studio para Mac muestran incorrectamente uno de los iconos AppleCompanionSettings como de 88 x 88 píxeles; lo que provoca un Error de icono ausente si intenta enviarlo a la App Store. Este icono debería ser de 87 x 87 píxeles (29 unidades para pantallas de Retina @3x). No se puede corregir en Visual Studio para Mac: edite el recurso de imagen en Xcode o edite manualmente el archivo Contents.json.

  • Si el Info.plist > Id. de lote de aplicaciones de WKApp del proyecto de extensión de Watch no está correctamente establecido para que coincida con el id. de lote de la aplicación Watch, el depurador no podrá conectarse y Visual Studio para Mac esperará con el mensaje "Esperando a que se conecte el depurador".

  • La depuración es compatible en modo Notificaciones pero puede ser poco fiable. A veces, el reintento funcionará. Confirme que el Info.plistWKCompanionAppBundleIdentifier de la aplicación Watch está establecido para que coincida con el identificador del paquete de la aplicación principal/contenedora de iOS (es decir, la que se ejecuta en el iPhone).

  • iOS Designer no muestra flechas de punto de entrada para controladores de interfaz de vista o notificación.

  • No se pueden agregar dos WKNotificationControllers a un guión gráfico. Solución alternativa: el elemento notificationCategory del XML del guión gráfico siempre se inserta con el mismo id. Para solucionar este problema, puede agregar dos controladores de notificación (o más), abra el archivo de guion gráfico en un editor de texto y, a continuación, cambie manualmente el elemento id para que sea único.

    Abrir el archivo del guión gráfico en un editor de texto y cambiar manualmente el elemento id para que sea único

  • Es posible que vea un error "La aplicación no se ha compilado" al intentar iniciar la aplicación. Esto ocurre después de una limpieza cuando el proyecto de inicio se establece en el proyecto de extensión de reloj. La solución es seleccionar Compilar > Recompilar todo y después volver a iniciar la aplicación.

Quitar el canal alfa de las imágenes de icono

Los iconos no deberían contener un canal alfa (el canal alfa define las áreas transparentes de una imagen), de lo contrario la aplicación será rechazada durante el envío a la App Store con un error similar a este:

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 fácil quitar el canal alfa en Mac OS X mediante la aplicación de vista previa:

  1. Abra la imagen del icono en Vista previa y después elija Archivo> Exportar.

  2. El cuadro de diálogo que aparece incluirá una casilla Alpha si hay un canal alfa.

    El cuadro de diálogo que aparece incluirá una casilla Alfa si hay un canal alfa

  3. Desmarque la casilla Alpha y Guarde el archivo en la ubicación correcta.

  4. La imagen de icono ahora debería pasar las comprobaciones de validación de Apple.

Agregar manualmente archivos de controlador de interfaz

Importante

La compatibilidad de Xamarin con WatchKit incluye el diseño de guiones gráficos de reloj en el diseñador de iOS (tanto en Visual Studio para Mac como en Visual Studio), que no requiere los pasos que se indican a continuación. Simplemente asigne un nombre de clase al controlador de interfaz en el panel Propiedades de Visual Studio para Mac y los archivos de código C# se crearán automáticamente.

Si usa Xcode Interface Builder, siga estos pasos para crear nuevos controladores de interfaz para la aplicación de reloj y habilitar la sincronización con Xcode para que las salidas y acciones estén disponibles en C#:

  1. Abra el Interface.storyboard de la aplicación de reloj en Xcode Interface Builder.

    Apertura del guion gráfico en Interface Builder de Xcode

  2. Arrastre un nuevo InterfaceController al guión gráfico:

    Un InterfaceController

  3. Ahora puede arrastrar controles al controlador de la interfaz (por ejemplo, etiquetas y botones), pero aún no puede crear salidas ni acciones, porque no existe el archivo de encabezado .h. Los siguientes pasos harán que se cree el archivo de encabezado .h necesario.

    Un botón en el diseño

  4. Cierre el guión gráfico y vuelva a Visual Studio para Mac. Cree un nuevo archivo C# MyInterfaceController.cs (o el nombre que quiera) en el proyecto de la extensión de la aplicación de reloj (NO en la propia aplicación de reloj donde se encuentra el guión gráfico). Agregue el código siguiente (actualizando el espacio de nombres, el nombre de clase y el nombre del constructor):

    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. Cree otro nuevo archivo C# MyInterfaceController.designer.cs en el proyecto de la extensión de la aplicación de reloj y agregue el código que aparece a continuación. Asegúrese de actualizar el espacio de nombres, el nombre de la clase y el atributo 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 ()
            {
            }
        }
    }
    

    Sugerencia

    Puede (opcionalmente) hacer de este archivo un nodo secundario del primer archivo arrastrándolo al otro archivo C# en el Panel de solución de Visual Studio para Mac. A continuación, aparecerá así:

    El panel solución

  6. Seleccione Compilar > Compilar todo para que la sincronización de Xcode reconozca la nueva clase (a través del atributo Register) que hemos usado.

  7. Vuelva a abrir el guión gráfico haciendo clic con el botón derecho del ratón en el archivo del guión gráfico de la aplicación de reloj y seleccionando Abrir con >. Xcode Interface Builder:

    Apertura del guion gráfico en Interface Builder

  8. Seleccione su nuevo controlador de interfaz y dele el nombre de clase que definió anteriormente, p. ej. MyInterfaceController. Si todo ha funcionado correctamente, debería aparecer automáticamente en la lista desplegable Clase: y podrá seleccionarlo desde allí.

    Establecimiento de una clase personalizada

  9. Elija la vista Asistente del editor en Xcode (el icono con dos círculos superpuestos) para poder ver el guión gráfico y el código uno al lado del otro:

    Elemento de la barra de herramientas Editor del asistente

    Cuando el foco esté en el panel de código, asegúrese de que está mirando el archivo de encabezado .h y, si no es así, haga clic con el botón derecho del ratón en la barra de direcciones y seleccione el archivo correcto (MyInterfaceController.h).

    Seleccione MyInterfaceController

  10. Ahora puede crear salidas y acciones mediante Ctrl + arrastrar desde el guión gráfico al archivo de encabezado .h.

    Creación de salidas y acciones

    Cuando suelte el arrastre, se le solicitará que seleccione si desea crear una salida o una acción, y que elija su nombre:

    Salida y un cuadro de diálogo de acción

  11. Una vez guardados los cambios del guión gráfico y cerrado Xcode, vuelva a Visual Studio para Mac. Detectará los cambios en el archivo encabezado y agregará automáticamente código al archivo .designer.cs:

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

Ahora puede hacer referencia al control (o implementar la acción) en C#.

Iniciar la aplicación Watch desde la línea de comandos

Importante

Puede iniciar la aplicación Watch en el modo de aplicación normal predeterminado, y también en los modos Vista o Notificación usando parámetros de ejecución personalizados en Visual Studio para Mac y Visual Studio.

También puede usar la línea de comandos para controlar el simulador de iOS. La herramienta de línea de comandos que se usa para iniciar aplicaciones de reloj es mtouch.

Este es un ejemplo completo (ejecutado como una sola línea en el 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

El parámetro que necesita actualizar para reflejar la aplicación es launchsimwatch:

--launchsimwatch

La ruta de acceso completa al lote de aplicaciones principal para la aplicación iOS que contiene la aplicación de reloj y la extensión.

Nota:

La ruta de acceso que debe proporcionar es la del archivo .app de la aplicación iPhone, es decir, la que se implementará en el simulador de iOS y que contiene tanto la extensión como la aplicación de reloj.

Ejemplo:

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

Modo de notificación

Para probar el modo Notificación de la aplicación, establezca el parámetro watchlaunchmode en Notification y proporcione una ruta de acceso a un archivo JSON que contenga una carga útil de notificación de prueba.

El parámetro de carga útil es requerido para el modo Notificación.

Por ejemplo, agregue estos argumentos al comando mtouch:

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

Otros argumentos

A continuación se explican los argumentos restantes:

--sdkroot

Necesario. Especifica la ruta de acceso a Xcode (6.2 o posterior).

Ejemplo:

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

--device

Dispositivo del simulador que se va a ejecutar. Esto se puede especificar de dos maneras, ya sea mediante la udid de un dispositivo específico o mediante una combinación de runtime y tipo de dispositivo.

Los valores exactos varían entre máquinas y pueden consultarse utilizando la herramienta simctl de Apple:

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

UDID

Ejemplo:

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

Tipo de runtime y dispositivo

Ejemplo:

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