Як налагодити розширення iOS 8 за допомогою NSLog?


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

у розширенніviewDidLoad iOS 8 . НЕ виводить нічого в Xcode. працює як зазвичай у програмі контейнера.NSLogNSLog

Як я можу отримати вихід з повідомлень про налагодження з розширення?


У мене це питання теж є. Можливо, NSLog просто зламаний. На даний момент я використовую точки зупинку для налагодження значень. Але вони справді глючать.
gallileo

У мене є подібна проблема, коли налагоджувач ніколи не замикається і завжди говорить "чекає приєднання" в Xcode. На жаль, я не бачу користі від гуглінгу і розмістив запитання тут на Stack без відповідей.
Alex Bollbach

Відповіді:


95
  1. Налагодження працює для розширень додатків.
  2. Це працює і на тренажері.
  3. Якщо програма ext аварійно завершує роботу в симуляторі, можливо, перезапустити програму ext нелегко. Перезапуск симулятора - це швидке рішення.
  4. Кроки для налагодження розширення програми:

    1. Запустіть програму-контейнер. На цьому кроці Xcode завантажує додаток-контейнер та розширення програми на пристрій або симулятор.

    2. Зупиніть програму-контейнер. Цей крок важливий під час налагодження в симуляторі. Якщо ви цього не зробите, Xcode повідомить, що використовується симулятор.

    3. У Xcode натисніть меню Налагодження -> Приєднати до процесу -> За ідентифікатором процесу (PID) або Іменем ..., введіть ідентифікатор зовнішнього додатка, наприклад com.abc.ContainerApp.MyExtension, щоб розпочати налагодження. Не забудьте встановити точки перерви. (Оновлення 25 серпня 2014 року: ви можете ввести MyExtension (ім’я вашого розширення) безпосередньо.)

    4. На пристрої або симуляторі відкрийте розширення програми.


Оновлення від 23 серпня 2014 року:

Я виявив, що наведені вище кроки налагодження не працюють добре на Xcode 6 beta 6 з iOS 8 SDK beta 5 на симуляторі.

Рішення:

  1. Запустіть розширення в тренажері.
  2. Налагодження меню Xcode -> Приєднати до процесу -> Виберіть "MyExtension (ім'я вашого розширення)" у розділі "Система" меню.

Точки зупинки працюють. Але я не знаю, чому журнали не відображаються у вікні виводу.


8
Наразі найпростіший спосіб налагодження (і див. NSLog), який я знайшов, - це наступні дії: /// 1 /// Виберіть схему програми-контейнера та запустіть її. /// 2 /// Після його запуску - поверніться до XCode і (навіть не натискаючи кнопку Stop) виберіть схему розширення, а потім натисніть кнопку Run. /// 3 /// Коли буде запропоновано вибрати програму для запуску, виберіть Сьогодні. /// 4 /// Тепер точки зупинку та NSLog повинні працювати без проблем.
перервати

1
Це не працює навіть сьогодні, особливо після аварії. Це дуже дратує, я не розумію, чому це так важко виправити.
Крісті Балуша,

3
Я спробував скористатися оновленими інструкціями вище, і це спрацювало для мене. Однак на кроці 2, замість мого імені розширення, я використав "За ідентифікатором процесу (PID) або ім'ям ..." і ввів pid процесу. Це чарівним чином дозволило мені використати мої брейки.
tony.tc.leung

Налагодження> Приєднати до процесу за допомогою PID або імені: у текстовому полі введіть ім'я процесу в навігаторі налагодження, щось на зразок com.company.AppName.AppName-ExtensionName
TigerCoding

Ця відповідь не стосується питання. OP запитує, чому повідомлення NSLog не записуються на консоль у розширенні (законне занепокоєння, оскільки я зайшов на цю сторінку з тим самим питанням). Він нічого не згадує про проблеми, що підключаються до налагоджувача.
Joey Carson

49

Я теж маю цю проблему. Мені це працює, якщо ви зайдете у свій симулятор в меню Налагодження -> Відкрити системний журнал ...

