Как отлаживать при реализации сообщения handleOpenURL? - PullRequest
5 голосов
/ 21 мая 2009

Я пишу приложение для iPhone, которое можно запустить через пользовательский URL. Итак, я переопределяю - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

Чтобы проверить мои изменения, мне нужно запустить приложение в симуляторе, затем выйти и запустить Safari. Затем я ввожу свой пользовательский URL в адресную строку, чтобы запустить приложение.

Но при каждом запуске приложение вылетает. Я пытаюсь понять, почему, но когда я устанавливаю точку останова и запускаю приложение с домашнего экрана (а не в XCode), оно, похоже, не прикрепляется.

Я даже пытался поместить операторы NSLog в сообщение handleOpenURL, но они не выводятся на консоль.

Полагаю, я мог бы создать UIAlertViews, но ... да, да. Есть ли другой способ подключиться к сеансу отладки в симуляторе?

Ответы [ 5 ]

14 голосов
/ 19 апреля 2011

В Xcode 4 вы можете редактировать схему своей цели, а в разделе «Выполнить» на вкладке «Информация» вы можете выбрать опцию «Дождаться запуска MyApp.app»:

enter image description here

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

7 голосов
/ 21 мая 2009

Откройте Console.app (в папке Utilities). Ваши сообщения журнала должны появиться там.

1 голос
/ 16 сентября 2011

добавить следующее в качестве первой строки в hadleOpenURL:

[NSThread sleepForTimeInterval: 30.0] и поставьте точку останова на следующей строке после.

После вызова приложения у вас будет 30 секунд, чтобы перейти к XCode и выбрать из меню: «Выполнить» / «Присоединить к процессу» и выбрать имя приложения из списка. Ваш отладчик должен остановиться на вашей точке останова.

Не забудьте удалить sleepForTimeInterval, когда закончите!

1 голос
/ 22 мая 2009

Я не пробовал это, но как насчет добавления встроенной инструкции точки останова в ваш код:

#if TARGET_CPU_ARM == 1
#define breakpoint() __asm__ volatile ("bkpt 0")
#else   // !ARM - assume INTEL. Everything else will break
#define breakpoint() __asm__ volatile ("int3");
#endif
1 голос
/ 21 мая 2009

Можете ли вы написать модульный тест, который бы выполнял функциональность вашего AppDelegate?

...