Приложение отладки при запуске с помощью push-уведомлений

135

В настоящее время я разрабатываю приложение, которое получает Push-уведомления. У меня все это работает на 100% через страницу PHP. Мое приложение может получать push-уведомления разных типов. PHP обрабатывает это и отправляет различные пакеты информации в мое приложение, которые все получаются просто отлично.

Однако, когда пользователи «просматривают» уведомление и запускает мое приложение, я, очевидно, хочу предпринять другое действие, чем если бы пользователь просто запустил приложение вручную - и, кроме того, различные действия в зависимости от типа push-уведомления. У меня это работает нормально ... конструктивно.

Предполагается, что один из моих типов push-уведомлений открывает UIView, который устанавливает несколько соединений с несколькими различными серверами и согласовывает данные туда и обратно. Этот UIView работает нормально, когда, например, запущен из главного меню - однако, когда мое push-уведомление вызывает появление этого UIView, сокетные соединения не работают должным образом.

Теперь мой вопрос не о сокетах, а о том, как вы решаете такую ​​проблему? Из того, что я могу сказать (я относительно новичок), когда приложение запускается из push-уведомления, нет способа связать это выполнение с отладчиком / консолью / etc ... У меня очень трудное время при попытке отладки кода с использованием UIAlertViews, так как существует множество линий связи между различными серверами.

Буду очень признателен за любые ваши советы.

Dutchie432
источник

Ответы:

147

В XCode <4.0 (для XCode> = 4 см. Ответ по delirus ниже) вы можете теперь настроить XCode для подключения отладчика к приложению после его запуска вместо запуска приложения через отладчик. Это позволяет отлаживать вещи, которые различаются в зависимости от состояния запуска вашего приложения, такие как схемы URL, монтажные панели и push-уведомления.

  1. В Xcode посмотрите в панели Source, и ниже Targets будут Исполняемые файлы.
  2. Воспользуйтесь инспектором для вашего приложения в исполняемых файлах.
  3. Нажмите на вкладку «Отладка» в инспекторе.
  4. Снимите флажок «Запускать исполняемый файл после запуска отладчика»
  5. Проверьте «Ожидание следующего запуска / push-уведомления»

Теперь, когда вы нажимаете отладку из XCode вместо запуска приложения, появится окно, сообщающее, что оно ожидает запуска приложения. Затем вы обычно запускаете приложение на телефоне и XCode присоединяется к нему

Луи Гербарг
источник
37
Я знаю, что это может быть неуместно, но я люблю тебя. :)
Dutchie432
17
Когда вы запускаете таким образом, stdin, stdout, stderr вашего приложения не направляются в консоль GDB, они указываются там, где они находятся при обычном запуске приложения. Вы можете увидеть NSLog () в системной консоли устройства, посмотрев на устройство в органайзере.
Луи Гербарг
1
Вы научили меня некоторым очень ценным моментам здесь. СПАСИБО. Я провел последние 2 дня, пытаясь отладить что-то, что мне удалось исправить в течение 20 минут после вашего поста.
Dutchie432
1
@stigi работает в симуляторе для меня для тестирования схем URL. Я использую xcode 4.5, если это имеет значение
dreyln
1
@dreyln мой комментарий был с 2009 года :) с тех пор многое изменилось. Но спасибо за головы!
Стиги
124

Для Xcode 4 вы должны:

  1. Отредактируйте вашу активную схему с помощью раскрывающегося списка "Схемы". ( + <)
  2. Чем выбрать свой продукт - «Запустите MyApp.app» слева.
  3. Выберите вкладку «Информация» справа.
  4. И, наконец, выберите опцию «Дождаться запуска MyApp.app».

Подробнее здесь, в разделе «Настройка исполняемых файлов в редакторе схем».

РЕДАКТИРОВАТЬ:
В случае, если вы пропустите журналы в GDB, см. Комментарий Луи Гербарга к его ответу.

MATM
источник
1
Я с Xcode 4.2 для Lion и, хотя приложение запускается по схеме URL правильно и выполнение отладчика не останавливается, консоль ничего не показывает. Я что-то упускаю?
LoDani
@LoDani то же самое здесь, вы когда-нибудь выясняли почему?
Дэвис
3
@LoDani, Дэвис Дж .: Вы видели комментарий Луи по поводу принятого ответа? stackoverflow.com/questions/1239000/… При запуске таким способом stdin / out / err не перенаправляется в консоль.
Иван Вучица
Спасибо, ты спас мой день! Попытка зафиксировать ошибку, которая возникает только тогда, когда мое приложение запускается обработчиком URL.
Элиот
@delirus - Спасибо за обновление этого для XCode 4.
Dutchie432
112

Для XCode 10, 9, 8, 7 и 6:

  1. Выберите схему на панели инструментов (слева от устройства, с которым вы отлаживаете)
  2. Выберите Редактировать схему
  3. Выберите Run на левой панели
  4. Для параметра « Запуск» выберите « Ожидание запуска исполняемого файла».
  5. Закройте редактор схем и запустите проект XCode

Теперь вы можете отлаживать при запуске из уведомления, пользовательского URL-адреса или нажав на значок приложения.

bgolson
источник
9
Этот ответ доставил мне немало хлопот, хотя в целом он выбрал правильный путь. Шаг 3 немного вводит в заблуждение. Вы должны сделать это, конечно; выберите Run на левой панели. Но также должен быть шаг 5 с очень похожей концептуальной формулировкой: нажмите кнопку «Выполнить» в xcode, прежде чем ожидать результатов ... Так как в начале это не сработало, я обратился за советом к другим коллегам ... они спросили мне, если бы я сделал вещь Run, на что я ответил да, думая о варианте нет. 3 ... Там действительно, действительно, действительно должен быть шаг 5 к этому ...
Флорин Одагиу
@FlorinOdagiu Хороший звонок. Добавлен шаг 5. Спасибо!
bgolson
В случае, если Xcode восстанавливает другую вкладку схемы, опция Launch находится на вкладке Info.
Нейт Уиттакер
3
Я не получаю никакого вывода в окне отладчика, когда я запускаю приложение вручную.
dvdblk
3

Я не работаю с push-уведомлениями, поэтому я не знаю точную работу push-уведомлений. Однако я бы попытался имитировать получение push-уведомления, позволив основному методу вашей программы сделать вид, что уведомление было опубликовано, если это возможно, или вызвав приложение: didFinishLaunchingWithOptions: UIApplicationDelegate из метода applicationDidFinishLaunching: метод.

HTH - Ура, Даан

drvdijk
источник
Также хорошая идея, но подражание всегда 2-ой лучший для отладки реальной вещи! Удачного кодирования!
Dutchie432
3

В Xcode 6:

  1. подключите iPhone к Macbook через USB
  2. запустите приложение на iPhone, нажав значок
  3. В меню Xcode Debug>> Attach to Processвыберите свое приложение
Али Саид
источник
1
При таком подходе вы не сможете отладить критический путь запуска.
Зорайр
2

Для XCode 11 и 10 вы можете сделать следующее:

  1. Выберите опцию Схема.
  2. Выберите Редактировать схему.

  3. Выберите опцию «Выполнить» на левой панели

  4. В части запуска выберите ожидание запуска исполняемого файла , затем закройте диалоговое окно.

  5. Постройте и запустите проект. Теперь вы можете запустить приложение, нажав значок приложения или нажав на уведомление.

Рами Ризкалла
источник