集成mars的xlog

先來介紹一下需求淑玫,為xlog寫一個(gè)adapter客峭,需要在一個(gè)由Swift寫的Library中使用。

在明確需求后進(jìn)行Tasking

  1. 根據(jù)mars的官方文檔陋葡,編譯生成Framework
  2. 通過pod lib create 創(chuàng)建一個(gè) Cocoapods的library
  3. 編寫adapter,修改podspec文件

編譯

為了支持bitcode彻采,需要修改build_ios.py文件腐缤,將-DENABLE_BITCODE=1
運(yùn)行python build_ios.py肛响,選擇2:Clean & build xlog. 過程中可能會(huì)報(bào)錯(cuò)岭粤,比如缺失某個(gè)工具,我在編譯時(shí)發(fā)現(xiàn)沒有安裝cmake特笋,通過brew安裝一下即可剃浇。
編譯完成后生成的Framework在cmake_build/iOS/Darwin.out/mars.framework

構(gòu)建pod lib

pod lib create xlog

根據(jù)需要?jiǎng)?chuàng)建相應(yīng)的template工程

adapter

創(chuàng)建一個(gè)interface,來隔離實(shí)現(xiàn)

#import <Foundation/Foundation.h>

@protocol XLogger <NSObject>

@required
- (void)info:(NSString *)tag msg:(NSString *)msg;
- (void)warning:(NSString *)tag msg:(NSString *)msg;
- (void)error:(NSString *)tag msg:(NSString *)msg;
- (void)flush;

@end

同時(shí)將第一步編譯好的mars.framwork添加到xlog/目錄下猎物,只是添加了文件虎囚,那么在pod install時(shí)是無法添加進(jìn)來的,那么就要修改一下podspec文件蔫磨,來引用這個(gè)本地的Framework淘讥。同時(shí)也需要添加mars所需要的系統(tǒng)庫,如:SystemConfiguration堤如,CoreTelephony以及l(fā)ibz等蒲列,具體可參考下面的podspec文件

Pod::Spec.new do |s|
  s.name             = 'xlog'
  s.version          = '0.1.0'
  s.summary          = 'A short description of xlog.'
  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC

  s.homepage         = 'https://github.com/iossocket/xlog'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'iossocket' => 'avx302@gmail.com' }
  s.source           = { :git => 'https://github.com/iossocket/xlog.git', :tag => s.version.to_s }
  s.ios.deployment_target = '10.0'

  s.source_files = 'xlog/Classes/**/*.{h,m,mm}'
  s.public_header_files = 'xlog/Classes/**/*.h'
  s.vendored_frameworks = 'xlog/mars.framework'
  
  s.preserve_path = 'xlog/Classes/xlog.modulemap'
  s.module_map = 'xlog/Classes/xlog.modulemap'
  s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
  
  s.libraries = 'resolv.9', 'z'
  s.frameworks = 'SystemConfiguration', 'CoreTelephony'
  s.dependency 'SSZipArchive'
end

為了讓項(xiàng)目可以方便的在Swift工程中使用,需要添加modulemap搀罢,并在podspec文件中聲明:preserve_path蝗岖,module_mappod_target_xcconfig榔至。

framework module xlog {
    header "XLogger.h"
    header "MarsXLogger.h"
    export *
}

具體mars xlog的實(shí)現(xiàn)就相對(duì)簡(jiǎn)單了很多抵赢,參考文檔即可:

#import <Foundation/Foundation.h>

@protocol XLogger <NSObject>

@required
- (void)info:(NSString *)tag msg:(NSString *)msg;
- (void)warning:(NSString *)tag msg:(NSString *)msg;
- (void)error:(NSString *)tag msg:(NSString *)msg;
- (void)flush;

@end
#import "MarsXLogger.h"
#import <mars/xlog/xlogger.h>
#import <mars/xlog/xloggerbase.h>
#import <mars/xlog/appender.h>
#import "Utils/LogUtil.h"

@interface MarsXLogger()

@property(nonatomic, strong) NSString *logFolderPath;

@end

@implementation MarsXLogger

+ (instancetype)sharedInstance {
    static MarsXLogger *logger = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        logger = [self new];
    });
    return logger;
}

