我已经开始从事一个项目,该项目是由一些人在过去几年中开发的,这就是他们设置 CocoaLumberjack 的方式:
有以下2个文件:
日志级别信息.h
static const int ddLogLevel = DDLogLevelInfo;
#define VAR_LOG_VERBOSE __unused
LogLevelVerbose.h
static const int ddLogLevel = DDLogLevelVerbose;
#define VAR_LOG_VERBOSE
这两个文件由不同的其他类导入,具体取决于应使用的日志级别。
现在我开始将一些源代码提取到一个框架中,因为它必须完成。这就是我开始遇到麻烦的地方。一些源代码已经使用 CocoaLumberjack 进行日志记录,所以我不得不将 LogLevelInfo.h 和 LogLevelVerbose.h 也放入框架中。到目前为止,一切都很好。框架项目是可编译的,不会引发任何错误。
我已经从我的父项目中删除了 LogLevelVerbose.h 和 LogLevelInfo.h,并使用 Cocoapods 集成了我的框架。现在 Xcode 告诉我ddLogLevel
已重新定义:(Redefinition of ddLogLevel
在我的 Pods 子目录中的 LogLevelVerbose.h 中显示错误。说实话,开发 Pods 子目录)。
有人可以解释为什么在 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