Отладка WatchKit на реальном Apple Watch - ничего не происходит
Я борюсь с отладкой моего WatchKit Extension/App на реальном Apple Watch. Отладка как iPhone App, так и WatchKit Extension с помощью симулятора имитатора не проблема:
- Выберите профиль приложения WatchKit и запустите в Simulator == > Приложение запущено в Watch Simulator, и я могу использовать точки останова в код расширения для отладки.
- Чтобы отлаживать приложение iPhone, я запускаю приложение в симуляторе и вручную присоединяю отладчик == > Я могу использовать точки останова в iPhone Code для отладки.
Нет проблем наблюдать как работу приложения iPhone, так и приложения часов. По крайней мере, не в симуляторе.
Я хотел бы сделать то же самое на реальном Apple Watch. Но когда я выбираю профиль приложения WatchKit и мой настоящий iPhone (вместо симулятора) и нажимаю "Run", ничего не происходит. Это означает, что Xcode, похоже, создает и запускает приложение, но на устройствах ничего не происходит. Поле статуса в Xcode показывает:
Создание приложения MyApp WatchKit: расширение MyApp WatchKit
Построение приложения MyApp WatchKit: завершение...
Запуск MyApp на моем iPhone 6
Это все. Окно отладки отсутствует, точки останова игнорируются или не работают, и приложение не запускается ни на iPhone, ни на Apple Watch.
Я нашел другие вопросы о проблемах с отладкой на реальных устройствах (например, здесь), но все они касаются проблем установки и подписания. В моем случае приложения iPhone и приложение WatchKit установлены без каких-либо проблем. Когда я нажимаю значок приложения на Watch, я могу запустить и использовать приложение. Проблема в том, что я не могу отлаживать этот процесс.
Зачем мне нужно отлаживать процесс на реальных устройствах? Ну, есть одна вещь, которую я не могу проверить с помощью симулятора: что происходит, когда приложение Watch пытается связаться с приложением iPhone с помощью openParentApplication:reply:
когда приложение iPhone еще не запущено? Это отлично работает в симуляторе, но на реальных устройствах приложения Watch Apps не получают ответа от приложения iPhone и просто ждут навсегда.
Я уже нашел подсказки, чтобы решить эту проблему, но не имея возможности отлаживать приложение Watch и видеть, как выполняется код. Я не могу быть уверен, что происходит...
Ответы
Ответ 1
Благодарю вас за ваши ответы. Наконец-то мне удалось запустить отладку (большую часть времени) на моем реальном Apple Watch. Однако он довольно громоздкий и не очень надежный. В комментариях недостаточно места, поэтому я буду использовать этот ответ для описания моего решения. Может быть, это полная помощь другим:
- Убедитесь, что приложение на часах не работает (как описано в BalestraPatrick). Запустите приложение и удерживайте боковую кнопку несколько секунд, чтобы открыть диалоговое окно "Отключить часы". Удерживайте боковую кнопку еще на несколько секунд, чтобы закрыть приложение и вернуться на рабочий экран Watch.
-
Убедитесь, что iPhone не заблокирован.
-
Выберите цель WatchKit App
и ваш реальный iPhone и запустите проект.
- Запуск приложения Watch довольно часто происходит с ошибкой
SPErrorInvalidBundleNoGizmoBinaryMessage
. Перезапуск Xcode и очистка как приложения "Наблюдение", так и цели приложения решили это.
- Если сборка приложения Watch будет успешной, в Xcode будет короткое сообщение, но на вашем iPhone или Watch ничего не будет. Если вы внесли изменения в приложение Watch, потребуется несколько секунд, чтобы обновить приложение в Watch. Это обозначается очертанием рабочего цикла над значком приложения. Если вы не внесли никаких изменений, как только приложение будет перенесено: Запустите приложение просмотра вручную, нажав значок. Автоматический запуск не будет.
- В большинстве случаев Xcode распознает запуск приложения и присоединяет к нему свой отладчик. Это позволит использовать точки останова, проверить код и т.д.
В моем случае я просил проверить, как приложение iPhone обрабатывает вызов application:handleWatchKitExtensionRequest:reply:
, когда приложение не было активным до. Это важно, потому что это невозможно сделать с помощью симулятора. Если приложение займет много времени, чтобы обработать запрос, Watch не получит никакого действительного ответа.
После выполнения описанных выше шагов Xcode подключается только к приложению часов и не будет удерживать контрольные точки в коде приложения iPhone. Для этого нужно вручную подключить отладчик к процессу приложения iPhone, который запускается, когда приложение-наблюдатель отправляет свой вызов.
Чтобы иметь возможность подключить отладчик, я добавил задержку для основной функции приложения: [NSThread sleepForTimeInterval:5]
:
- Выберите функцию в приложении часов, которая запустит вызов приложения iPhone.
- Приложение iPhone будет запущено в фоновом режиме. Задержка дает вам 5 секунд для прикрепления отладчика.
- Выберите
Debug\Attach To Process\Likely Targes\Your iPhone App
в Xcode для присоединения отладчика.
- После 5-секундной задержки процесс продолжится, и вы также сможете использовать контрольные точки в коде приложения iPhone.
- Не забудьте удалить код задержки при завершении тестирования: -)
Примечание:
Вы не сможете увидеть вывод NSLog
(или любой выход на консоль) из приложения iPhone, так как прикрепление отладчика НЕ перенаправляет вывод консоли.
Счастливое тестирование с помощью этого удивительного нового продукта Apple:-P
Ответ 2
У меня такая же проблема, но немного улучшить опыт отладки. Я обычно перезапускаю свои устройства несколько раз. Попробуйте перезагрузить Apple Watch или ваш iPhone.
Перед запуском приложения из Xcode убедитесь, что приложение полностью закрыто на вашем Apple Watch (например, не застряло на экране загрузки). Для этого вам нужно закрыть приложение: войдите в приложение, удерживайте боковую кнопку нажатой, пока не появится меню, чтобы отключить часы, затем нажмите ту же самую боковую кнопку еще на несколько секунд, пока часы не вернутся к рабочего стола и силы закрыть приложение.
Теперь вы можете попытаться создать и запустить приложение из Xcode, и оно должно работать более надежно.
watchOS 3 +:
Силовое завершение выполняется нажатием и удержанием боковой кнопки (кнопки чуть ниже цифровой короны), пока не появится экран выключения, а затем
отпустите боковую кнопку, затем нажмите и удерживайте цифровую корону.
Ответ 3
Вот техника, которая кажется мне самой надежной, хотя она работает только около 25% времени (Xcode 7 beta 4, 7A165t):
- Запустите целевую аудиторию телефона в отладке (конечно, на вашем реальном iPhone).
- Пока приложение iPhone все еще работает, переключитесь на цель просмотра и запустите его в отладочном режиме.
- Следите за тем, как работает приложение для просмотра часов. Как только приложение будет установлено, коснитесь его, чтобы открыть его. Иногда это "запускает" приложение часов и позволяет отладчику его поймать. На этом этапе вы сможете одновременно отлаживать приложение iPhone и приложение watchOS.
Ответ 4
У этого вопроса разные ответы. Все хорошо.
Причина в том, что по моему опыту существует, по крайней мере, две разные проблемы, которые препятствуют отладке реальных часов. Оба требуют другой стратегии.
Этот ответ пытается помочь вам решить, когда использовать эту стратегию.
- Установка XCode, говорит вам, что она работает в течение короткого времени, а затем перестает показывать "running...".
- начните с ответа BalestraPatrick:
- перезагрузите устройства.
- Не забудьте перезагрузить свой iPhone. Это сделало трюк в первый раз, когда у меня возникла эта проблема.
- Установка XCode, говорит вам, что он работает в течение более длительного периода времени: "running < projectName" в Apple Watch of <yourname> .
- начните с ответа Джей Хикки или Андрея Херфорда
- запуск приложения для часов вручную, вероятно, делает трюк.
У меня также были времена, когда XCode смог запустить приложение для просмотра без какой-либо помощи от меня.
Bonus:
Начиная с XCode 7.1, похоже, что XCode не всегда компилирует все необходимые файлы Swift (чаще, чем раньше). Это не относится к конкретным часам, это также относится к приложениям iOS. Симптомы могут быть похожи на симптомы этого вопроса. → очистите проект, а затем перезапустите XCode.