- (instancetype)init {
    if (self = [super init]) {
        self.logFolderPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingString:@"/marslogger"];
        NSLog(@"%@", self.logFolderPath);
        xlogger_SetLevel(kLevelInfo);
#ifdef DEBUG
        appender_set_console_log(true);
#endif
        appender_open(kAppednerAsync, [self.logFolderPath UTF8String], "marslogger", "");
    }
    return self;
}

- (void)info:(NSString *)tag msg:(NSString *)msg {
    LOG_INFO([tag UTF8String], msg);
}

- (void)warning:(NSString *)tag msg:(NSString *)msg {
    LOG_WARNING([tag UTF8String], msg);
}

- (void)error:(NSString *)tag msg:(NSString *)msg {
    LOG_ERROR([tag UTF8String], msg);
}

- (void)flush {
    appender_flush();
}

@end

需要注意的是,當(dāng)使用mars的函數(shù)時(shí),由于mars是用C++寫的铅鲤,OC想要順利調(diào)用划提,需要將其改為mm文件。
具體的代碼可參考https://github.com/iossocket/xlog彩匕。想要把它push到Cocoapods master有點(diǎn)腔剂。媒区。驼仪。所以可以把它放在私有的Cocoapods repo中,供項(xiàng)目?jī)?nèi)部使用袜漩。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绪爸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宙攻,更是在濱河造成了極大的恐慌奠货,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件座掘,死亡現(xiàn)場(chǎng)離奇詭異递惋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)溢陪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門萍虽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人形真,你說我怎么就攤上這事杉编。” “怎么了咆霜?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵邓馒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我蛾坯,道長(zhǎng)光酣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任脉课,我火速辦了婚禮挂疆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘下翎。我一直安慰自己缤言,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布视事。 她就那樣靜靜地躺著胆萧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上跌穗,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天订晌,我揣著相機(jī)與錄音,去河邊找鬼蚌吸。 笑死锈拨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的羹唠。 我是一名探鬼主播奕枢,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼佩微!你這毒婦竟也來了缝彬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤哺眯,失蹤者是張志新(化名)和其女友劉穎谷浅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奶卓,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡一疯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夺姑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片墩邀。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瑟幕,靈堂內(nèi)的尸體忽然破棺而出磕蒲,到底是詐尸還是另有隱情,我是刑警寧澤只盹,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布辣往,位于F島的核電站,受9級(jí)特大地震影響殖卑,放射性物質(zhì)發(fā)生泄漏站削。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一孵稽、第九天 我趴在偏房一處隱蔽的房頂上張望许起。 院中可真熱鬧,春花似錦菩鲜、人聲如沸园细。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猛频。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鹿寻,已是汗流浹背睦柴。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毡熏,地道東北人坦敌。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像痢法,于是被迫代替她去往敵國(guó)和親狱窘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 興起一位先知像我。 耶和華在西奈找到摩西洗鸵,要配合去就以色列人越锈,領(lǐng)以色列人過紅海,再回西奈山膘滨,領(lǐng)受律法甘凭, 不清楚為什...
    小思索閱讀 2,665評(píng)論 0 0
  • 父母年紀(jì)大了,我們姐弟幾個(gè)又隔得遠(yuǎn)火邓,他們盼的無非是我們的電話丹弱,哪怕陪他們聊半小時(shí),10分鐘铲咨。 半小時(shí)躲胳,十分鐘。細(xì)想...
    附子言閱讀 249評(píng)論 1 1
  • 四年熟悉的同學(xué) 馬上就要分別 臨別的聚會(huì)上 雖然只是幾句隨意的話 卻弄得大家淚漣漣 因?yàn)槟阄叶济靼?就此一別 不知...
    人間清醒麥芽糖閱讀 244評(píng)論 0 8
  • 沒看過無問西東,只看過影評(píng)摇天。 雖然沒有看過就沒有發(fā)言權(quán)粹湃,只是還是希望表達(dá)主觀觀點(diǎn)。 無問西東泉坐,說的灑脫为鳄,真如電影一...
    nn恩閱讀 198評(píng)論 0 0
  • 今天,我過得十分開心腕让。 早上我像往常一樣在家里上著空中課堂孤钦,上完之后媽媽從外面回來給我?guī)Я丝系禄N搽S在媽媽后面的...
    被迫登簡(jiǎn)書閱讀 66評(píng)論 0 0