靜態庫製做

Xcode7中建立靜態庫

字數1236 閱讀3859 評論18 

1、靜態庫和動態庫的區別:架構

靜態庫和動態庫是相對編譯期和運行期的,靜態庫以 .a 和 .framework 形式存在,連接時,靜態庫會被完整地複製到可執行文件中,被屢次使用就有多份冗餘拷貝;動態庫以 .dylib 和 .framework 形式存在,連接時不復制,程序運行時由系統動態加載到內存,供程序調用,系統只加載一次,多個程序共用,節省內存,通常只能由系統建立。iphone

2、靜態庫簡介:性能

一、靜態庫分爲真機—Debug(調試)版本、真機—Release(發佈)版本、模擬器—Debug版本、模擬器—Release版本;開發中通常都打包Release(發佈)版本,將真機和模擬器版本合併,提供外界。ui

二、使用場景:在項目開發的過程當中,例如兩個公司之間業務交流,不可能把源代碼都發送給另外一個公司,這時候將私密內容打包成靜態庫,別人只能調用接口,而不能知道其中實現的細節。spa

3、用Xcode7建立靜態庫命令行

.a文件版本(以製做AFNetworking靜態庫爲例)3d

一、新建項目,點擊iOS—Framework&—Cocoa Touch Static Library。調試

給你的工程命名爲StaticLibcode

二、系統自動生成以工程名命名的.h和.m文件,可自定義的在目錄下添加或刪除文件,注意目錄下Products文件夾有一個.a文件爲紅色,說明文件並不存在。這裏咱們將系統生成的.h和.m文件刪除。blog

將AFNetworking的全部文件導入工程目錄下

三、點擊Build Phases—Copy Files,左下角點擊+號按鈕,添加你須要暴露的接口頭文件。若是你在靜態庫工程中使用了category,那麼你可能會碰到連接問題,解決的辦法就是須要同時在生成靜態庫的工程和使用靜態庫的工程中使用「-all_load」編譯選項,即在對應target的"Build Settings"中的「Other Linker Flags」選項添加「-all_load」,注意:使用靜態庫的工程中是必定要加該編譯選項的!至於生成靜態庫的工程中加不加沒有試過,不過建議仍是加上該編譯選項。

點擊Add添加

四、而後點擊左上角,選擇Edit Scheme,Build Configuration下選擇Release,先注意檢查下面Release是否爲NO:Yes表示只編譯選中模擬器設備對應的架構,No則爲編譯全部模擬器設備支持的cup架構(Debug版本同理),選擇NO,而後分別在模擬器和真機下Command+B編譯一下,會看到Products文件夾下的.a文件變爲黑色,這個.a文件就是咱們想要獲得的靜態庫,這裏會出現一個問題你先編譯的模擬器會發現.a依然是紅色,你須要模擬器和真機都編譯後.a纔會變成黑色,這應該是Xcode自己的問題。

注:關於靜態庫對CPU架構的支持,首先了解iOS設備CPU架構方面的知識,ARM是微處理器行業的一家知名企業,arm處理器以體積小和高性能的優點在嵌入式設備中普遍使用,幾乎全部手機都是使用它的。

模擬器:iphone4s~5 : i386 iphone5s~6plus : x86_64

真機:iphone3gs~4s : armv7  iphone5~5c : armv7s (靜態庫只要支持了armv7,就能夠跑在armv7s的架構上) iphone5s~6plus : arm64

armv6, armv7, armv7s是ARM CPU的不一樣指令集,原則是向下兼容的。例如iPhone4S CPU支持armv7, 但它同時兼容armv6,只是使用armv6指令可能沒法充分發揮它的特性。

這裏再補充一下查看靜態庫.a對處理器架構的支持,先cd到.a文件的路徑下,命令行輸入:lipo -info xxxxx.a

五、經過終端打開路徑/Users/shelin/Library/Developer/Xcode/DerivedData/,選擇對應的工程文件夾。

打開Build—Products文件夾,會看到Release-iphoneos和Release-iphonesimulator文件夾,分別是真機和模擬器的.a文件,爲了使用方便咱們將兩個版本的.a文件合併。

六、合併真機和模擬器.a文件,在終端輸入如下命令行:lipo -create  模擬器.a文件的路徑 真機.a文件的路徑 -output 合併後的保存路徑(例:lipo -create /Users/shelin/Library/Developer/Xcode/DerivedData/StaticLib/Build/Products/Release-iphoneos/libxxx.a  /Users/shelin/Library/Developer/Xcode/DerivedData/StaticLib/Build/Products/Release-iphonesimulator/libxxx.a  -output /Users/shelin/Desktop/StaticLib.a)最終會在桌面獲得一個合併後的StaticLib.a文件,再將暴露出來的.h頭文件一塊兒複製出來。

七、使用:只需將.a和暴露出來的.h頭文件導入工程目錄下就可供外界使用。

.framework版本:

相關文章
相關標籤/搜索