Как отлаживать расширения iOS 8 с помощью NSLog?

- (void)viewDidLoad
{
    NSLog(@"%s", __func__);
    // ...
}

на viewDidLoad iOS 8 расширение. the NSLog ничего не выводит в Xcode. NSLog работает как обычно в контейнере приложения, хотя.

как я могу получить вывод из сообщений отладки из расширения?

16 ответов


  1. отладка работает для расширений приложений.
  2. он работает и на симуляторе.
  3. Если ваше приложение ext аварийно завершает работу в симуляторе, вы можете обнаружить, что перезапустить приложение ext нелегко. Перезапуск симулятора-это быстрое решение.
  4. шаги для отладки приложения:

    1. запустите приложение контейнера. На этом шаге Xcode загружает приложение контейнера и расширение приложения на устройство или симулятор.

    2. остановите приложение контейнера. Этот шаг важен при отладке в симуляторе. Если вы этого не сделаете, Xcode сообщит вам, что симулятор используется.

    3. в Xcode нажмите меню Debug - > Attach to Process - > by Process Identifer (PID) или Name..., введите идентификатор приложения ext, например com.азбука.ContainerApp.MyExtension, чтобы начать отладку. Не забудьте установить точки останова. (Update on Aug 25, 2014: Вы можете ввести MyExtension(имя вашего расширения) непосредственно.)

    4. в эмуляторе или на устройстве, откройте приложение.


обновления от 23 августа 2014:

я обнаружил, что шаги отладки выше не работают хорошо на Xcode 6 beta 6 с iOS 8 SDK beta 5 на симуляторе.

устранение:

  1. запустите расширение в симуляторе.
  2. меню Xcode Debug - > Attach to Process - > выберите " MyExtension(ваш имя расширения) "в разделе" Система " в меню.

точки останова работают. Но я не знаю, почему журналы не отображаются в окне вывода.


У меня тоже эта проблема. Это работает для меня, если вы идете в своем симуляторе под меню Debug - > Open System Log...

отсюда вы можете увидеть все журналы симулятора iPhone (включая журналы вашего расширения).

enter image description here


NSLog работает отлично.

вы просто не видите, что регистрируется в области отладки Xcode, потому что отладчик Xcode не подключен к вашему расширению. Расширения почти полностью независимы от их содержащего приложения. Например, они имеют отдельные идентификаторы пакетов, а также являются отдельными процессами в ОС.

у меня был разнообразный успех в получении Xcode для присоединения к расширениям. Якобы кажется будет автоматически присоединяться, и он появляется в навигаторе отладки как "ожидание присоединения", но никогда не присоединяется.

иногда я могу запустить цель расширения в Xcode:

enter image description here

и затем есть возможность выбрать, какое приложение для запуска моего расширения. В этом случае я бы выбрал свою рекомендацию "сегодня", которая является центром уведомлений.

enter image description here

и тогда это было бы иногда прикрепления отладчик для моего расширения. Обратите внимание, что этот метод работает только на физических устройствах.

если он не прикрепляется, вы можете использовать метод ручного вложения в ответе @VinceYaun,

у меня также был разнообразный успех, используя другие методы привязанности. Большинство из них не увенчались успехом, и, похоже, это просто ошибки, которые будут исправлены позже.

для просмотра сообщений журнала вы идете в Window ->Devices в верхней панели и выберите ваше устройство. Вы можете воспитывать журнал устройств в нижней части окна. Если вы тестируете на симуляторе, вы можете использовать @Balestrapatrick's ответ.

некоторые из ошибок были исправлены в бета-версии 2, и я предполагаю, что в конечном итоге отладчик будет автоматически подключаться при запуске расширения.

обновление: в iOS 8 Beta 4 заметки:

расширения

исправлено в бета-версии 4

  • расширения иногда не запускаются при отладке из Xcode.
  • когда расширение с UI убито, оно перезапускается и не отклоняется.
  • Иногда ваш общий доступ или расширение действия может зависнуть.
  • повторное развертывание расширения может отключить его в Центре уведомлений.

У меня тоже эта проблема. Xcode никогда не присоединяет мой отладчик к расширению или не отображает сообщения NSLog. Если вы присоедините отладчик Xcode вручную к процессу расширения, по крайней мере точки останова будут работать как шарм:

Debug->Attach to process->Your extension name (mine was "com.example.MyExtensionApp.MyExtension")

  1. создать схему для вашего расширения
  2. запуск схемы
  3. в диалоговом окне выберите container app
  4. наслаждайтесь

это для меня :)


Xcode 8 способен отлаживать расширения:

  1. выберите схему расширения в комбо рядом с кнопкой "стоп" и запустите ее.
  2. выберите родительское приложение в появившемся диалоговом окне.

результат: точки останова и журнал работают как обычно.


