Устранение неполадок watchOS
Эта страница содержит дополнительные сведения и обходные пути для проблем, которые могут возникнуть.
Добавление файлов контроллера интерфейса вручную для построителя интерфейсов Xcode.
Известные проблемы
Общие
Предыдущие выпуски 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 с помощью приложения предварительной версии :
Откройте изображение значка в предварительной версии и выберите пункт "Экспорт файлов>".
В появившемся диалоговом окне будет установлен флажок Альфа , если альфа-канал присутствует.
Установите флажок Альфа и сохраните файл в правильном расположении.
Изображение значка теперь должно пройти проверки Apple.
Добавление файлов контроллера интерфейса вручную
Внимание
Поддержка Xamarin WatchKit включает проектирование раскадровки часов в конструкторе iOS (как в Visual Studio для Mac, так и в Visual Studio), что не требует действий, описанных ниже. Просто присвойте контроллеру интерфейса имя класса на панели свойств Visual Studio для Mac, а файлы кода C# будут созданы автоматически.
Если вы используете построитель интерфейсов Xcode, выполните следующие действия, чтобы создать новые контроллеры интерфейса для приложения наблюдения и включить синхронизацию с Xcode, чтобы точки и действия были доступны в C#:
Откройте приложение "Интерфейс.раскадровка" в конструкторе интерфейсов Xcode.
Перетащите новое
InterfaceController
на раскадровку:Теперь можно перетащить элементы управления на контроллер интерфейса (например, метки и кнопки), но вы еще не можете создавать точки или действия, так как файл заголовка H отсутствует. Следующие шаги приводят к созданию необходимого файла заголовка H .
Закройте раскадровки и вернитесь к 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); } } }
Создайте еще один файл 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. Затем появится следующее:
Выберите "Сборка > все ", чтобы синхронизация Xcode распознала новый класс (с помощью атрибута
Register
), который мы использовали.Повторно откройте раскадровку, щелкнув правой кнопкой мыши файл раскадровки приложения и выбрав команду Open With > Xcode Interface Builder:
Выберите новый контроллер интерфейса и присвойте ему имя класса, определенное выше, например.
MyInterfaceController
. Если все работало правильно, он должен отображаться автоматически в раскрывающемся списке: и выбрать его из него.Выберите представление редактора помощника в Xcode (значок с двумя перекрывающимися кругами), чтобы увидеть раскадровки и код параллельно:
Если фокус находится в области кода, убедитесь, что вы просматриваете файл заголовка H , а если не щелкните правой кнопкой мыши панель навигации и выберите правильный файл (MyInterfaceController.h)
Теперь вы можете создавать точки и действия с помощью ctrl+перетаскивания из раскадровки в H-файл заголовка.
При освобождении перетаскивания вам будет предложено выбрать, следует ли создать выход или действие, и выбрать его имя:
После сохранения изменений раскадровки и закрытия 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