我已经开始研究一个项目,这个项目是由一些人在过去几年开发的,这就是他们设置CocoaLumberjack的方式:
有以下2个文件:
LogLevelInfo.h
static const int ddLogLevel = DDLogLevelInfo;
#define VAR_LOG_VERBOSE __unused
LogLevelVerbose.h
static const int ddLogLevel = DDLogLevelVerbose;
#define VAR_LOG_VERBOSE
这两个文件由不同的其他类导入,具体取决于应使用的日志级别。
现在我开始将一些源代码提取到Framework中,因为必须这样做。这是我开始遇到麻烦的地方。一些源代码已经使用CocoaLumberjack进行日志记录,因此我必须将LogLevelInfo.h和LogLevelVerbose.h也放入Framework中。到现在为止还挺好。 Framework项目是可编译的,不会抛出任何错误。
我已从父项目中删除了LogLevelVerbose.h和LogLevelInfo.h,并使用Cocoapods集成了我的Framework。现在Xcode告诉我ddLogLevel
已被重新定义:Redefinition of ddLogLevel
(在我的Pods子目录中显示LogLevelVerbose.h中的错误。显然,开发窗口子目录。)
有人可以解释为什么在Xcode项目中没有重新定义ddLogLevel的问题以及为什么在另一个项目的框架中使用它时出现问题?不幸的是,我需要框架中的CocoaLumberjack以及父项目: - (。
然后我在CocoaLumberjack.h中发现了这个:
* Step 1:
* Import the header in your implementation or prefix file:
*
* #import <CocoaLumberjack/CocoaLumberjack.h>
*
* Step 2:
* Define your logging level in your implementation file:
*
* // Log levels: off, error, warn, info, verbose
* static const DDLogLevel ddLogLevel = DDLogLevelVerbose;
*
* Step 2 [3rd party frameworks]:
*
* Define your LOG_LEVEL_DEF to a different variable/function than ddLogLevel:
*
* // #undef LOG_LEVEL_DEF // Undefine first only if needed
* #define LOG_LEVEL_DEF myLibLogLevel
*
* Define your logging level in your implementation file:
*
* // Log levels: off, error, warn, info, verbose
* static const DDLogLevel myLibLogLevel = DDLogLevelVerbose;
但是在将名称更改为myLibLogLevel之后,一切都保持不变。 Xcode一直告诉我Redefinition of myLibLogLevel