Звідси ви можете переглянути всі журнали iPhone Simulator (включаючи журнали вашого розширення).

введіть тут опис зображення


він відкриє "~ / Бібліотека / Журнали / CoreSimulator / <DEVICE_IDENTIFIER> /system.log", щоб ви могли легко знайти там всі журнали інших ваших пристроїв-симуляторів, просто замінити <DEVICE_IDENTIFIER> на ідентифікатор пристрою-тренажера
Хофі

32

NSLogпрацює ідеально .

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

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

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

введіть тут опис зображення

А потім мати можливість вибрати, в якій програмі запускати моє розширення. У цьому випадку я вибрав би його рекомендацію "сьогодні", тобто Центр сповіщень.

введіть тут опис зображення

І тоді він іноді приєднує налагоджувач до мого розширення. Зверніть увагу, здається, цей метод працює лише на фізичних пристроях.

Якщо він не приєднується, ви можете використати метод вкладення вручну у відповіді @ VinceYaun,

Я також мав різноманітний успіх, використовуючи інші методи прихильності. Більшість з них не мали успіху, і, схоже, це лише помилки, які будуть виправлені пізніше.

Щоб переглянути свої журнальні повідомлення, до яких ви переходите Window -> Devicesу верхній панелі та виберіть свій пристрій. Ви можете відкрити журнал пристрою внизу цього вікна. При тестуванні на тренажері, ви можете використовувати @ BalestraPatrick в відповідь .

Деякі помилки були виправлені в Beta 2, і я здогадуюсь, що зрештою налагоджувач приєднається автоматично під час запуску розширення.

Оновлення: У iOS 8 Beta 4 примітках до випуску :

Розширення

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

  • Розширення іноді не вдається запустити під час налагодження з Xcode.
  • Коли розширення з користувальницьким інтерфейсом вимкнено, воно перезапускається і не відміняється.
  • Іноді розширення "Спільний доступ" або "Дія" може зависнути.
  • Повторне розгортання розширення може вимкнути його в Центрі сповіщень.

ви пробували той самий підхід щодо розширень сховищ?
SRP-Achiever

Це не спрацювало для мене в Xcode 6 beta 2, але відповідь Вінса Юаня . На жаль, у Xcode 6 beta 3 налагодження розширень не працює для мене взагалі. Я не знайшов рішення цієї проблеми, ймовірно, нам доведеться почекати наступного випуску.
Даррарскі

@Darrarski Моя відповідь залишилася від бета-версії 1. FYI, бета-версія 3 вийшла, тож ви вже повинні це зробити.
Санта Клаус

@SantaClaus досить чітко. Мій коментар полягав у тому, щоб повідомити, що жодне з наведених рішень не працює для мене в Xcode 6 beta 3. Схоже, налагодження розширень ще більше порушено в цьому випуску. Будемо сподіватися, що наступна бета-версія вирішить проблему.
Даррарскі

3
Жодна з цих помилок не здавалася мені виправленою в бета-версії 4 (тепер бета-версія 5).
matt

18

Я теж маю цю проблему. Xcode ніколи не приєднує мій налагоджувач до розширення або не відображає повідомлення NSLog. Якщо ви приєднаєте свій налагоджувач Xcode вручну до процесу розширення, принаймні точки зупинки працюють як шарм:

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

5
Я змішав удачу з цим.
Санта Клаус

2
за, але не завжди працює, сподіваюся, що Apple може автоматично приєднувати налагоджувач до розширень у майбутніх випусках.
Jing

14
  1. Створіть схему для вашого розширення
  2. Схема запуску
  3. У діалоговому вікні виберіть програму-контейнер
  4. Насолоджуйтесь

Це працює для мене :)


Це саме те, що мені потрібно
pob21

1
NSLogбуде працювати, лише якщо ви запускаєте контейнерну програму. Це не буде працювати, якщо ви використовуєте розширення програми замість контейнера.
JaredH,

