靜態庫的製做ios
1 靜態庫的存在形式: .a 和.framework xcode
動態庫的存在形式:.dylib 和.frameworkbash
2 靜態庫和動態庫的區別: 靜態庫在連接的時,會被完整的複製到可執行文件中,被使用屢次,就由多份拷貝。架構
動態庫則不會被複制,只有一份,程序運行時,動態加載到內存,系統只加載一次,多個程序共用app
可是:程序中若是使用本身的動態庫是不容許上架的。iphone
3 使用靜態庫,能夠保護核心代碼,將MRC的項目打包成靜態庫,就能夠在ARC環境下直接使用。ide
4 靜態庫的特色: .a(靜態錄庫) + .h 看不到具體實現的代碼測試
演練:通常狀況下: 若是有個別mrc文件須要參與到編譯中,能夠作以下改動,可是有不少的話,須要使用靜態庫。MRC的項目打包成靜態庫,在ARC環境下也可使用。ui
(二)靜態庫的製做spa
<一>.a靜態庫的製做:
1、建立一個靜態庫(選右邊的是.a的靜態庫的製做,選左邊的是.framework的靜態庫的製做)
建立的靜態庫中的文件和靜態庫的名稱是同樣的。
2、假使你有一個項目文件,須要生成一個靜態庫。
在模擬器上生運行的成靜態庫
在真機上生成的靜態庫
點擊libtest.a,showinFinder:
可是要想將文件打包給別人,還須要一個.h文件。能夠直接將.h文件拷貝過來,可是若是項目很大,有不少
個.h文件,這個時候就比較麻煩,能夠選擇這樣操做:
而後,再編譯一下!!!就能夠運行了
測試靜態庫:
將生成的模擬器的文件導進來
須要的注意的地方:
1 、在模擬器上面,就用靜態庫生成的模擬器的包,若是不用,會報錯!!!!
2、在6s,6,5s(5s以上)編譯均可以成功,可是選用iphone5就會報錯。
緣由是:架構不一樣
查看架構,終端:
由於架構不同,適用的版本不同,要想都兼容不一樣的模擬器,能夠選擇不一樣的編譯器,從新編譯,可是也能夠
使用另外一種方法,更爲方便一點:
將yes改成no,編譯不活躍的狀態下的架構。
再次編譯:發現兩個個都支持:
可是真機調試的仍是不能夠。
靜態庫的兩個版本,一個是調試版本,一個是發佈版本。
這個是release模式:
而後下面的會變紅:
此時,再次編譯一下(分別選擇模擬器和真機):
showinFinder會出現4個文件夾:
作測試:在release下面,會出現不打印的狀況。這個時候須要作得更改就是,將release模式改成debug。
因此最後咱們通常給別人的,是生成的release模式下的靜態庫。
<二>.framework靜態庫的製做:
1、
可是這邊有一個問題,須要手動勾選一下,是靜態庫仍是動態庫,由於動態庫也是有.framework文件的。
(在後面有提示到!!!!!)
2、測試用的代碼:
3、將.h文件暴露出去。
正常上面的操做完成後,會編譯成功,可是報錯了,我作了以下嘗試:
修改項目的名稱:
1、在建立文件的時候,將下面的勾去掉
2、此次的項目名稱是test1,(猜想是由於我上面項目中有空格)
選擇模擬器和真機分別編譯。
點擊test1.framework,showinFinder:
這個也是一樣地能夠經過命令行能夠查看,由於生成的
3、一樣的,不一樣的模擬器以及真機,使用的架構不同,因此能夠這樣操做:
真機上面須要編譯一次,模擬器上面也須要編譯一次
四、測試framework靜態庫
編譯的時候不會報錯,可是運行的時候會報錯!!!
錯誤信息以下:
解決方法:
由於這個靜態庫是自定義的(自己就是動態庫),還須要在動態庫的地方添加上去。
這樣就能夠運行成功!
可是這個意味着,剛纔.frame生成的是動態庫,要想生成靜態庫作以下操做。
這個時候再次編譯一下,生成的纔是靜態庫。
直接測試:
上述生成的是debug版本,想生成的release版本,和.a靜態庫的作法是同樣的(參照上面)
5、.a靜態庫和. framework靜態庫有什麼區別:
.a靜態庫是一個純二進制文件,.framework中除了有二進制文件以外還有資源文件
.a文件不能直接使用,至少要配合.h文件,.framework文件能夠直接使用
.a + .h +sourceFile = . Framework
建議使用. Framework
6、靜態庫開發中常見的問題:
(1)有些第三方庫會使用的圖片以及素材,這寫素材放在哪裏?
因爲Xcode默認在編譯的時候,會把全部的素材文件導入到mainbundle中,可能與使用靜態庫文件衝突。
解決方法:在靜態中使用bundle文件夾。在資源圖片等放到這個包中。
(2)若是須要暴露的頭文件過多,怎麼辦?
建議用一個主頭文件包含其餘文件,單獨泄露出去。
(3)若是想調試靜態庫怎麼辦?建立複合文件!
測試:
如今就能夠任意調試:
(4)將模擬器和真機的靜態庫結合:
可是,這個生成的綜合文件的大小是模擬器和真機綜合的2倍,因此通常不建議使用合併的。
在mrc中生成的項目,打包成靜態庫,能夠在arc環境下直接使用
1、先將環境改爲mrc。
若是隻有個別的mrc的文件,能夠單獨改爲的mrc環境下的。
可是有不少mrc文件的話,須要打包成靜態庫
若是想生成真機和模擬器經過的文件,能夠這樣操做
可是整個包會變得比較大,不多用。