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

На этой странице содержатся дополнительные сведения и способы решения проблем, которые могут возникнуть.This page contains additional information and workarounds for issues you may encounter.

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

ОбщееGeneral

  • Более ранние выпуски Visual Studio для Mac неправильно отображают один из значков апплекомпанионсеттингс как 88x88 пикселов; Это приводит к ошибке отсутствующего значка при попытке отправить в App Store.Earlier releases of Visual Studio for Mac incorrectly show one of the AppleCompanionSettings icons as being 88x88 pixels; which results in a Missing Icon Error if you attempt to submit to the App Store. Этот значок должен быть 87x87 пикселей (29 единиц для @3x экранов Retina).This icon should be 87x87 pixels (29 units for @3x Retina screens). Вы не можете исправить это в Visual Studio для Mac. Измените ресурс изображения в Xcode или вручную измените файл Content. JSON (в соответствии с этим образцом).You cannot fix this in Visual Studio for Mac - either edit the image asset in Xcode or manually edit the Contents.json file (to match this sample).

  • Если идентификатор пакета WKApp "info. > plist " проекта расширения контрольных значений неправильно установлен в соответствии с идентификатором пакетаприложения Watch, отладчику не удастся подключиться, и Visual Studio для Mac будет ожидать сообщение "ожидание завершения работы отладчика Connect " .If the Watch Extension Project's Info.plist > WKApp Bundle ID is not correctly set to match the Watch App's Bundle ID, the debugger will fail to connect and Visual Studio for Mac will wait with the message "Waiting for debugger to connect".

  • Отладка поддерживается в режиме уведомлений , но может быть ненадежной.Debugging is supported in Notifications mode but can be unreliable. Повторная попытка иногда будет работать.Retrying will sometimes work. Убедитесь, что значение info. plist WKCompanionAppBundleIdentifier приложения Watch установлено в соответствии с идентификатором пакета приложения iOS (родительское или контейнером), которое выполняется на устройстве iPhone.Confirm that the Watch App's Info.plist WKCompanionAppBundleIdentifier is set to match the bundle identifier of the iOS parent/container app (ie. the one that runs on the iPhone).

  • в конструкторе iOS не отображаются стрелки точки входа для быстрого просмотра или контроллеров интерфейса уведомлений.iOS Designer does not show entrypoint arrows for Glance or Notification interface controllers.

  • Нельзя добавить две WKNotificationControllers к раскадровке.You cannot add two WKNotificationControllers to a storyboard. Решение Элемент в XML-коде раскадровки всегда вставляется с idтем же. notificationCategoryWorkaround: The notificationCategory element in the storyboard XML is always inserted with the same id. Чтобы обойти эту проблему, можно добавить два (или более) контроллера уведомлений, открыть файл раскадровки в текстовом редакторе, а затем вручную изменить id элемент на уникальный.To work around this problem you can add two (or more) Notification Controllers, open the storyboard file in a text editor and then manually change the id element to be unique.

  • При попытке запустить приложение может появиться сообщение об ошибке "приложение не было собрано".You may see an error "The application has not been built" when trying to launch the app. Это происходит после очистки , если запускаемый проект установлен в проект расширения Watch.This occurs after a Clean when the startup project is set to the watch extension project. Исправлением является выбор сборки > перестроить все , а затем повторно запустить приложение.The fix is to select Build > Rebuild All and then re-launch the app.

Visual StudioVisual Studio

Для поддержки набора наблюдения в конструкторе iOS необходимо правильно настроить решение.The iOS Designer support for Watch Kit requires the solution to be configured correctly. Если ссылки на проект не заданы (см. раздел как установить ссылки), область конструктора будет работать неправильно.If the project references are not set (see how to set references) then the design surface will not work correctly.

Удаление альфа-канала из изображений значковRemoving the Alpha Channel from Icon Images

Значки не должны содержать альфа-канал (канал альфа определяет прозрачные области изображения), в противном случае приложение будет отклонено во время отправки в магазин приложений с ошибкой, аналогичной следующей:Icons should not contain an alpha channel (the alpha channel defines transparent areas of an image), otherwise the app will be rejected during App Store submission with an error similar to this:

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 с помощью предварительной версии приложения:It's easy to remove the alpha channel on Mac OS X using the Preview app:

  1. Откройте изображение значка в области предварительного просмотра , а затем выберите Файл > Экспорт.Open the icon image in Preview and then choose File > Export.

  2. Диалоговое окно, которое отображается, будет содержать флажок альфа -канала, если имеется канал Alpha.The dialog that appears will include an Alpha checkbox if an alpha channel is present.

  3. Untick альфа-канал флажок и Сохранить файл в нужном месте.Untick the Alpha checkbox and Save the file to the correct location.

  4. Теперь изображение значка должно передавать проверки Apple.The icon image should now pass Apple's validation checks.