Це спрацювало і на мене. Дякую, Маціек Чарник! Наведені вище рішення для мене не спрацювали. Я використовую Xcode 8.1.
plam4u

5

Xcode 8 здатний налагоджувати розширення:

  1. Виберіть схему розширення в комбінації поруч із кнопкою зупинки та запустіть її.
  2. Виберіть батьківську програму у діалоговому вікні, що з’явиться.

Результат: точки зупинки та журнал працюють як зазвичай.


2
Не працює в моєму випадку розширення Today. отримання помилки CLANG: ld: бібліотека не знайдена для клацання -lRPush: помилка: помилка команди компонувальника з кодом виходу 1 (використовуйте -v, щоб побачити виклик)
BadmintonCat

Це непов’язана помилка. Ви намагаєтеся встановити посилання на відсутні бібліотеки. Додайте Liferay-Push до своєї цілі.
Jano

4

Що, нарешті, дозволило мені побачити журнал в області налагодження, на основі пропозиції Майкла та документації Apple , це:

Створіть і запустіть розширення програми в симуляторі і, коли з’явиться запит на додаток-хост, виберіть конкретну програму, з якої ви збираєтеся викликати розширення . У моєму випадку я запускав своє розширення Action із Safari, витягуючи аркуш спільного доступу в PDF.

Те, що раніше не працювало, було дотримуватися пропозицій інших людей використовувати сьогодні як хост, але потім залишити цю програму та перейти до Safari, щоб зателефонувати моєму розширенню. Мені більше навіть не потрібно спочатку запускати міститься додаток перед запуском розширення.

З документації Apple:

У фазі запуску вашої схеми розширення ви вказуєте програму-хост як виконуваний файл. Після доступу до розширення через зазначений інтерфейс хоста, налагоджувач Xcode приєднується до розширення.


1

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

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


1

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

Однак, якщо у вас досить простий віджет, і ви не заперечуєте проти незначного захаращення інтерфейсу, це робить трюк. Я спробував усі інші рішення, викладені в цій дискусії, і, на жаль, жодне з них не спрацювало для мене.


1

Єдиний спосіб налагодження працює для мене, вибравши "Налагодження-> Прикріпити до обробки за допомогою PID або імені". Потім введіть PID, а не ім'я розширення. Ви можете знайти PID, запустивши розширення на пристрої, перейдіть до Window-> Devices. Знайдіть свій пристрій і перегляньте консоль. Коли ви бачите назву розширення, за ним слідує 5-значний номер. Це ПІД

Я також помістив купу NSLog в розширення, щоб також знайти PID. Це на xCode 7


1

Зіткніть ту саму проблему щодо розширення для NSLogта точок розриву. Я боровся з цим багато днів.

Device logможна знайти як наступне зображення. Це вXCode -> Window -> Devices and Simulators .

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

Журнал пристрою


0

Очевидно, щось не працює в Xcode6-B5.

Якщо я намагаюся запустити розширення Photo на симуляторі, я не бачу жодного Photos.app як опцію для процесу приєднання розширення.

параметри налагодження в симуляторі

Те саме, що працює на реальному пристрої, дає мені правильну поведінку.

параметри налагодження за допомогою реального пристрою

У першому випадку будь-яка точка зупинки не виконується. В останньому випадку точки зупинку працюють як шарм.


0

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

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

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

Мій невеликий досвід полягає в тому, що під час запуску ви налагоджуєте схему, якщо налагоджувальний сеанс на лівій панелі показує, що «Не налагоджувальний сеанс», немає необхідності відкривати розширення та тестувати його, налагоджувач не підключався, просто запустіть знову на щастя.

але коли ви бачите, що com.xxx.xxx.xxx чекає на вкладання, розширення однозначно може бути налагоджено.

Це невеликий фокус, для якого неможливо налагодити розширення iOS, особливо розширення клавіатури.


0

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


0

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


0

Я міг би налагодити своє розширення способом, описаним нижче:

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

Я сподіваюся, це також працює для вас, хлопці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.