1. 程式人生 > >iOS將多個第三方sdk打包成靜態庫

iOS將多個第三方sdk打包成靜態庫

前段時間做了個sdk打包成動態庫,發現使用非常方便各種好處也特別多,然後在最後將APP打包時出問題了,打包時候動態庫打不進去,想了很多辦法還是沒有解決,又因為趕時間所以只能重新打成靜態庫了。

在打成靜態庫的時候遇到的最大的問題就是我這個sdk包括了很多的第三方SDK,裡面有很多靜態庫。所以就是靜態庫中包含靜態庫,在此囉嗦一下,打包時動態庫是可以直接將靜態庫打包進去的,而靜態庫中是沒有辦法包含靜態庫了,就算將第三方靜態庫打包進自己的靜態庫中,然後編譯的時候它是不會將第三方靜態庫一起編譯的(這是我根據使用靜態庫執行時報錯的錯誤資訊推斷的或許不準確歡迎同行指正)。

第一步當然是建立個靜態庫工程了

 

然後根據需要可以決定是否刪除系統自動建立的檔案(檔案是以工程名為名的)。

第二步在Build Phases中新增Headers標籤,再將你要打包成靜態庫的檔案拖動到這個工程中,從Headers中的Project將你需要暴露的標頭檔案拖動到Public中,如圖:

第三步就是匯入第三方的靜態庫和標頭檔案了,靜態庫編譯的時候只要語法正確能夠找到檔案就可以了,所以你要在打靜態庫的時候匯入所有涉及的庫和檔案:

注意,Add to targets不要勾上,完成後的結果是你雖然匯入了靜態庫了,但是這裡什麼都沒有:

如果這個地方有你匯入的第三方靜態庫一定要將其刪除.

到了這一步如果沒有問題你編譯就可以成功了,然後靜態庫就出來了。

可能有的第四步,如果你需要打成靜態庫的檔案中有拓展(Categort),那麼這個地方other Linker Flags要寫入-ObjC,如圖

在Deployment中你可以設定你的靜態庫支援的最低版本:

第五步,使用靜態庫。在專案工程中使用靜態庫你不但要將自己的靜態庫匯入的工程中,你還要將你的靜態庫所依賴的第三方靜態庫也一起匯入你的工程中,記著你的靜態庫所使用的系統的動態連結庫也要一併在專案中加上。