在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