靜態(tài)庫總結(jié)
介紹
-1.庫的分類
-開源庫:類似AFN,SDWebImage等第三方框架,可以看見具體實現(xiàn)文件
-閉源庫:無法具體看見實現(xiàn)文件
-2.靜態(tài)庫和動態(tài)庫的區(qū)別
-存在形式:
-1.靜態(tài)庫:.a和.framework
-2.動態(tài)庫:.dylib和.framework
-優(yōu)缺點
-1.靜態(tài)庫:靜態(tài)庫在連接時,會被完整的復(fù)制到可執(zhí)行文件中,被多次使用就會被多次復(fù)制
-2.動態(tài)庫:不會復(fù)制,只存在一份,程序在運行時會動態(tài)的加載到內(nèi)存中,只加載一次.但是動態(tài)庫不允許上架(wwdc2014上蘋果開放了動態(tài)加載dylib接口,開放了動態(tài)庫掛架->插件式開發(fā))
.a靜態(tài)庫的制作和使用
-1.xcode中選擇Static Library制作靜態(tài)庫
-2.將需要暴露的文件在Build Phases -> Copy Files
中添加
-3.不同CPU對應(yīng)著不同的編譯器架構(gòu)
-模擬器:
-4s - 5 i386 32位
-5s - 6P x86_64 64位
-真機:
-3s - 4s armv7
-5 - 5c armv7s
-5s - 6P arm64
-獲取文件支持架構(gòu)
-lipo -info 文件路徑
-如何支持多種架構(gòu)?
-Build Setting -> Build active -> NO
-合并靜態(tài)庫
-lipo -crete 模擬器靜態(tài)庫.a文件路徑 真機靜態(tài)庫.a文件路徑 -output 合并.a文件
-Debug和Release版本下靜態(tài)庫的生成
-edit scheme -> 選擇Debug/Release模式
-4.使用
-直接將合并的.a文件以及頭文件拖入工程中.
.framework庫的制作和使用
-1.打開工程,選擇Framework來制作.framwwork庫
-2.在Build Phases -> Headers
中添加需要暴露的頭文件
-3.在Build Setting -> Build active -> No
選擇不止編譯活躍的架構(gòu)
-4.編譯后獲取真機和模擬器下.framework文件,合并靜態(tài)庫
lipo -create .framework下工程路徑 .framework下工程路徑 -output 合并文件
-5.使用合并后的庫General -> Embedded Binaries
中添加庫后使用,會直接報錯Reason: image not found
,因為這樣合并生成是一個動態(tài)庫,如果要獲取.framework的靜態(tài)庫,那么需要在Build Settings -> mach-O type ->選擇Dynamic Library(默認動態(tài)庫)/Static Library(靜態(tài)庫)