優(yōu)雅的解決iOS第三方庫沖突

在iOS開發(fā)過程中,集成第三方庫的時(shí)候,難免會(huì)遇到庫沖突,造成編譯通不過。

一般的做法是,修改沖突庫的類名。但是修改類名,可能就會(huì)污染第三方的代碼,不好升級和維護(hù)。

現(xiàn)在我介紹一種不直接修改類名的情況解決庫沖突的問題。

C語言中的宏預(yù)處理可以很好的解決類名沖突問題。

以AFNetworking為例,假設(shè)我們工程代碼里面有AFNetworking,第三方庫也集成了AFNetworking,編譯的時(shí)候,就會(huì)報(bào)錯(cuò):duplicate symbol _OBJC_IVAR_$_AFHTTPSessionManager._requestSerializer

我們在工程的預(yù)處理頭文件中Prefix.h加一個(gè)宏定義

#define AFHTTPSessionManager KKAFHTTPSessionManager

在編譯過程中,編譯器在預(yù)處理階段,把AFHTTPSessionManager替換成KKAFHTTPSessionManager,編譯出來的庫里面就沒有AFHTTPSessionManager符號,只有KKAFHTTPSessionManager,也就沒有duplicate symbol了。

代碼詳單如下:

#define AFHTTPSessionManager KKAFHTTPSessionManager

#define AFNetworkReachabilityManager KKAFNetworkReachabilityManager

#define AFSecurityPolicy KKAFSecurityPolicy

#define AFURLRequestSerialization KKAFURLRequestSerialization

#define AFURLResponseSerialization KKAFURLResponseSerialization

#define AFURLSessionManager KKAFURLSessionManager

#define AFHUDNotificationObserver KKAFHUDNotificationObserver

#define AFHTTPRequestSerializer KKAFHTTPRequestSerializer

#define AFJSONRequestSerializer KKAFJSONRequestSerializer

#define AFPropertyListRequestSerializer KKAFPropertyListRequestSerializer

#define AFQueryStringPair KKAFQueryStringPair

#define AFStreamingMultipartFormData KKAFStreamingMultipartFormData

#define AFMultipartBodyStream KKAFMultipartBodyStream

#define AFHTTPBodyPart? KKAFHTTPBodyPart

#define AFHTTPResponseSerializer KKAFHTTPResponseSerializer

#define AFJSONResponseSerializer KKAFJSONResponseSerializer

#define AFXMLParserResponseSerializer KKAFXMLParserResponseSerializer

#define AFXMLDocumentResponseSerializer KKAFXMLDocumentResponseSerializer

#define AFPropertyListResponseSerializer KKAFPropertyListResponseSerializer

#define AFImageResponseSerializer KKAFImageResponseSerializer

#define AFCompoundResponseSerializer KKAFCompoundResponseSerializer

#define AFURLSessionManagerTaskDelegate KKAFURLSessionManagerTaskDelegate

#define AFStringFromNetworkReachabilityStatus KKAFStringFromNetworkReachabilityStatus

#define AFNetworkingReachabilityDidChangeNotification KKAFNetworkingReachabilityDidChangeNotification

#define AFNetworkingReachabilityNotificationStatusItem KKAFNetworkingReachabilityNotificationStatusItem

#define AFQueryStringPairsFromDictionary KKAFQueryStringPairsFromDictionary

#define ErrorDomain KKErrorDomain

#define AFQueryStringPairsFromKeyAndValue KKAFQueryStringPairsFromKeyAndValue

#define AFNetworkingTaskDidCompleteErrorKey KKAFNetworkingTaskDidCompleteErrorKey

#define AFNetworkingTaskDidCompleteResponseSerializerKey KKAFNetworkingTaskDidCompleteResponseSerializerKey

#define AFNetworkingTaskDidCompleteAssetPathKey KKAFNetworkingTaskDidCompleteAssetPathKey

#define AFNetworkingTaskDidCompleteSerializedResponseKey KKAFNetworkingTaskDidCompleteSerializedResponseKey

#define AFNetworkingTaskDidCompleteResponseDataKey KKAFNetworkingTaskDidCompleteResponseDataKey

#define AFNetworkingTaskDidCompleteNotification KKAFNetworkingTaskDidCompleteNotification

#define AFURLSessionDidInvalidateNotification KKAFURLSessionDidInvalidateNotification

#define AFNetworkingTaskDidResumeNotification KKAFNetworkingTaskDidResumeNotification

#define AFURLSessionDownloadTaskDidFailToMoveFileNotification KKAFURLSessionDownloadTaskDidFailToMoveFileNotification

#define AFNetworkingTaskDidSuspendNotification KKAFNetworkingTaskDidSuspendNotification

#define _AFURLSessionTaskSwizzling _KKAFURLSessionTaskSwizzling

#define AFNetworkingOperationFailingURLResponseErrorKey KKAFNetworkingOperationFailingURLResponseErrorKey

#define AFNetworkingOperationFailingURLResponseDataErrorKey KKAFNetworkingOperationFailingURLResponseDataErrorKey

#define AFStringFromNetworkReachabilityStatus KKAFStringFromNetworkReachabilityStatus

#define AFNetworkingReachabilityDidChangeNotification KKAFNetworkingReachabilityDidChangeNotification

#define AFNetworkingReachabilityNotificationStatusItem KKAFNetworkingReachabilityNotificationStatusItem

#define AFQueryStringPairsFromDictionary KKAFQueryStringPairsFromDictionary

#define ErrorDomain KKErrorDomain

#define AFQueryStringPairsFromKeyAndValue KKAFQueryStringPairsFromKeyAndValue

#define AFNetworkingTaskDidCompleteErrorKey KKAFNetworkingTaskDidCompleteErrorKey

#define AFNetworkingTaskDidCompleteResponseSerializerKey KKAFNetworkingTaskDidCompleteResponseSerializerKey

#define AFNetworkingTaskDidCompleteAssetPathKey KKAFNetworkingTaskDidCompleteAssetPathKey

#define AFNetworkingTaskDidCompleteSerializedResponseKey KKAFNetworkingTaskDidCompleteSerializedResponseKey

#define AFNetworkingTaskDidCompleteResponseDataKey KKAFNetworkingTaskDidCompleteResponseDataKey

#define AFNetworkingTaskDidCompleteNotification KKAFNetworkingTaskDidCompleteNotification

#define AFURLSessionDidInvalidateNotification KKAFURLSessionDidInvalidateNotification

#define AFNetworkingTaskDidResumeNotification KKAFNetworkingTaskDidResumeNotification

#define AFURLSessionDownloadTaskDidFailToMoveFileNotification KKAFURLSessionDownloadTaskDidFailToMoveFileNotification

#define AFNetworkingTaskDidSuspendNotification KKAFNetworkingTaskDidSuspendNotification

#define AFURLSessionTaskSwizzling KKAFURLSessionTaskSwizzling

#define AFNetworkingOperationFailingURLResponseErrorKey KKAFNetworkingOperationFailingURLResponseErrorKey

#define AFNetworkingOperationFailingURLResponseDataErrorKey KKAFNetworkingOperationFailingURLResponseDataErrorKey

#define? AFURLRequestSerializationErrorDomain KKAFURLRequestSerializationErrorDomain

#define? AFURLResponseSerializationErrorDomain KKAFURLResponseSerializationErrorDomain

#define? _AFURLSessionTaskSwizzling _KKAFURLSessionTaskSwizzling

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容