Должен ли я удалить NSLogs при выпуске моего приложения

Целесообразно ли делать какие-либо NSLogging в приложении для доставки? Я знаю, что не должен использовать часто используемые циклы. Или не логируйте слишком подробно. Но я не уверен, что это хорошая практика.

Удаление всех NSLog перед релизом тоже не кажется хорошей практикой.


person Besi    schedule 21.01.2012    source источник


Ответы (5)


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

Для этого у меня есть макрос DebugLog, который активен только для отладки сборок:

#ifdef DEBUG
#define DebugLog(fmt, ...) NSLog(fmt, __VA_ARGS__)
#else
#define DebugLog(fmt, ...)
#endif

Для всех сообщений журнала, которые мне интересны для разработки, я использую DebugLog. Для всех сообщений об ошибках, которые должны быть зарегистрированы, я использую безусловный NSLog. Таким образом сборки дистрибутива не загромождают журнал консоли пользователя. Записываются только важные сообщения.

person DarkDust    schedule 21.01.2012
comment
Точно. Более того, системный журнал на iOS-устройствах до смешного недолговечен, так что в реальной жизни он просто бесполезен. NSLog() в iOS — это просто локальный инструмент отладки. - person Costique; 22.01.2012

Это один из тех вопросов философии кодирования, но в своих производственных приложениях я использую asl и настраиваю его по умолчанию, но оставляю параметр (через запись в Info.plist), чтобы включить различные уровни ведения журнала. Я склонен согласиться с вами, что слишком много NSLog в приложении для доставки выглядит плохо.

person sbooth    schedule 21.01.2012
comment
Тем не менее NSLog не должен быть способом устранения неполадок в приложении в процессе производства. Существует несколько инструментов для сообщения об ошибках и сбоях, таких как NewRelic и многие другие, которые даже можно использовать бесплатно. - person user2387149; 11.03.2016

Ведение журнала всегда важно, когда для поддержки этого живого приложения присутствует определенная группа поддержки, в этом случае они могут проверить, что происходит, и они могут решить проблему, если что-то не связано с кодом, и если это проблема основного кода, тогда они могут передать команде разработчиков.

Но если приложение похоже на Game , то журнал не имеет значения. Вы можете удалить их перед выпуском приложения.

person rishi    schedule 21.01.2012

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

person cosmix    schedule 21.01.2012

Если вы хотите, чтобы ваш NSLog работал только во время отладки и вы не хотите вносить какие-либо изменения в свой код, лучше всего сделать это в файле .pch:

#ifndef DEBUG
#define NSLog(x...)
#endif

ОБЪЯСНЕНИЕ И УСТРАНЕНИЕ НЕИСПРАВНОСТЕЙ:

Это означает, что если DEBUG не определен, он «переопределит» все NSLog, чтобы они ничего не делали, эта замена строки происходит перед компиляцией, поэтому ни один NSLog во всем коде не будет экранирован, ни один NSLog не останется в производстве по ошибке, это устраняет человеческий фактор. ошибка, связанная с тем, что вы забыли удалить NSLogs в рабочих приложениях.

DEBUG обычно определяется в режиме отладки по умолчанию во всех проектах Xcode. вы можете узнать, определен ли он по адресу:

Build Settings -> 
Apple LLV #.# - Preprocessing -> 
Preprocessor Macros -> Debug

если его нет добавьте

DEBUG=1

также, если у вас нет файла pch или он не подключен, вот что вам нужно сделать (поскольку он был автоматически добавлен в xcode 5, но больше не добавляется в xcode 6 и выше по умолчанию в новых шаблонах проектов)

Почему ProjectName-Prefix.pch не создается автоматически в Xcode 6?

person user2387149    schedule 12.02.2015
comment
Это идеально при работе с другими разработчиками, потому что обычно все используют NSLog, и если вы хотите определить другой макрос, такой как DebugLog(), разработчики могут забыть использовать его и, следовательно, отправить приложение с распечаткой журнала. Это исключает человеческий фактор. - person user2387149; 11.03.2016