Solução de problemas do watchOS

Esta página contém informações adicionais e soluções alternativas para problemas que você pode encontrar.

Problemas conhecidos

Geral

  • Versões anteriores do Visual Studio para Mac mostram incorretamente um dos ícones AppleCompanionSettings como sendo 88x88 pixels; o que resulta em um Erro de Ícone Ausente se você tentar enviar para a App Store. Este ícone deve ter 87x87 pixels (29 unidades para @3x telas Retina). Você não pode corrigir isso no Visual Studio para Mac – edite o ativo de imagem no Xcode ou edite manualmente o arquivo Contents.json .

  • Se a ID do Pacote WKApp do > Projeto de Extensão de Inspeção não estiver definida corretamente para corresponder à ID do Pacote do Aplicativo de Inspeção, o depurador não conseguirá se conectar e o Visual Studio para Mac aguardará com a mensagem "Aguardando a conexão do depurador".

  • A depuração é suportada no modo Notificações , mas pode não ser confiável. Às vezes, tentar novamente funcionará. Confirme se o Info.plist WKCompanionAppBundleIdentifier do aplicativo Watch está definido para corresponder ao identificador de pacote do aplicativo pai/contêiner do iOS (ou seja, aquele que é executado no iPhone).

  • O Designer do iOS não mostra setas de ponto de entrada para controladores de interface de Visão Geral ou Notificação.

  • Você não pode adicionar dois WKNotificationControllers a um storyboard. Solução alternativa: o notificationCategory elemento no XML do storyboard é sempre inserido com o mesmo id. Para contornar esse problema, você pode adicionar dois (ou mais) Controladores de Notificação, abrir o arquivo de storyboard em um editor de texto e alterar manualmente o id elemento para ser exclusivo.

    Abrindo o arquivo de storyboard em um editor de texto e alterando manualmente o elemento id para ser exclusivo

  • Você pode ver um erro "O aplicativo não foi criado" ao tentar iniciar o aplicativo. Isso ocorre após uma limpeza quando o projeto de inicialização é definido como o projeto de extensão de inspeção. A correção é selecionar Compilar > , Recompilar Tudo e reiniciar o aplicativo.

Removendo o canal alfa das imagens de ícone

Os ícones não devem conter um canal alfa (o canal alfa define áreas transparentes de uma imagem), caso contrário, o aplicativo será rejeitado durante o envio da App Store com um erro semelhante 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.

É fácil remover o canal alfa no Mac OS X usando o aplicativo Preview :

  1. Abra a imagem do ícone em Visualizar e escolha Exportar arquivo>.

  2. A caixa de diálogo exibida incluirá uma caixa de seleção Alfa se um canal alfa estiver presente.

    A caixa de diálogo exibida incluirá uma caixa de seleção Alfa se um canal alfa estiver presente

  3. Desmarque a caixa de seleção Alfa e salve o arquivo no local correto.

  4. A imagem do ícone agora deve passar nas verificações de validação da Apple.

Adicionando manualmente arquivos do controlador de interface

Importante

O suporte do WatchKit do Xamarin inclui o design de storyboards de inspeção no designer do iOS (no Visual Studio para Mac e no Visual Studio), que não requer as etapas descritas abaixo. Basta dar a um controlador de interface um nome de classe no painel de propriedades do Visual Studio para Mac e os arquivos de código C# serão criados automaticamente.

