瞭解html
許多時在項目中,每每對於積累沉墊下來不多改動的代碼(高內聚,低耦合的代碼),爲了增長重用性,經常都進行庫的封裝好存。sql
在WIN上封裝爲DLL(動),LIB(靜)。在LINUX上封裝爲.SO(動),.a(靜)。iphone
IOS中靜態庫的方式有*.a或*.framework。不管是.a仍是.framework其實無外於對源碼進行隱藏的一種表現方式ui
objc也由類庫的概念,不過在在objc上通常叫庫,庫表示程序代碼集合,能夠共享給其餘程序使用,庫是編譯後的二進制文件,所以不能看到源代碼,多用於一些開放sdk(如百度地圖sdk),商用庫,debug
objc上的庫通常分爲兩類code
靜態庫: .a 和 .frameworkhtm
.a文件:純二進制文件,須要配合.h文件一塊兒使用,經過.h文件引用庫裏面的內容
.framework文件:包含二進制文件blog
連接時,靜態庫會被完整地複製到可執行文件中,例如iOS程序打包的時候會包含全部引用的靜態庫ip
動態庫: .dylib 和 .frameworkci
iOS項目不支持動態庫,每一個APP都是獨立運行的,而且不能直接互相訪問,APP只能訪問系統自帶的動態庫,動態庫系統只加載一次,並能夠用於多個程序共享的,通常在用於桌面系統,連接時不會被添加到可執行文件,若是動態連接庫不存在,程序可能執行失敗
下面正文:
library search paths 庫引用路徑
other linker flags 編譯標示參數
建立而且編譯出靜態庫來。
1.建立本身的靜態庫
2.添加本身的類和category target->Build Phases ->Copy Files 點下面「+
」添加,通常的.h文件會自動引用,分類須要手動加進來.
3.設置支持的最低版本和最高版本 Build Settings ->Base SDK :當前類庫是哪一個版本的SDK開發的,也就是最高支持的SDK
Deployment Target :類庫支持的最低版本 Build Settings-> Deployment Target
4.配置編譯選項:
因爲編譯的是類庫,在使用時候須要支持Debug和Release倆種模式,須要編譯全部的architecture版本
Build Settings-> Build Active Architecture Only debug和Release都改成No.
4.編譯Cmd+B
分別切換到模擬器和真機模式進行編譯,在編譯完成後,Products中的文件會變正常(原來爲紅色)。注意須要設置Build Release 版本
Edit -> Info -> Build Configuration 設置爲Release
5.編譯完成後獲得多個.a文件,從Product下的.a 文件進入Finder查看
iphoneos真機用
iphonesimulator 模擬器用的。
使靜態庫同時支持模擬器和真機的方法:
1.合併.a文件
能夠用lipo -create終端命令合併真機和模擬器的多個.a 文件,這樣合併後的.a文件模擬器和真機都支持(合併後文件大小爲原來倆個文件的大小之和)。
2.動態的引用靜態庫,經過配置工程的庫引用路徑和編譯標示,編譯的適合Xcode會根據當期的環境自動找到相關的.a庫。
使用時:.a和.h文件都拖到項目中,Xcode會自動把靜態庫添加到工程,在Linkd Framework with Library裏查看
若是靜態庫裏有category分類,那麼須要在添加-ObjC編譯標識,不然可能會報錯:unrecognized selector sent to instance
在other linker flags 裏添加
終端命令:lipo -info查看文件信息 lipo -create 參數 參數 -output 參數 合併文件 pwd 獲取當前所在文件路徑
/Users/admin/Library/Developer/Xcode/DerivedData/libsql-gzhehbchiqciolgwkaazfwloklqq/Build/Products
~/Library/Developer/Xcode/DerivedData/libsql-gzhehbchiqciolgwkaazfwloklqq/Build/Products
.a文件文件信息: Architectures in the fat file: libsql.a are: i386 armv7 x86_64 arm64
進入文件目錄下 ,而後lipo -info 文件名
合併倆個文件 lipo -create 第一個文件文件名 第二個文件文件路徑 -output 合併後的文件名
好比:在/Build/Products/release-iphonesimulator下有liblibsql.a文件,在/Build/Products/release-iphoneos下也有liblibsql.a文件,想要合併這倆個文件,能夠先進入/Build/Products/release-iphonesimulator文件下,而後
能夠這麼寫:
lipo -create liblibsql.a /Build/Products/release-iphoneos/liblibsql.a -output libsql.a
結果是在/Build/Products/release-iphonesimulator文件下生成子文件libsql.a.
參考http://www.360doc.com/content/14/1215/17/19175681_433147141.shtml
http://www.cnblogs.com/bomo/p/4760177.html和http://www.cnblogs.com/bomo/p/4760791.html