Бөлісу құралы:


Устранение неполадок watchOS

Эта страница содержит дополнительные сведения и обходные пути для проблем, которые могут возникнуть.

Известные проблемы

Общие

  • Предыдущие выпуски Visual Studio для Mac неправильно отображают один из значков AppleCompanionSettings как 88x88 пикселей, что приводит к ошибке отсутствующих значков при попытке отправить в App Store. Этот значок должен быть 87x87 пикселей (29 единиц для @3x экранах Retina). Это невозможно исправить в Visual Studio для Mac. Измените ресурс изображения в Xcode или вручную измените файл Contents.json.

  • Если идентификатор пакета WKApp в проекте > расширения часов не соответствует идентификатору пакета watch App, отладчик не сможет подключиться и Visual Studio для Mac подождит сообщение "Ожидание подключения отладчика".

  • Отладка поддерживается в режиме уведомлений, но может быть ненадежной. Повторная попытка иногда будет работать. Убедитесь, что для приложения Watch App's Info.plist WKCompanionAppBundleIdentifier задан идентификатор пакета родительского или контейнерного приложения iOS (т. е. тот, который выполняется на iPhone).

  • Конструктор iOS не отображает стрелки точек входа для контроллеров интерфейса "Взгляд" или "Уведомления".

  • Нельзя добавить два WKNotificationControllers в раскадровку. Обходное решение. Элемент notificationCategory в XML-файле раскадровки всегда вставлен с одинаковым id. Чтобы обойти эту проблему, можно добавить два (или более) контроллера уведомлений, открыть файл раскадровки в текстовом редакторе, а затем вручную изменить id элемент, чтобы он был уникальным.

    Открытие файла раскадровки в текстовом редакторе и изменение элемента идентификатора вручную на уникальное

  • При попытке запустить приложение может появиться сообщение об ошибке "Приложение не создано". Это происходит после очистки, когда запускаемый проект установлен в проект расширения контрольных значений. Исправление заключается в том, чтобы выбрать сборку > "Перестроить все ", а затем повторно запустить приложение.

Удаление альфа-канала из изображений значков

Значки не должны содержать альфа-канал (альфа-канал определяет прозрачные области изображения), в противном случае приложение будет отклонено во время отправки App Store с ошибкой, аналогичной этой ошибке:

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.

Легко удалить альфа-канал в Mac OS X с помощью приложения предварительной версии :

  1. Откройте изображение значка в предварительной версии и выберите пункт "Экспорт файлов>".

  2. В появившемся диалоговом окне будет установлен флажок Альфа , если альфа-канал присутствует.

    Откроется диалоговое окно с флажком

  3. Установите флажок Альфа и сохраните файл в правильном расположении.

  4. Изображение значка теперь должно пройти проверки Apple.

Добавление файлов контроллера интерфейса вручную

Внимание

Поддержка Xamarin WatchKit включает проектирование раскадровки часов в конструкторе iOS (как в Visual Studio для Mac, так и в Visual Studio), что не требует действий, описанных ниже. Просто присвойте контроллеру интерфейса имя класса на панели свойств Visual Studio для Mac, а файлы кода C# будут созданы автоматически.