Добавление файлов контроллера интерфейса вручнуюManually Adding Interface Controller Files

Важно!

Поддержка WatchKit в Xamarin включает проектирование раскадровок просмотра в конструкторе iOS (как в Visual Studio для Mac, так и в Visual Studio), что не требует действий, описанных ниже.Xamarin's WatchKit support includes designing watch storyboards in the iOS designer (in both Visual Studio for Mac and Visual Studio), which does not require the steps outlined below. Просто присвойте контроллеру интерфейса имя класса на панели свойств Visual Studio для Mac, и файлы C# кода будут созданы автоматически.Simply give an interface controller a Class name in the Visual Studio for Mac Properties pad and the C# code files will be created automatically.

Если использовании построителя интерфейс Xcode, выполните следующие действия для создания новых контроллеров интерфейс для наблюдения за приложения и включите синхронизацию с Xcode, выходов и действия, доступные в C#:If you are using Xcode Interface Builder, follow these steps to create new interface controllers for your watch app and enable synchronization with Xcode so that the outlets and actions are available in C#:

  1. Откройте интерфейс Watch приложения . Раскадровка в Xcode Interface Builder.Open the watch app's Interface.storyboard in Xcode Interface Builder.

  2. Перетащите новый InterfaceController элемент на раскадровку:Drag a new InterfaceController onto the storyboard:

  3. Теперь можно перетаскивать элементы управления на контроллер интерфейса (например,You can now drag controls onto the interface controller (eg. Метки и кнопки), но вы не можете создавать розетки или действия, так как отсутствует h -файл заголовка.labels and buttons) but you cannot create outlets or actions yet, because there is no .h header file. Следующие шаги приведут к созданию обязательного файла заголовка . h .The following steps will cause the required .h header file to be created.

  4. Закройте раскадровку и вернитесь к Visual Studio для Mac.Close the storyboard and return to Visual Studio for Mac. Создайте новый C# файл MyInterfaceController.CS (или любое требуемое имя) в проекте " Контрольное расширение приложения " (а не в приложении для просмотра, где находится Раскадровка).Create a new C# file MyInterfaceController.cs (or whatever name you like) in the watch app extension project (NOT the watch app itself where the storyboard is). Добавьте следующий код (с обновлением пространства имен, ClassName и имени конструктора):Add the following code (updating the namespace, classname, and the constructor name):

    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 в проекте " Контрольное расширение приложения " и добавьте приведенный ниже код.Create another new C# file MyInterfaceController.designer.cs in the watch app extension project and add the code below. Не забудьте обновить пространство имен, ClassName и Register атрибут:Be sure to update the namespace, the classname and the Register attribute:

    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 панель решения.You can (optionally) make this file a child node of the first file by dragging it onto the other C# file in the Visual Studio for Mac Solution Pad. Затем он будет выглядеть следующим образом:It will then appear like this:

  6. Выберите Сборка > собрать все , чтобы в ходе синхронизации Xcode был распознан новый класс (через Register атрибут), который мы использовали.Select Build > Build All so that Xcode synchronization will recognize the new class (via the Register attribute) that we used.

  7. Повторно откройте раскадровку, щелкнув файл раскадровки Watch приложения правой кнопкой мыши и выбрав пункт Открыть с помощью > Xcode Interface Builder:Re-open the storyboard by right-clicking on the watch app storyboard file and selecting Open With > Xcode Interface Builder:

  8. Выберите новый контроллер интерфейса и присвойте ему значение className, указанное выше, например.Select your new interface controller and give it the classname you defined above, eg. MyInterfaceController.MyInterfaceController. Если все работало правильно, оно должно появиться автоматически в раскрывающемся списке класс: , и его можно выбрать из этого списка.If everything has worked correctly, it should appear automatically in the Class: drop down list and you can select it from there.

  9. Выберите представление редактора помощника в Xcode (значок с двумя перекрывающимися кружками), чтобы можно было увидеть раскадровку и код параллельно:Choose the Assistant Editor view in Xcode (the icon with two overlapping circles) so that you can see the storyboard and the code side-by-side:

    Если фокус находится на панели кода, убедитесь, что вы просматриваете файл заголовка h и не щелкнули правой кнопкой мыши в строке навигации, и выберите нужный файл (минтерфацеконтроллер. h).When the focus is in the code pane, ensure you're look at the .h header file, and if not right-click in the breadcrumb bar and select the correct file (MyInterfaceController.h)

  10. Теперь вы можете создавать розетки и действия, удерживая нажатой клавишу CTRL + перетаскивание из раскадровки в файл заголовка h .You can now create outlets and actions by Ctrl + drag from the storyboard into the .h header file.

    При освобождении перетаскивания вам будет предложено выбрать, следует ли создать розетку или действие, и выбрать его имя:When you release the drag, you'll be prompted to select whether to create an outlet or an action, and choose its name:

  11. Когда изменения раскадровки сохранены и Xcode закрывается, вернитесь в Visual Studio для Mac.Once the storyboard changes are saved and Xcode is closed, return to Visual Studio for Mac. Он определит изменения в файле заголовка и автоматически добавит код в файл Designer.CS :It will detect the header file changes and automatically add code to the .designer.cs file:

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

