- (void)viewDidLoad
{
NSLog(@"%s", __func__);
// ...
}
в viewDidLoad
из IOS , 8 расширения . не NSLog
выводит ничего в Xcode. NSLog
работает как обычно в приложении-контейнере.
Как я могу получить вывод отладочных сообщений от расширения?
Ответы:
Шаги по отладке расширения приложения:
Запустите приложение-контейнер. На этом этапе Xcode загружает приложение-контейнер и расширение приложения на устройство или симулятор.
Остановите приложение-контейнер. Этот шаг важен при отладке в симуляторе. Если вы этого не сделаете, Xcode сообщит вам, что симулятор используется.
В Xcode нажмите меню «Отладка» -> «Прикрепить к процессу» -> «По идентификатору процесса (PID) или имени ...», введите идентификатор ext приложения, например com.abc.ContainerApp.MyExtension, чтобы начать отладку. Не забудьте установить точки останова. (Обновление от 25 августа 2014 г.: вы можете напрямую ввести MyExtension (имя вашего расширения).)
На устройстве или симуляторе откройте расширение приложения.
Обновления от 23 августа 2014 г .:
Я обнаружил, что описанные выше шаги отладки не работают на Xcode 6 beta 6 с iOS 8 SDK beta 5 на симуляторе.
Решение:
Точки останова работают. Но я не знаю, почему журналы не отображаются в окне вывода.
источник
У меня тоже такая проблема. У меня это сработает, если вы войдете в свой симулятор в меню Debug -> Open System Log ...
Отсюда вы можете увидеть все журналы симулятора iPhone (включая журналы вашего расширения).
источник
NSLog
работает отлично .Вы просто не видите, что регистрируется в области отладки Xcode, потому что отладчик Xcode не подключен к вашему расширению. Расширения почти полностью независимы от своего приложения. Например, у них есть отдельные идентификаторы пакетов, и они также являются отдельными процессами в ОС.
У меня были разные успехи в подключении Xcode к расширениям. Предположительно кажется, что он подключается автоматически, и в навигаторе отладки отображается как «Ожидание подключения», но никогда не подключается.
Иногда мне удается запустить цель расширения в Xcode:
А затем у меня есть возможность выбрать, в каком приложении запускать мое расширение. В этом случае я бы выбрал его рекомендацию «сегодня», которая является центром уведомлений.
А потом иногда присоединял отладчик к моему расширению. Обратите внимание, что этот метод работает только на физических устройствах.
Если он не прикрепляется, вы можете использовать метод ручного прикрепления в ответе @VinceYaun,
У меня также был переменный успех, используя другие методы привязанности. Большинство из них были безуспешными, и кажется, что это просто ошибки, которые будут исправлены позже.
Чтобы просмотреть сообщения журнала, перейдите в
Window
->Devices
на верхней панели и выберите свое устройство. Вы можете открыть журнал устройства в нижней части этого окна. Если вы тестируете на симуляторе, вы можете использовать ответ @ BalestraPatrick .Некоторые ошибки были исправлены в бета-версии 2, и я предполагаю, что в конечном итоге отладчик подключится автоматически при запуске расширения.
Обновление: в примечаниях к выпуску iOS 8 Beta 4 :
источник
У меня тоже такая проблема. Xcode никогда не подключает мой отладчик к расширению и не отображает сообщения NSLog. Если вы вручную подключите отладчик Xcode к процессу расширения, по крайней мере точки останова будут работать как шарм:
Debug->Attach to process->Your extension name (mine was "com.example.MyExtensionApp.MyExtension")
источник
У меня работает :)
источник
NSLog
будет работать, только если вы используете приложение-контейнер. Это не сработает, если вы запустите расширение приложения вместо контейнера.Xcode 8 может отлаживать расширения:
Результат: точки останова и журнал работают в обычном режиме.
источник
Что наконец позволило мне увидеть журнал в области отладки, основываясь на предложении Майкла и документации Apple , так это:
Создайте и запустите расширение приложения в симуляторе и, когда будет предложено указать хост-приложение, выберите конкретное приложение, из которого вы собираетесь вызывать расширение . В моем случае я запускал расширение Action из Safari, открывая общий лист в PDF.
Что раньше не работало, так это следование предложениям других людей об использовании Today в качестве хоста, но затем выход из этого приложения и переход в Safari для вызова моего добавочного номера. Мне больше даже не нужно сначала запускать мое содержащее приложение перед запуском расширения.
Из документации Apple:
источник
На самом деле мне удалось довольно просто запустить журналы в Xcode 6.3. Во-первых, соберите и запустите содержащее приложение. После того, как содержащее приложение будет запущено на устройстве, создайте и запустите расширение приложения, изменив схему на расширение приложения.
У Apple есть документация, непосредственно связанная с отладкой, профилированием и тестированием расширения вашего приложения.
источник
У меня работает трюк (хотя он довольно уродливый) - разместить манекен
UILabel
где-нибудь в нижнем углу моего расширения. Я обычно это называюlogLabel
. Затем можно обновить текст этой метки любым оператором журнала, который вы хотите регистрировать. Такой подход не очень хорош, если вам нужно регистрировать операторы из экземпляров разных классов. И, очевидно, это загромождает ваш пользовательский интерфейс.Однако, если у вас есть довольно простой виджет, и вы не возражаете против небольшого загромождения пользовательского интерфейса, это поможет. Я пробовал все другие решения, описанные в этом обсуждении, и, к сожалению, ни одно из них не помогло мне.
источник
Единственный способ отладки для меня - это выбрать «Отладка»> «Присоединить к процессу по PID или имени». Затем введите PID, а не имя расширения. Вы можете найти PID, запустив расширение на устройстве, перейдите в Window-> Devices. Найдите свое устройство и посмотрите на консоль. Когда вы видите имя своего добавочного номера, за ним следует пятизначный номер.Это PID
Я также поместил кучу NSLog в расширение, чтобы также найти PID. Это на xCode 7
источник
Возникла та же проблема с расширением для
NSLog
и точками останова. Я боролся с этим много дней.Device log
можно найти как следующее изображение. Это вXCode -> Window -> Devices and Simulators
.После ввода в
Open Console
правом верхнем углу диалогового окна появится поле поиска. Я могу применить там правило фильтра. Например, имя процесса содержитNotification
ключевое слово или имя процесса должно совпадать с именем цели расширения, например: равноMyNotificationServiceExtension
имени процесса.источник
Ясно, что в Xcode6-B5 что-то не работает.
Если я попытаюсь запустить расширение Photo на симуляторе, я не смогу увидеть Photos.app в качестве опции для процесса присоединения расширения.
То же самое, работающее на реальном устройстве, дает мне правильное поведение.
В первом случае точка останова не учитывается. В последнем случае точки останова работают как шарм.
источник
Вы должны знать, что приложение-контейнер и расширение - это два разных процесса в iOS, в то время как LLVM отлаживает только поток за раз, поэтому при отладке консоль никогда не регистрирует расширение и никогда не останавливается в точке останова.
Вы можете решить большинство проблем методом @Vince Yuan.
Однако моя проблема в том, что отладчик Xcode вряд ли зацепит мое расширение клавиатуры как на iOS Simulator, так и на устройствах, например, 1 раз из 7-8 запусков, это полностью вопрос вероятности. Метод @Vince Yuan тоже иногда работает.
Мой небольшой опыт заключается в том, что когда вы запускаете схему отладки, если сеанс отладки на левой панели показывает, что `` Нет сеанса отладки '', нет необходимости открывать ваше расширение и тестировать его, отладчик не подключился, просто запустите снова на удачу.
но когда вы видите, что com.xxx.xxx.xxx ожидает подключения, расширение определенно можно отладить.
Это небольшая уловка, для которой невозможно отладить расширение iOS, особенно расширение клавиатуры.
источник
Начиная с Xcode 6 Beta 5, я мог использовать реальное устройство под управлением iOS8 для отладки моего расширения. Попробуйте запустить его на устройстве и выберите Safari для запуска.
источник
Чтобы преодолеть все состояния, вызванные когда-либо изменением среды IDE, я использую консоль iOS на сайте lemonjar.com - она отображает окно консоли для любого подключенного устройства iOS, отображающего сообщения системного журнала, независимо от идентификатора процесса. Здесь вы можете одновременно видеть сообщения журнала отладки приложения и расширения.
источник
Я мог отлаживать свое расширение описанным ниже способом:
Debug
->Attach to process by PID or Name
. Название вашей схемы расширения.main app target
и запустите.Надеюсь, это сработает и для вас, ребята.
источник