Solución de problemas de watchOS

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

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 produce un error de icono que falta si intenta enviar al App Store. Este icono debe ser de 87 x 87 píxeles (29 unidades para @3x pantallas de Retina). No puede corregir esto en Visual Studio para Mac: edite el recurso de imagen en Xcode o edite manualmente el archivo Contents.json.

  • Si el identificador de lote de WKApp info.plist de la extensión watch Project no está configurado correctamente para que coincida con el identificador de lote de la aplicación de watch,el depurador no se podrá conectar y Visual Studio para Mac esperará con el mensaje "Esperando a que el depurador se conecte".

  • La depuración se admite en modo notificaciones, pero puede ser poco confiable. A veces, los reintentos funcionarán. Confirme que el archivo Info.plist de la aplicación de reloj está establecido para que coincida con el identificador de agrupación de la aplicación principal o contenedora de iOS (es decir, el 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 notificationCategory elemento del XML de guión gráfico siempre se inserta con el mismo id . Para solucionar este problema, puede agregar dos (o más) controladores de notificación, abra el archivo de guión gráfico en un editor de texto y, a continuación, cambie manualmente el elemento para que id sea único.

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

  • Es posible que vea el error "La aplicación no se ha creado" al intentar iniciar la aplicación. Esto sucede después de limpiar cuando el proyecto de inicio se establece en el proyecto de extensión watch. La solución es seleccionar Compilar recompilar todo y, a continuación, volver a iniciar la aplicación.

Quitar el canal alfa de imágenes de icono

Los iconos no deben contener un canal alfa (el canal alfa define áreas transparentes de una imagen), de lo contrario, la aplicación se rechazará durante el envío App Store con un error similar al siguiente:

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 la aplicación de versión preliminar:

  1. Abra la imagen de icono en vista previa y, a continuación, elija Exportar archivo.

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

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

  3. Desmarque la casilla Alfay guarde el archivo en la ubicación correcta.

  4. La imagen de icono ahora debe pasar las comprobaciones de validación de Apple.

Agregar manualmente archivos de controlador de interfaz

Importante

La compatibilidad con WatchKit de Xamarin 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 descritos a continuación. Simplemente asigne a un controlador de interfaz un nombre de clase en el panel Visual Studio para Mac propiedades y los archivos de código de 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 las acciones estén disponibles en C#:

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

    Apertura del guión gráfico en Xcode Interface Builder

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

    A InterfaceController

  3. Ahora puede arrastrar controles al controlador de interfaz (por ejemplo, etiquetas y botones), pero aún no se pueden crear salidas o acciones, porque no hay ningún archivo de encabezado .h. Los pasos siguientes 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 de C# MyInterfaceController.cs (o el nombre que quiera) en el proyecto de extensión de aplicación de inspección (NO es la propia aplicación de inspección donde está el guión gráfico). Agregue el código siguiente (actualizando el espacio de nombres, classname 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 archivo de C# MyInterfaceController.designer.cs en el proyecto de extensión de la aplicación watch y agregue el código siguiente. Asegúrese de actualizar el espacio de nombres, classname y el Register atributo :

    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

    Opcionalmente, puede convertir este archivo en un nodo secundario del primer archivo arrastrándolo al otro archivo de C# del Visual Studio para Mac Panel de solución. A continuación, aparecerá de la siguiente forma:

    Panel solución

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

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

    Abrir el guión gráfico en Interface Builder

  8. Seleccione el nuevo controlador de interfaz y asícele el nombre de clase que definió anteriormente, por ejemplo, MyInterfaceController. Si todo ha funcionado correctamente, debería aparecer automáticamente en la lista desplegable Clase: y puede seleccionarlo desde allí.

    Establecimiento de una clase personalizada

  9. Elija la vista Editor del asistente en Xcode (el icono con dos círculos superpuestos) para que pueda ver el guion gráfico y el código en paralelo:

    Elemento de la barra de herramientas Editor del asistente

    Cuando el foco esté en el panel de código, asegúrese de que está observando el archivo de encabezado .h y, si no lo hace, haga clic con el botón derecho en la barra de ruta de navegación 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

    Al soltar el arrastre, se le pedirá que seleccione si desea crear una salida o una acción y elija su nombre:

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

  11. Una vez que se guarden los cambios del guión gráfico y se cierre Xcode, vuelva a Visual Studio para Mac. Detectará los cambios del archivo de 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#.

Inicio de la aplicación watch desde la línea de comandos

Importante

Puede iniciar watch app en modo de aplicación normal de forma predeterminada y también en los modos de vista o notificación mediante 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 debe actualizar para reflejar la aplicación es launchsimwatch :

--launchsimwatch

Ruta de acceso completa a la agrupación de aplicaciones principal para la aplicación de iOS que contiene la aplicación de reloj y la extensión.

Nota:

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

Ejemplo:

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

Modo de notificación

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

El parámetro payload es necesario para el modo de notificación.

Por ejemplo, agregue estos argumentos al comando mtouch:

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

Otros argumentos

Los argumentos restantes se explican a continuación:

--sdkroot

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

Ejemplo:

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

--device

El dispositivo del simulador que se ejecutará. Esto se puede especificar de dos maneras, ya sea mediante el udid de un dispositivo específico o mediante una combinación de tiempo de ejecución y tipo de dispositivo.

Los valores exactos varían entre las máquinas y se pueden consultar mediante la herramienta simctl de Apple:

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

UDID

Ejemplo:

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

Runtime y tipo de dispositivo

Ejemplo:

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