場景
最近在做一個開源項目,具體是把一個項目的代碼的各個部分解藕,取出來獨立封裝為各個子產品,再把這些子產品通過CocoaPods內建為若幹私有庫,最終在工程中通過pod install指令即可完成內建,各個子產品也可以獨立進行維護。現在的問題是,如果多個庫之間需要存在依賴關系,如何實作?
遇到的困難
假設讀者朋友已經熟悉podspec檔案的編寫規範。在一個庫中申明它需要用到某個庫,但是在pod lib lint指令執行的過程中,它找不到那個被依賴的庫,這時就build失敗了,在編譯結果中也可以得到這個提示。但是我們也不能把需要用到的庫中的代碼拉進這個子產品。那假設這兩個子產品都在工程中用到,那個被依賴的子產品就會出現兩次了,這是不允許的。
解決辦法
1.pod lib lint技巧。
在podspec檔案中申明它要用到哪個pod,然後在pod lib lint 的指令後加上需要依賴的庫的名稱,這樣在編譯的時候就會自動把目标檔案連接配接起來,通過編譯。在這種情況下,是不需要實際引如被依賴的檔案的,但可以編譯通過。指令如下:
pod lib lint --use-libraries --allow-warnings --sources=BIEncrypt
sources後跟的是依賴的庫的名稱,這裡隻是舉了一個例子。另外–use-libraries指令表明程式中涉及到了.a檔案,–allow-warnings指令表明允許警告,–sources後可以加上一個或多個庫的名稱,前提是這些庫被用到而且這些庫已經上傳并交由pods管理。
2.podspec中依賴語句。
另外别忘了在podspec檔案中加上如下一句話:
s.dependency 'BIEncrypt','~> 0.2.0'
它表明依賴某個庫,庫的版本是多少。
3.pod repo push方法。
這個過程是指把podspec檔案上傳,交由pods管理的語句,它同樣需要加一些字尾,因為它上傳的這個過程也要編譯。指令如下:
pod repo push BIFaceSDK BIFaceSDK.podspec --use-libraries --allow-warnings --sources=BIEncrypt