iOS靜態庫介紹

2021-07-12 07:15:11 字數 1690 閱讀 5650

什麼是庫?

庫是程式**的集合,是共享程式**的一種方式。

根據源**的公開情況,庫可以分為2種型別:

開源庫:公開源**,能看到具體實現,比如sdwebimage、afnetworking。

閉源庫:不公開源**,是經過編譯後的二進位制檔案,看不到具體實現,主要分為:靜態庫、動態庫。

靜態庫和動態庫的存在形式:

靜態庫:.a 和 .framework

動態庫:.dylib 和 .framework

製作.a:建立framework&library中選擇cocoa touch static library,之後輸入名稱,新增庫需要包含的源**,選擇需要暴露出來的.h檔案,.m檔案會自動編譯到.a檔案中。

另外,debug-iphoneos資料夾裡面的東西是用在真機上的,debug-iphonesimulator資料夾裡面的東西是用在模擬器上的,如果scheme是release模式,生成的資料夾就以release開頭。

合併.a:

如果想讓乙個.a檔案能同時用在真機和模擬器上,需要進行合併

在終端輸入指令

lipo -create 真機和模擬器.a檔案的路徑 -output 所合成.a檔案的路徑

.a檔案的體積(一般情況下):

真機用的.a > 模擬器用的.a

所合成.a == 真機用的.a + 模擬器用的.a

若要檢視.a型別,只需要通過lipo –info.a名稱即可檢視 .a 的型別(模擬器還是真機)。

使用.a只需要直接將.a、.h、資源檔案拖拽到其他專案中即可。

模板製作.framework:

手工製作 .framework 過於複雜,借助開源模板進行製作會比較簡單

模板位址

安裝模板

在終端下進入ios-universal-framework/fake framework資料夾

執行指令./install.sh

製作靜態庫的注意點:

無論是 .a 靜態庫還是 .framework 靜態庫,最終需要的都是:二進位制檔案 + .h + 其它資源檔案。

.a 和 .framework 的使用區別:

.a 本身是乙個二進位制檔案,需要配上 .h 和 其它資源檔案 才能使用

.framework 本身已經包含了 .h 和 其它資源檔案,可以直接使用

資源的處理:

如果靜態庫中用到了資源,一般都放到乙個bundle檔案中,bundle名字一般跟 .a 或 .framework 名字一致。

bundle的建立:新建乙個資料夾,修改擴充套件名為 .bundle 即可,右擊bundle檔案,顯示包內容,就可以往bundle檔案中放東西。

多檔案處理:

如果靜態庫需要暴露出來的 .h 比較多,可以考慮建立乙個主標頭檔案

(一般 主標頭檔案 和 靜態庫 同名),在主標頭檔案中包含所有其他需要暴露出來的 .h 檔案,使用靜態庫時,只需要#import 主標頭檔案。

.framework為什麼既是靜態庫又是動態庫:

系統的 .framework 是動態庫,我們自己建立的 .framework 是靜態庫。

另外,如果靜態庫中包含了category,有時候在使用靜態庫的工程中會報「方法找不到」的錯誤(unrecognized selector sent to instance)

解決方案:在使用靜態庫的工程中配置other linker flags為-objc

iOS 靜態庫 在iOS中建立靜態庫

學習了creating a static library in ios tutorial 本想做一下翻譯的工作,但是在網上已經有人翻譯過了,因此不添足。譯文請見 在ios中建立靜態庫 在實踐中,發現了一些奇怪的錯誤。根據文章編寫了程式,imagefilters,寫了指令碼生成通用靜態庫,在corei...

iOS合併靜態庫

對ios專案來說,靜態庫對於裝置 device 和模擬器 simulator 的編譯是不一樣的。需要鏈結靜態庫的工程在編譯device和simulator的時候需要區別對待。需要鏈結到不同的靜態庫。這就很麻煩。解決方法是使用lipo指令,將device靜態庫和simulator靜態庫合併為乙個靜態庫...

iOS靜態庫管理

解決一下幾個問題 1.生成device和simulator通用的.a檔案 2.debug版應用程式呼叫debug版.a,release版應用程式呼叫release版.a 由於ios生成的庫的屬性比較多,因此開發人員需要對靜態庫進行必要的管理。我只是提供了一種我認為比較不錯的辦法,可以相對提高一些效率...