Как отключить NSLog? - PullRequest
       3

Как отключить NSLog?

18 голосов
/ 18 июля 2011

Я хотел бы сделать следующее в XCode:

Найти все команды NSLog без комментариев и заменить его на //NSLog...

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

Ответы [ 15 ]

78 голосов
/ 12 сентября 2012

подождите, есть гораздо более простой метод. Просто добавьте следующие строки, когда вам не нужен NSLOG, в ваш файл констант

#define NSLog                       //

и комментируйте, когда вам это нужно.

РЕДАКТИРОВАТЬ: в последнем Xcode вы получаете сообщение об ошибке выше. Итак, я выяснил, лучший способ это

#define NSLog(...) 
16 голосов
/ 18 июля 2011

Обновление :

Ответ ниже на самом деле намного лучше.См. здесь.

Начальный ответ:

Есть небольшой взлом, который вы могли бы сделать.Найдите все NSLog и замените их //NSLog, а затем выполните другой поиск ////NSLog и замените их //NSLog.

12 голосов
/ 09 июня 2013
#define NSLog if(1) NSLog

, если вы не хотите, чтобы журнал устанавливал 1 как 0.

10 голосов
/ 11 сентября 2012

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

if(BOOL)
NSLog(@"blah blah");

[self doSomething];

Если вы закомментируете nslog, условное связывается с методом ниже, исправьте меня, если я ошибаюсь

7 голосов
/ 18 июля 2011

Ваши ответы верны для вашего вопроса. Но. Ваш реальный вопрос - как включить NSLogs в определенных условиях. то есть вы хотите, чтобы они отображались для сборок Debug, а не для сборок Release. В этом случае попробуйте определить и использовать макрос DLog(), как описано в Cocoa Is My Girlfriend . Если вы используете Xcode4, это даже проще, потому что сборки Debug и Release определяют и отменяют определение DEBUG, поэтому вам не нужно этого делать.

Это намного проще, чем комментировать и раскомментировать строки кода.

4 голосов
/ 28 февраля 2013
#ifdef RELEASE
   #define NSLog(...) do { } while (0)
#endif

- лучший способ, который я нашел.

3 голосов
/ 01 июня 2013

# определить NSLog (...)

добавить эту строку в ваш файл .pch

если вы хотите войти, чем прокомментировать

2 голосов
/ 23 апреля 2014

Я бы сделал это

#define EnableNSLog 1

#if EnableNSLog == 0
#define NSLog   //
#elif EnableNSLog == 1
#warning Disable NSLog
#endif

Это должно сгенерировать предупреждающее сообщение, чтобы напомнить мне отключить NSLog перед окончательным выпуском.

2 голосов
/ 18 июля 2011

Вы можете сделать это за одну операцию поиска и замены. Вы можете просто сделать эту простую Regular Expression замену. Это обрабатывает как закомментированные (//), так и некомментированные строки. Это также работает, даже если предыдущие строки с комментариями имеют более двух косых черт (например, ///) вместо rwo. Вы можете сослаться по этой ссылке . Выполните следующие шаги.

  1. Выберите Изменить> Найти> Найти и заменить в рабочей области
  2. Стиль => Регулярное выражение
  3. Введите (/)*(NSLog.*) в Найдите поле.
  4. Выполните операцию find .
  5. Введите //\2 в поле Заменить .
  6. Выполните операцию replace .

Наслаждайтесь красотой регулярных выражений ; -)

1 голос
/ 05 июля 2013

Как отключить NSLog в Xcode для этапа производства

Добавьте #define NSLog в appName-Prefix.pch файл в папке «Файлы поддержки» вашего проекта. и код файла результата выглядит как ...

// Prefix header for all source files of the 'NSLog' target in the 'NSLog' project
//

#import <Availability.h>

#ifndef __IPHONE_4_0
#warning "This project uses features only available in iOS SDK 4.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#endif

//Add this to disable NSLog
#define NSLog //
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...