0

我正在尝试更改日志文件名。到目前为止我发现的是这个

我的 DDLogFileManagerDefault 子类如下所示:

日志文件管理器.h

@import CocoaLumberjack;

// this import would work as well
// #import <CocoaLumberjack/CocoaLumberjack.h> 

// but none of these
//#import "DDLog.h"
//#import "DDTTYLogger.h"
//#import "DDASLLogger.h"
//#import "DDFileLogger.h"

@interface LogFileManager : DDLogFileManagerDefault

@end

日志文件管理器.m

#import "LogFileManager.h"

@implementation LogFileManager

- (NSString *)newLogFileName {
    NSBundle *bundle = [NSBundle mainBundle];
    NSDictionary *info = [bundle infoDictionary];
    NSString *appName = [info objectForKey:@"CFBundleExecutable"];

    NSString *timeStamp = [self getTimestamp];

    return [NSString stringWithFormat:@"%@%@.log", appName, timeStamp];
}

- (BOOL)isLogFile:(NSString *)fileName {
    return NO;
}

- (NSString *)getTimestamp {
    static dispatch_once_t onceToken;
    static NSDateFormatter *dateFormatter;
    dispatch_once(&onceToken, ^{
        dateFormatter = [NSDateFormatter new];
        [dateFormatter setDateFormat:@"YYYY.MM.dd-HH.mm.ss"];
    });

    return [dateFormatter stringFromDate:NSDate.date];
}

@end

这就是我使用它的方式:

DDLogFileManagerDefault *documentsFileManager = [[LogFileManager alloc] init];    
DDFileLogger *fileLogger = [[DDFileLogger alloc] initWithLogFileManager:documentsFileManager];

当我用它替换LogFileManagerDDLogFileManagerDefault时工作正常。否则我得到:

架构 x86_64 的未定义符号:
“_OBJC_CLASS_$_LogFileManager”,引用自:Logger.o 中的 objc-class-ref ld:未找到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v查看调用)

我到底在这里想念什么?CocoaLumberjack 是通过 Carthage 3.2.0 为 Xcode 8 添加的。我已经CocoaLumberjack.framework像项目中的所有其他框架一样将/usr/local/bin/carthage copy-frameworks

4

1 回答 1

0

好的,我解决了。该错误非常令人困惑,但与任何事情无关。对此感到抱歉。

这是一个大项目,有很多构建目标和很多编译标志,这些标志会让不同的东西抛出警告,警告变成错误。在这种情况下,我添加了标志来禁用提到的 Logger.m 类的全局标志。但我只将这些反标志添加到一个目标,而忘记将它们添加到另一个目标。这就是它没有建立的原因。

仍然很奇怪,编译器并没有简单地说:无法在文件 B 中构建目标 A 或编译错误。相反,我收到了一条丢失的架构消息,这完全误导了我……很抱歉给我带来了麻烦。解决它。

于 2017-12-21T13:48:10.233 回答