開發(fā)中糕篇,一些核心技術(shù)或者常用框架火诸,出于安全性和穩(wěn)定性的考慮躲查,不想被外界知道它浅,所以會把核心代碼打包成靜態(tài)庫,只暴露頭文件.比如微信 支付寶 友盟 百度地圖等等,他們的SDK中有很多的framework 和.a文件,相信使用過的盆友都有印象.
在我初出茅廬的時候著實(shí)覺得那些后綴名為“.frameworke”镣煮、“.a”姐霍、“.dylib”的文件很神秘,很高冷,但對這個“庫”究竟是什么“鬼”,一直都是云里霧里镊折。
區(qū)別
靜態(tài)庫:.a 和 .framework
動態(tài)庫:.dylib 和 .framework
靜態(tài)庫:鏈接時黔衡,靜態(tài)庫會被完整地復(fù)制到可執(zhí)行文件中,被多次使用就有多份冗余拷貝
動態(tài)庫:鏈接時不復(fù)制腌乡,程序運(yùn)行時由系統(tǒng)動態(tài)加載到內(nèi)存盟劫,供程序調(diào)用,系統(tǒng)只加載一次与纽,多個程序共用侣签,節(jié)省內(nèi)存
庫分開源庫和閉源庫
開源庫
源代碼是公開的,你可以看到具體實(shí)現(xiàn)急迂。比如GitHub上比較出名的第三方框架AFNetworking影所、SDWebImage。
閉源庫
不公開源代碼僚碎,只公開調(diào)用的接口猴娩,看不到具體的實(shí)現(xiàn),是一個編譯后的二進(jìn)制文件勺阐。這種常見于一些公司的SDK包卷中,比如高德地圖SDK、環(huán)信即時通訊SDK,微信SDK,百度地圖SDK等等渊抽。
但是蘋果爸爸比較兇悍在iOS8之前不讓開發(fā)者使用動態(tài)庫了,如果你的項(xiàng)目中使用了動態(tài)庫 ,蘋果爸爸會很無情的拒絕你提交的app.但是iOS8以后可以支持“Embed Frameworks”功能
制作打包靜態(tài)庫
制作打包靜態(tài)庫一般有2種方式,打包成.a 和打包成.framework
framework打包
framework打包方式和.a打包很相似我就簡單講一下,為了簡單我們就不新創(chuàng)建工程了.
- 1 添加framework
方式和添加stadic 類似 只是選擇的模式不同,這個framework 我命名為WWFirst
- 2 添加測試類和方法
和.a 不同的是這個framework只生成了頭文件 沒有.m文件 ,測試需要我們你自己添加類FrameWorkTestTool(自定義)
聲明了一個公開方法
+(void)testLog
{
NSLog(@"靜態(tài)庫測試");
}
- 3 設(shè)置打包的是靜態(tài)庫蟆豫。因?yàn)閯討B(tài)庫也可以是以framework形式存在,所以需要設(shè)置懒闷,否則默認(rèn)打出來的是動態(tài)庫.
- 4 編譯打包,同.a編譯后products下文件(WWFirst)會由紅色變黑色
注意target的切換 編譯時target應(yīng)該是WWFirst
- 5 測試運(yùn)行
切換target
導(dǎo)入頭文件
測試運(yùn)行
.a打包
- 創(chuàng)建一個工程,名字簡單命名我的命名為TestA,添加靜態(tài)庫AStadic(自己命名)
- 2.在生成的AStadic中添加測試代碼
+(void)testA
{
NSLog(@"我遇見誰會有怎么樣的對白");
}
- 3.編譯生成.a
選擇AStadic 按住command+ B,編譯
編譯通過后 我們在左邊Products文件夾下可以看到libAStadic 會由火紅色變黑色,圖中l(wèi)ibBStadic是為了對比的 未編譯仍是紅色
另外我們選中l(wèi)ibAStadic 右鍵選擇show in Finder,會看到下圖
- 運(yùn)行測試
切換編譯運(yùn)行的target
- 運(yùn)行測試
導(dǎo)入頭文件
import "AStadic.h"
調(diào)用 [AStadic testA];
如果編譯同過,需要把libAStadic.a添加到進(jìn)去
運(yùn)行結(jié)果
總結(jié)說明
靜態(tài)庫版本有四種,編譯時選擇切換就可以打包成不同的靜態(tài)庫
真機(jī)-Debug版本
真機(jī)-Release版本
模擬器-Debug版本
模擬器-Release版本
framework是現(xiàn)在比較流行的打包方式,用“Cocoa Touch Framework”創(chuàng)建的插件可以包含資源文件十减,而“Cocoa Touch Static Library”只能包含代碼.而且使用Cocoa Touch Framework也是能打包生成.a的,畢竟“Cocoa Touch Static Library”創(chuàng)建插件已經(jīng)是很老的技術(shù).所以還是推薦大家使用framework