Теперь можно ссылаться на элемент управления (или реализовать действие) в C#!You can now reference the control (or implement the action) in C#!

Запуск приложения Watch из командной строкиLaunching the Watch App from the Command Line

Важно!

Вы можете запустить приложение Watch в нормальном режиме приложения по умолчанию, а также в режимах уведомлений или с помощью настраиваемых параметров выполнения в Visual Studio для Mac и Visual Studio.You can start the Watch App in normal app mode by default, and also in Glance or Notification modes using custom execution parameters in Visual Studio for Mac and Visual Studio.

Вы также можете использовать командную строку для управления симулятором iOS.You can also use the command line to control the iOS Simulator. Программа командной строки, используемая для запуска контрольных приложений, — mtouch.The command line tool used to launch watch apps is mtouch.

Ниже приведен полный пример (выполняется как отдельная строка в терминале):Here is a full example (executed as a single line in the 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

Параметр, который необходимо обновить, чтобы отразить ваше приложение launchsimwatch:The parameter you need to update to reflect your app is launchsimwatch:

--лаунчсимватч--launchsimwatch

Полный путь к главному пакету приложений для приложения iOS, содержащего приложение и расширение Watch.The full path to the main app bundle for the iOS app that contains the watch app and extension.

Примечание

Путь, который необходимо предоставить, предназначен для файла приложения iPhone. app, т. е. который будет развернут в симуляторе iOS и содержит как расширение, так и контрольное приложение.The path you need to supply is for the iPhone application .app file, i.e. the one that will be deployed to the iOS simulator and that contains both the watch extension and watch app.

ПримерExample:

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

Режим уведомленияNotification Mode

Чтобы проверить режим уведомления приложения watchlaunchmode , присвойте параметру Notification значение и укажите путь к JSON-файлу, содержащему полезные данные тестового уведомления.To test the app's Notification mode, set the watchlaunchmode parameter to Notification and supply a path to a JSON file that contains a test notification payload.

Параметр полезных данных является обязательным для режима уведомления.The payload parameter is required for Notification mode.

Например, добавьте следующие аргументы в команду mtouch:For example, add these arguments to the mtouch command:

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

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

Остальные аргументы описаны ниже.The remaining arguments are explained below:

--sdkroot добавлен--sdkroot

Обязательный.Required. Указывает путь к Xcode (6,2 или более поздней версии).Specifies the path to Xcode (6.2 or later).

ПримерExample:

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

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

Устройство имитатора для выполнения.The simulator device to execute. Это можно указать двумя способами: с помощью UDID конкретного устройства или с помощью сочетания среды выполнения и типа устройства.This can be specified in two ways, either using the udid of a specific device, or using a combination of runtime and device type.

Точные значения различаются между компьютерами, и их можно запрашивать с помощью средства Apple симктл .The exact values varies between machines, and can be queried using Apple’s simctl tool:

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

UDIDUDID

ПримерExample:

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

Время выполнения и тип устройстваRuntime and Device type

ПримерExample:

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