Se você estiver usando o Construtor de Interface do Xcode, siga estas etapas para criar novos controladores de interface para seu aplicativo de inspeção e habilitar a sincronização com o Xcode para que as saídas e ações estejam disponíveis em C#:

  1. Abra o Interface.storyboard do aplicativo de inspeção no Construtor de Interface do Xcode.

    Abrindo o storyboard no Xcode Interface Builder

  2. Arraste um novo InterfaceController para o storyboard:

    Um InterfaceController

  3. Agora você pode arrastar controles para o controlador de interface (por exemplo, rótulos e botões), mas ainda não pode criar saídas ou ações, porque não há arquivo de cabeçalho .h . As etapas a seguir farão com que o arquivo de cabeçalho .h necessário seja criado.

    Um botão no layout

  4. Feche o storyboard e retorne ao Visual Studio para Mac. Crie um novo arquivo C# MyInterfaceController.cs (ou qualquer nome que você quiser) no projeto de extensão do aplicativo de inspeção (NÃO o próprio aplicativo de inspeção onde está o storyboard). Adicione o seguinte código (atualizando o namespace, o nome da classe e o nome do construtor):

    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. Crie outro novo arquivo C# MyInterfaceController.designer.cs no projeto de extensão do aplicativo de inspeção e adicione o código abaixo. Certifique-se de atualizar o namespace, o nome da classe e o 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 ()
            {
            }
        }
    }
    

    Dica

    Você pode (opcionalmente) tornar esse arquivo um nó filho do primeiro arquivo arrastando-o para o outro arquivo C# no Painel de Soluções do Visual Studio para Mac. Em seguida, aparecerá assim:

    A plataforma de solução

  6. Selecione Compilar > Tudo para que a sincronização do Xcode reconheça a nova classe (por meio do Register atributo) que usamos.

  7. Reabra o storyboard clicando com o botão direito do mouse no arquivo de storyboard do aplicativo de inspeção e selecionando Abrir com > o Xcode Interface Builder:

    Abrindo o storyboard no Construtor de Interfaces

  8. Selecione seu novo controlador de interface e dê a ele o nome de classe que você definiu acima, por exemplo. MyInterfaceController. Se tudo funcionou corretamente, ele deve aparecer automaticamente na lista suspensa Classe: e você pode selecioná-lo a partir daí.

    Definindo uma classe personalizada

  9. Escolha o modo de exibição Editor Assistente no Xcode (o ícone com dois círculos sobrepostos) para que você possa ver o storyboard e o código lado a lado:

    O item da barra de ferramentas do Editor Assistente

    Quando o foco estiver no painel de código, verifique se você está examinando o arquivo de cabeçalho .h e, caso contrário, clique com o botão direito do mouse na barra de navegação estrutural e selecione o arquivo correto (MyInterfaceController.h)

    Selecione MyInterfaceController

  10. Agora você pode criar saídas e ações com Ctrl + arrastar do storyboard para o arquivo de cabeçalho .h .

    Criando saídas e ações

    Ao soltar o arrasto, você será solicitado a selecionar se deseja criar uma saída ou uma ação e escolher seu nome:

    A saída e uma caixa de diálogo de ação

  11. Depois que as alterações do storyboard forem salvas e o Xcode for fechado, retorne ao Visual Studio para Mac. Ele detectará as alterações do arquivo de cabeçalho e adicionará automaticamente o código ao arquivo .designer.cs :

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

Agora você pode fazer referência ao controle (ou implementar a ação) em C#!

Iniciando o aplicativo Watch a partir da linha de comando

Importante

Você pode iniciar o Aplicativo de Inspeção no modo de aplicativo normal por padrão e também nos modos Visão Geral ou Notificação usando parâmetros de execução personalizados no Visual Studio para Mac e no Visual Studio.

Você também pode usar a linha de comando para controlar o Simulador do iOS. A ferramenta de linha de comando usada para iniciar aplicativos de inspeção é o mtouch.

Aqui está um exemplo completo (executado como uma única linha no 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

O parâmetro que você precisa atualizar para refletir seu aplicativo é launchsimwatch:

--launchsimwatch

O caminho completo para o pacote de aplicativos principal do aplicativo iOS que contém o aplicativo de inspeção e a extensão.

Observação

O caminho que você precisa fornecer é para o aplicativo do iPhone .app arquivo, ou seja, aquele que será implantado no simulador do iOS e que contém a extensão do relógio e o aplicativo do relógio.

Exemplo:

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

Modo de notificação

Para testar o modo de notificação do aplicativo, defina o watchlaunchmode parâmetro Notification e forneça um caminho para um arquivo JSON que contenha uma carga de notificação de teste.

O parâmetro payload é necessário para o modo de notificação.

Por exemplo, adicione estes argumentos ao comando mtouch:

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

Outros argumentos

Os argumentos restantes são explicados abaixo:

--raiz do sdk

Obrigatória. Especifica o caminho para o Xcode (6.2 ou posterior).

Exemplo:

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

--dispositivo

O dispositivo simulador a ser executado. Isso pode ser especificado de duas maneiras, usando o udid de um dispositivo específico ou usando uma combinação de tempo de execução e tipo de dispositivo.

Os valores exatos variam entre as máquinas e podem ser consultados usando a ferramenta simctl da Apple:

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

UDID

Exemplo:

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

Tempo de execução e tipo de dispositivo

Exemplo:

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