Solução de problemas do watchOS
Esta página contém informações adicionais e soluções alternativas para problemas que você pode encontrar.
Adicionando manualmente arquivos de controlador de interface para o Xcode Interface Builder.
Iniciando o WatchApp a partir da linha de comando.
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 telas @3x 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 Info.plist > WKApp do Projeto de Extensão de Observação não estiver definida corretamente para corresponder à ID do Bundle do Aplicativo de Observaçã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. Repetir às vezes funciona. 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 iOS Designer não mostra setas de ponto de entrada para controladores de interface Glance ou Notification.
Não é possível adicionar dois
WKNotificationControllers
a um storyboard. Solução alternativa: onotificationCategory
elemento no XML do storyboard é sempre inserido com o mesmoid
. Para contornar esse problema, você pode adicionar dois (ou mais) controladores de notificação, abra o arquivo de storyboard em um editor de texto e, em seguida, altere manualmente oid
elemento 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 para o projeto de extensão de inspeção. A correção é selecionar Compilar reconstruir > tudo e, em seguida, reiniciar o aplicativo.
Removendo o canal Alpha 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 :
Abra a imagem do ícone em Visualizar e escolha > Exportar arquivo.
A caixa de diálogo exibida incluirá uma caixa de seleção Alpha se um canal alfa estiver presente.
Desmarque a caixa de seleção Alpha e salve o arquivo no local correto.
A imagem do ícone agora deve passar pelas verificações de validação da Apple.
Adicionando manualmente arquivos do controlador de interface
Importante
O suporte ao WatchKit do Xamarin inclui a criação de storyboards de relógio no designer do iOS (no Visual Studio para Mac e no Visual Studio), o que não requer as etapas descritas abaixo. Basta dar a um controlador de interface um nome de classe no painel Propriedades do Visual Studio para Mac e os arquivos de código C# serão criados automaticamente.
Se você estiver usando o Xcode Interface Builder, siga estas etapas para criar novos controladores de interface para seu aplicativo de relógio e habilitar a sincronização com o Xcode para que as saídas e ações estejam disponíveis em C#:
Abra o Interface.storyboard do aplicativo de relógio no Xcode Interface Builder.
Arraste um novo
InterfaceController
para o storyboard:Agora você pode arrastar controles para o controlador de interface (por exemplo, rótulos e botões), mas você não pode criar saídas ou ações ainda, porque não há nenhum arquivo de cabeçalho .h . As etapas a seguir farão com que o arquivo de cabeçalho .h necessário seja criado.
Feche o storyboard e retorne ao Visual Studio para Mac. Crie um novo MyInterfaceController.cs de arquivo C# (ou qualquer nome que você quiser) no projeto de extensão do aplicativo de observação (NÃO o aplicativo de relógio em si, onde o storyboard está). 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); } } }
Crie outro novo arquivo C# MyInterfaceController.designer.cs no projeto de extensão de aplicativo de observaçã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 Visual Studio para Mac Solution Pad. Em seguida, aparecerá assim:
Selecione Build > Build All para que a sincronização do Xcode reconheça a nova classe (por meio do atributo
Register
) que usamos.Reabra o storyboard clicando com o botão direito do mouse no arquivo de storyboard do aplicativo de observação e selecionando Abrir com > o Xcode Interface Builder:
Selecione seu novo controlador de interface e dê-lhe o nome de classe que você definiu acima, por exemplo.
MyInterfaceController
. Se tudo tiver funcionado corretamente, ele deve aparecer automaticamente na lista suspensa Classe: e você pode selecioná-lo a partir daí.Escolha a visualizaçã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:
Quando o foco estiver no painel de código, verifique se você está olhando para o arquivo de cabeçalho .h e, se não estiver clicando com o botão direito do mouse na barra de navegação e selecione o arquivo correto (MyInterfaceController.h)
Agora você pode criar saídas e ações com Ctrl + arrastar do storyboard para o arquivo de cabeçalho .h .
Ao soltar o arrasto, você será solicitado a selecionar se deseja criar uma saída ou uma ação e escolher seu nome:
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 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 Watch App 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 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 observaçã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 e a extensão do relógio.
Observação
O caminho que você precisa fornecer é para o arquivo de .app do aplicativo do iPhone, 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 e Notification
forneça um caminho para um arquivo JSON que contém 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 demais argumentos são explicados a seguir:
--sdkroot
Obrigatória. Especifica o caminho para o Xcode (6.2 ou posterior).
Exemplo:
--sdkroot /Applications/Xcode.app/Contents/Developer/
--dispositivo
O dispositivo simulador para executar. 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