我正在尝试更改日志文件名。到目前为止我发现的是this。
我的DDLogFileManagerDefault的子类如下所示:
LogFileManager.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
LogFileManager.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];
当我用LogFileManager
替换DDLogFileManagerDefault
时,它可以正常工作。否则我得到:
架构x86_64的未定义符号:
“_OBJC_CLASS _ $ _ LogFileManager”,引自: Logger.o中的objc-class-ref ld:找不到架构x86_64 clang的符号:错误:链接器命令失败并带有退出代码 1(使用-v查看调用)
我到底错过了什么?
通过Carthage 3.2.0为Xcode 8添加CocoaLumberjack。
我已将CocoaLumberjack.framework
添加到Build Phases,就像使用/usr/local/bin/carthage copy-frameworks
答案 0 :(得分:0)
好的,我解决了。这个错误非常令人困惑,但与任何事情无关。对不起。
这是一个包含大量构建目标和大量编译标志的大项目,它会使不同的事情发出警告并且警告会成为错误。在这种情况下,我添加了标志来禁用所提到的Logger.m类的全局标记。但我只是将这些反旗帜添加到一个目标而忘记将它们添加到另一个目标。这就是为什么它没有建立。
还奇怪的是,编译器并没有简单地说:无法在文件B中构建目标A或编译错误。相反,我得到了一条错误的架构消息,这完全误导了我......很抱歉这个问题。修正了它。