2

我已经开始从事一个项目,该项目是由一些人在过去几年中开发的,这就是他们设置 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

4

0 回答 0