Если вы используете построитель интерфейсов Xcode, выполните следующие действия, чтобы создать новые контроллеры интерфейса для приложения наблюдения и включить синхронизацию с Xcode, чтобы точки и действия были доступны в C#:

  1. Откройте приложение "Интерфейс.раскадровка" в конструкторе интерфейсов Xcode.

    Открытие раскадровки в конструкторе интерфейсов Xcode

  2. Перетащите новое InterfaceController на раскадровку:

    ИнтерфейсController

  3. Теперь можно перетащить элементы управления на контроллер интерфейса (например, метки и кнопки), но вы еще не можете создавать точки или действия, так как файл заголовка H отсутствует. Следующие шаги приводят к созданию необходимого файла заголовка H .

    Кнопка в макете

  4. Закройте раскадровки и вернитесь к Visual Studio для Mac. Создайте новый файл C# MyInterfaceController.cs (или любое имя, которое вы хотите), в проекте расширения приложения для часов (НЕ приложение для просмотра, где находится раскадровка). Добавьте следующий код (обновление пространства имен, имени класса и имени конструктора):

    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. Создайте еще один файл C# MyInterfaceController.designer.cs в проекте расширения приложения watch и добавьте приведенный ниже код. Обязательно обновите пространство имен, имя класса и 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 ()
            {
            }
        }
    }
    

    Совет

    Этот файл можно (необязательно) сделать дочерним узлом первого файла, перетащив его на другой файл C# на панели решения Visual Studio для Mac. Затем появится следующее:

    Панель решения

  6. Выберите "Сборка > все ", чтобы синхронизация Xcode распознала новый класс (с помощью атрибута Register ), который мы использовали.

  7. Повторно откройте раскадровку, щелкнув правой кнопкой мыши файл раскадровки приложения и выбрав команду Open With > Xcode Interface Builder:

    Открытие раскадровки в построителе интерфейсов

  8. Выберите новый контроллер интерфейса и присвойте ему имя класса, определенное выше, например. MyInterfaceController. Если все работало правильно, он должен отображаться автоматически в раскрывающемся списке: и выбрать его из него.

    Настройка пользовательского класса

  9. Выберите представление редактора помощника в Xcode (значок с двумя перекрывающимися кругами), чтобы увидеть раскадровки и код параллельно:

    Элемент панели инструментов редактора помощника

    Если фокус находится в области кода, убедитесь, что вы просматриваете файл заголовка H , а если не щелкните правой кнопкой мыши панель навигации и выберите правильный файл (MyInterfaceController.h)

    Выбор MyInterfaceController

  10. Теперь вы можете создавать точки и действия с помощью ctrl+перетаскивания из раскадровки в H-файл заголовка.

    Создание точек и действий

    При освобождении перетаскивания вам будет предложено выбрать, следует ли создать выход или действие, и выбрать его имя:

    Выход и диалоговое окно действия

  11. После сохранения изменений раскадровки и закрытия Xcode вернитесь к Visual Studio для Mac. Он обнаружит изменения файла заголовка и автоматически добавит код в файл .designer.cs :

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

Теперь вы можете ссылаться на элемент управления (или реализовать действие) в C#!

Запуск приложения watch из командной строки

Внимание

По умолчанию можно запустить приложение "Просмотр" в обычном режиме приложения, а также в режиме "Просмотр" или "Уведомления" с помощью настраиваемых параметров выполнения в Visual Studio для Mac и Visual Studio.

Вы также можете использовать командную строку для управления симулятором iOS. Средство командной строки, используемое для запуска приложений для просмотра, — mtouch.

Ниже приведен полный пример (выполняется как одна строка в терминале):

/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

Параметр, который необходимо обновить, чтобы отразить ваше приложение:launchsimwatch

--launchsimwatch

Полный путь к основному пакету приложений для приложения iOS, содержащего приложение наблюдения и расширение.

Примечание.

Путь, который необходимо указать, предназначен для приложения iPhone, .app файла, т. е. тот, который будет развернут в симуляторе iOS, и который содержит расширение часы и приложение для просмотра.

Пример:

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

Режим уведомлений

Чтобы проверить режим уведомлений приложения, задайте watchlaunchmode параметр Notification и укажите путь к JSON-файлу, который содержит полезные данные тестового уведомления.

Параметр полезных данных необходим для режима уведомлений.

Например, добавьте эти аргументы в команду mtouch:

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

Другие аргументы

Ниже описаны остальные аргументы:

--sdkroot

Обязательный. Указывает путь к Xcode (6.2 или более поздней версии).

Пример:

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

--устройство

Устройство симулятора для выполнения. Это можно указать двумя способами либо с помощью udid определенного устройства, либо с помощью сочетания типа среды выполнения и устройства.

Точные значения зависят от компьютеров и могут запрашиваться с помощью средства simctl Apple:

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

UDID

Пример:

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

Тип среды выполнения и устройства

Пример:

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