記錄framework靜態(tài)庫制作流程
動態(tài)庫與靜態(tài)庫的區(qū)別
靜態(tài)庫:連接時完整地拷貝至可執(zhí)行文件中渔期,被多次使用就有多份冗余拷貝。
動態(tài)庫:連接時不復制渴邦,程序運行時由系統(tǒng)動態(tài)加載到內(nèi)存疯趟,供程序調(diào)用,系統(tǒng)只加載一次谋梭,多個程序共用迅办,節(jié)省內(nèi)存。
系統(tǒng)的.framework是動態(tài)庫章蚣,我們自己建立的.framework是靜態(tài)庫。
.a與.framework的區(qū)別
- a是一個純二進制文件姨夹,.framework中除了有二進制文件之外還有資源文件
- .a文件不能直接使用纤垂,至少要有.h文件配合,.framework文件可以直接使用
- .a + .h + sourceFile = .framework
如需制作.a靜態(tài)庫
.a靜態(tài)庫制作教程
1.打包Framework流程
創(chuàng)建Framework項目磷账。
2.添加要集成打包的類.h/.m/.a/Bundle/Framework等
3.項目配置
TARGETS —> Build Settings
Build Setting 搜索Mach-O Type 選中StaticLibrary (靜態(tài)庫) Xcode默認是動態(tài)庫峭沦。
Build Active Architecture Only 設置為NO。意思是當前打包的.framework支持所有的設備逃糟。否則打包時只能用當前版本的模擬器或真機運行吼鱼。
Build Setting 搜索Dead Code Stripping 設置為NO。編譯選項優(yōu)化绰咽,包瘦身菇肃,(可不改)。
Build Setting 搜索iOS Deployment Target 設置最低支持版本號取募。
注意:
xcode12 模擬器編譯的架構(gòu)有arm64架構(gòu)琐谤,導致與真機的架構(gòu)合并失敗。在build setting設置Excluded Architectures中設置模擬器的SDK去掉arm64,arm64e架構(gòu)
新iPhone X以上iPhone 11 iPhone12等支持新架構(gòu)得加一個arm64e,在Architectures里的other里手動添加即可
TARGETS —> Build Phases 將需要呈現(xiàn)給來的頭文件玩敏,直接從Project拖到Public中斗忌。 不想呈現(xiàn)出來的.h文件不建議拖到Private中.。放在project中即可
在framework的頭文件中導入需要公開的頭文件
4.打包
配置完項目后旺聚,選擇對應架構(gòu)织阳,編譯即可生成.framework靜態(tài)庫(發(fā)布建議設置release模式)
5.合并
可以通過添加腳本方式,但是這里只介紹手動合并
需要注意 砰粹,真機架構(gòu)只能運行在真機上唧躲,在模擬器上會報錯。模擬器架構(gòu)也一樣
如果需要支持所有設備,就需把真機和模擬器的framework合并惊窖。
分別在模擬器和真機設備下編譯刽宪,生成兩個xx.framework文件,然后將兩個文件使用命令合成一個
合并命令行
sudo lipo -create空格(真機framework文件路徑)空格(模擬器framework文件路徑)空格-output空格(自定義合成后文件存儲路徑)
把合并后的文件替換掉framework中的即可界酒。
查看framework 架構(gòu)信息
lipo -info
6.制作好的framework集成使用
把制作好的framework拖入工程即可圣拄,引用頭文件即可
每次更改framework代碼,就得打包再導入測試項目中看實際效果毁欣,很麻煩且效率低庇谆。解決方案iOS開發(fā) 靜態(tài)庫關(guān)聯(lián)demo 多工程聯(lián)調(diào)