最近開發(fā)用到一個(gè)第三方公司的庫,他們的庫有用到CocoaHTTPServer,吐槽下,這庫2013年就停更了,版本定格在了2.3,開始編譯之后報(bào)錯(cuò)implicit declaration of function 'LOG_OBJC_MAYBE' is invalid in C99 查了下有說是debug編譯類型選錯(cuò)的,其實(shí)根本原因是:
這庫用了CocoaLumberJack,而且是1.x版本的,CocoaLumberjack在2.0更新的時(shí)候,改動(dòng)挺大,官方也給出了1.x遷移到2.x的更新步驟,現(xiàn)在已經(jīng)到3.5.3版本了,但是CocoaHTTPServer代碼中用的還是1.x的方法。因?yàn)閹煲呀?jīng)不再更新,只能自己去修改源代碼了。
報(bào)錯(cuò):

出錯(cuò)文件:
CocoaHTTPServer/HTTPLogging.h
這里用的還是1.x的方法:
#define DD_LEGACY_MACROS 0
#import "DDLog.h"
修改方法:
1--將上面兩行改為
#import <CocoaLumberjack/CocoaLumberjack.h>
2--然后增加兩個(gè)宏定義:
#define HTTP_LOG_OBJC_MAYBE(async, lvl, flg, ctx, frmt, ...) \
do{ if(HTTP_LOG_ASYNC_ENABLED) LOG_MAYBE(async, lvl, flg, ctx, nil, sel_getName(_cmd), frmt, ##__VA_ARGS__); } while(0)
#define HTTP_LOG_C_MAYBE(async, lvl, flg, ctx, frmt, ...) \
do{ if(HTTP_LOG_ASYNC_ENABLED) LOG_MAYBE(async, lvl, flg, ctx, nil, __FUNCTION__, frmt, ##__VA_ARGS__); } while(0)
3--然后把整個(gè)頭文件里的:
所有LOG_OBJC_MAYBE改成HTTP_LOG_OBJC_MAYBE
所有LOG_C_MAYBE改成HTTP_LOG_C_MAYBE
4--重新編譯,錯(cuò)誤消失
原因:
1.x版本,是通過引入DDLog.h頭文件來引入DDLegacyMacros.h。2.x版本之后使用的是DDLogMacros.h,使用的是新的LOG_MAYBE方法,廢棄掉了LOG_OBJC_MAYBE方法。
吐槽:
這種已經(jīng)放棄了更新的庫,一般都會(huì)選擇使用其他類似的庫或者直接使用源代碼來改動(dòng),還用cocoapods的話 真的是無比的蛋疼,改動(dòng)了pods的源代碼,小伙伴pod install之后也得去改源代碼,煩的一筆