что, наконец, позволило мне увидеть журнал в области отладки, основанный на Майкл предложение и документация Apple, является:

построить и запустить приложение в симуляторе и, когда предложено множество приложений, выберите конкретное приложение, которое вы собираетесь вызвать расширение из. В моем случае я запускал расширение действия из Safari, вытаскивая общий лист в PDF.

то, что не работало раньше, было следуя предложениям других людей использовать сегодня в качестве хоста, но затем оставить это приложение и перейти к Safari, чтобы вызвать мое расширение. Мне больше не нужно даже запускать мое содержащее приложение перед запуском расширения.

из документации Apple:

на этапе выполнения схемы расширения в качестве исполняемого файла указывается хост-приложение. При доступе к расширению через пользовательский интерфейс указанного хоста отладчик Xcode присоединяется к расширение.


Я на самом деле получил журналы для запуска довольно просто в Xcode 6.3. Во-первых, создайте и запустите содержащее приложение. После запуска содержащего приложения на устройстве создайте и запустите расширение приложения, изменив схему на расширение приложения.

Apple имеет документацию, непосредственно связанную с отладкой, профилированием и тестированием вашего расширения приложения.


трюк, который работает для меня (хотя это довольно уродливый) - поставить муляж UILabel где-то в нижнем углу моего расширения. Я обычно называю это logLabel. Затем можно обновить текст этой метки с помощью любого оператора журнала, который вы хотите зарегистрировать. Такой подход не очень хорош, если вам нужно регистрировать операторы из экземпляров разных классов. И, очевидно, он загромождает ваш пользовательский интерфейс.

однако, если у вас есть довольно простой виджет, и вы не возражаете о небольшом загромождении пользовательского интерфейса это делает трюк. Я пробовал все другие решения, изложенные в этой дискуссии, и, к сожалению, ни одно из них не сработало для меня.


единственный способ отладки для меня-выбрать Debug - >Attach to Process по PID или имени Затем введите PID не имя расширения. Вы можете найти PID, запустив расширение на устройстве, перейдите в окно - >устройства. Найдите устройство и просмотрите консоль. Когда вы видите имя вашего расширения, за ним следует 5-значный номер. Это PID

Я также поместил кучу NSLog в расширение, чтобы найти PID. Это на xCode 7


очевидно, что-то сломано в Xcode6-B5.

Если я попытаюсь запустить расширение фотографии на симуляторе, я не увижу никаких фотографий.app в качестве опции для процесса присоединения расширения.

debug options within simulator

то же, работает на реальном устройстве, дайте мне правильное поведение.

debug options withing a real device

в первом случае любая точка останова не соблюдается. В последнем случае точки останова работают как по волшебству.


вы должны знать, что приложение-контейнер и расширение-это полностью два процесса разницы в iOS, в то время как LLVM отлаживает только поток за раз, поэтому при отладке консоль никогда не регистрирует расширение и никогда не останавливается в точке останова.

вы можете решить большинство проблем методом @Vince Yuan.

однако моя проблема в том, что отладчик Xcode вряд ли подключается к моему расширению клавиатуры как на симуляторе iOS, так и на устройствах, например, 1 раз в 7-8 запусках, это полностью вопрос вероятности. Метод @ Vince Yuan также работает только иногда.

мой небольшой опыт заключается в том, что при запуске схемы отладки, если сеанс отладки в левой панели показывает, что "нет сеанса отладки", нет необходимости открывать расширение и тестировать его, отладчик не подключался, просто запустите снова для lucky.

но когда вы смотрите com.xxx.xxx.xxx ждет присоединения, расширение определенно может отлаживаться.

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


начиная с Xcode 6 Beta 5, я смог использовать фактическое устройство под управлением iOS8 для отладки моего расширения. Попробуйте запустить его на устройстве и выберите Safari для запуска в


чтобы преодолеть все состояния, вызванные постоянно меняющейся IDE, я использую консоль iOS lemonjar.com -он отображает окно консоли для любого подключенного устройства iOS, отображающего сообщения системного журнала независимо от идентификатора процесса. Здесь вы можете сразу увидеть сообщения журнала отладки приложений и расширений.


я мог бы отладить свое расширение так, как я описываю ниже:

  1. в Xcode : Debug ->Attach to process by PID or Name. Имя схемы расширения.
  2. выберите main app target и запустить.

Я надеюсь, что это также работает для вас, ребята.


сталкиваются с той же проблемой о расширении для NSLog, и брейк-пойнтов. Я боролся с ним много дней.

Device log можно найти как следующее изображение. Он находится на XCode -> Window -> Devices and Simulators.

после ввода Open Console, есть поле поиска в правом верхнем углу диалогового окна. Я могу применить правило фильтрации. Например, имя процесса содержит Notification ключевое слово или имя процесса должно быть равно имени цели расширения, например: равно