2014-06-10 15 views
7

Ich habe angefangen eine IOS App mit der neuen Programmiersprache Swift zu erstellen. Ich habe es geschafft CocoaPods zu verwenden und konnte den DDTTYLogger mit meinem CustomLoggerFormatter (Objective-C) in meinem AppDelegate.swift erfolgreich erstellen und an die Logger anhängen.CocoaLumberjack mit Swift - Aufruf von Präprozessormakros

var customLoggerFormatter = CustomLoggerFormatter() 

var consoleLogger: DDTTYLogger = DDTTYLogger.sharedInstance() 
consoleLogger.setLogFormatter(customLoggerFormatter) 
DDLog.addLogger(consoleLogger) 

Aber das Problem ist, dass die CocoaLumberjack Bibliothek Präprozessormakros für die Logger Methoden wie DDLogVerbose(@"..")

, die in der DDLog.h definiert ist, mit:

#define DDLogVerbose(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_VERBOSE, LOG_LEVEL_DEF, LOG_FLAG_VERBOSE, 0, frmt, ##__VA_ARGS__) 

Gibt es jede Problemumgehung, um Präprozessor definiert arbeiten in Swift? Oder hat jemand etwas Ähnliches mit mehr Erfolg versucht?

Antwort

12

Okay, ich habe gerade eine Lösung gefunden. Schreiben einer Objective-C Wrapper-Klasse, die die Präprozessoren aufruft und Methoden zum Aufrufen anbietet.

Hoffentlich hilft dies anderen Menschen mit den gleichen Problemen konfrontiert.

Ich habe zunächst eine Header-Datei:

@interface DDLogWrapper : NSObject 
+ (void) logVerbose:(NSString *)message; 
+ (void) logError:(NSString *)message; 
+ (void) logInfo:(NSString *)message; 
@end 

Mit der entsprechenden Umsetzung:

#import <Foundation/Foundation.h> 
#import "DDLogWrapper.h" 

// Logging Framework Lumberjack 
#import "DDLog.h" 
#import "DDASLLogger.h" 
#import "DDTTYLogger.h" 

// Definition of the current log level 
#ifdef DEBUG 
static const int ddLogLevel = LOG_LEVEL_VERBOSE; 
#else 
static const int ddLogLevel = LOG_LEVEL_ERROR; 
#endif 

@implementation DDLogWrapper 

+ (void) logVerbose:(NSString *)message { 
    DDLogVerbose(message); 
} 

+ (void) logError:(NSString *)message { 
    DDLogError(message); 
} 

+ (void) logInfo:(NSString *)message { 
    DDLogInfo(message); 
} 

@end 

Wichtig ist die DDLogWrapper.h Datei in den Projektname-Bridging-header.h Datei hinzufügen und Dann können Sie den DDLogWrapper in Swift instanziieren und die Methoden aufrufen.

Mit folgendem Code konnte ich eine Log-Aussage machen:

DDLogWrapper.logVerbose("TEST"); 
+0

Wie definieren Sie den 'ProjectName-Bridging-Header.h'? Ich habe '#import ' versucht und Xcode beschwert sich 'Datei nicht gefunden' Fehler. 'DDLogWrapper.h' befindet sich im Verzeichnis' ProjektName/Application/DDLogWrapper.h'. Ich habe auch 'Application/DDLogWrapper.h' ausprobiert und das hat nicht funktioniert. Mein 'SWIFT_OBJC_BRIDGING_HEADER' Feld in' Build Settings' ist leer, aber ich habe keine Probleme, andere Module zu überbrücken. – Dean

+0

Pro versuchtem Editieren von [runios] (http://stackoverflow.com/users/3944596/runios) brauchst du auch '#import" DDLogMacros.h "'. – admdrew

+0

[CocoaLumberjack unterstützt Swift & Objective-C] (https://github.com/CocoaLumberjack/CocoaLumberjack#swift-version-via-cocoapods), wenn Sie Ihre App migrieren. 'Pod 'CocoaLumberjack/Swift'' Benötigt iOS8 Minimum. Wenn Sie wie iOS mit iOS7 arbeiten, ist das kein Problem. – mriddle89

5

ich ein Swift wrapper for CocoaLumberjack erstellt, die alles schön kapselt.

DDLog.addLogger(DDTTYLogger.sharedInstance()) 
DDLog.logLevel = .Info 

logInfo("Info") 
logWarn("Warn") 
logDebug("Debug") 
logError("Error") 
4

Ab 2.0.0beta4 enthält CocoaLumberJack eine CocoaLumberJack.swift-Datei, die wirklich leicht die Integration mit Swift-Projekten macht.

Sie verwenden eine globale var defaultDebugLevel, um die DDLogLevel festzulegen, und Sie können schnelle grundlegende vorkompilieren Makros, um es an Ihre Bedürfnisse anzupassen.

#if DEBUG 
    defaultDebugLevel = DDLogLevel.All 
#else 
    defaultDebugLevel = DDLogLevel.Warning 
#endif 

DDLog.addLogger(DDTTYLogger.sharedInstance()) 
DDLogDebug("Debug") 
DDLogInfo("Info") 
DDLogWarn("Warning") 
DDLogVerbose("Verbose") 
DDLogError("Error") 
+1

Ich benutze Cocoapoden 0.36.0β2 und Holzfäller 2.0.0-rc. Ich habe die schnelle Datei in Pods ▸ CocoaLumberjack ▸ Klassen ▸ CocoaLumberjack.swift.In der schnellen Datei in meinem Projekt versuche ich es zu importieren, aber ich bekomme 'kein solches Modul 'CocoaLumberjack', Ideen? – lawicko

+0

Lumberjack 2.1.0 hat jetzt eine schnelle 2.0-Unterstützung. –