Подтвердить что ты не робот

Как зарегистрировать предупреждение, которое отображается как проблема времени выполнения в Xcode?

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

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

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

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

4b9b3361

Ответ 1

Смотрите здесь
После того, как вы развернули приложение, либо через App Store, либо как Ad Hoc или Enterprise, вы не сможете подключить к нему отладчик Xcode. Чтобы отлаживать проблемы, вам необходимо проанализировать выходы Crash Logs и Console с устройства.

Журналы аварийных сообщений Apple Watch будут доступны на сопряженном устройстве, а также могут быть получены с использованием методов, описанных ниже.

Подробнее о написании богатых операторов NSLog см. Улучшено ведение журнала в Objective-C.

Вставьте ниже пример кода в свой проект:

NSMutableArray *someObject = [NSMutableArray array];
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
[someObject addObject:@"foo"];
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);

Ответ 2

Да! Вы увидите их, если вы сделаете что-то, что улавливает дезинфицирующее средство, например, выполняя определенные операции пользовательского интерфейса, фоновый поток с включенным фильтром Thread Sanitizer. Наличие двусмысленного макета и приостановка в отладчике представления также способ получить это. В любом случае, если это произойдет в библиотеках Apple, это не очень хорошо...

Ответ 3

Структура CocoaLumberjack может использоваться для захвата журналов консоли времени выполнения, а также журналов пробуждения в фоновом режиме.

https://github.com/CocoaLumberjack/CocoaLumberjack

https://github.com/phonegap/phonegap-plugin-push/issues/1988

Таким образом вы можете захватывать фиолетовые предупреждения, отображаемые в Xcode9, как показано ниже в файле, который поддерживается внутри контейнера приложений: -

=============================================== ==================

Main Thread Checker: API пользовательского интерфейса, вызываемый в фоновом потоке: - [UIApplication registerUserNotificationSettings:] PID: 2897, TID: 1262426, Название темы: (нет), Имя очереди: com.apple.root.default-qos, QoS: 21

Ответ 4

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

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

Если вы этого не сделаете, в XCode 9 есть функция Main thread checker.

Для получения дополнительной информации вы можете посетить приведенный ниже URL: https://developer.apple.com/documentation/code_diagnostics/main_thread_checker

В основном используется для проверки того, происходит ли какое-либо связанное с этим событие UIKit в основном потоке или нет? Если это не удалось сделать, это вызовет проблемы во время выполнения. Поэтому оберните свой код в блоке Main Thread, как показано ниже, чтобы избежать сбоев и предупреждений во время выполнения.

Вы можете включить - отключить, используя эти шаги. Редактировать схему... → (выберите вашу схему) → Диагностика → Отключить 'Main thread checker'

Ответ 5

В XCode 8.3 и ранее вы можете использовать заданную точку останова в любом методе класса UIKit, например setNeedsDisplay(), как показано ниже.

Также есть библиотека в классе objective-c steipete, в котором используется #import <objc/runtime.h>.

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

Но в Xcode 9 ниже доступна библиотека Xcode.app/Contenets/Developer/usr/lib/libMainThreadChecker.dylib, которая обрабатывает любые релевантные проблемы, потенциально выполняемые вне основного потока во время выполнения.