1. framework
1.1 創建一個framework工程
未完 待續
2. .a
2.1 創建一個.a工程
創建之後會默認生成一個和庫名一樣的文件夾和 類(XCode 7 好像沒有生成類 需要自己手動創建)
2.2 添加相關代碼
2.3 編譯之後會生成.a文件如下圖
2.4 別人用我們生成的庫 需要頭文件 這時我就就需要吧我的的.h文件暴露出去
- 第一種方式:直接把所有需要暴露的頭文件copy出去(不推薦)
- 第二種方式:用系統的CopyFile 添加對應的文件夾包含所有的頭文件如下圖(個人推薦)
- 第三種方式:用系統的header File 生成如下圖
2.5 生成模擬器和真機對應的.a文件
由於真機和模擬器架構不一樣 所以我們要分別針對模擬器和真機生成不同的.a庫
真機生成 在真機下編譯 ,模擬器生成在模擬器下編譯
最後會生成兩個靜態庫
合併兩個靜態庫 終端命令: lipo -create 真機.a地址 模擬器.a地址 -output 輸出.a地址
新建一個工程 ,並導入剛纔創建的.a 靜態庫 在模擬器 IPhone 8上測試可以 ,但是更換到模擬器iPhone 5編譯報錯
爲什麼呢?
每一個設備都有自己的CPU架構,每一個靜態庫也有自己支持的CPU架構
對於iOS 模擬器
- iPhone4s~5 : i386
- iPhone5s~8plus : x86_64
真機 - iPhone 3gs ~ 4s : armv7
- iPhone5~5c: armv7s
- iPhone6~ : arm6
armv6, armv7, armv7s是ARM CPU的不同指令集,原則是向下兼容的。例如iPhone4S CPU支持armv7, 但它同時兼容armv6,只是使用armv6指令可能無法充分發揮它的特性。
查看靜態庫.a 對處理器架構的支持 lipo -info xxx.a
解決不支持架構–>>Build Active Architecture Only中的Debug如果爲YES,就是說只能調試當前活躍的架構,我們當前選中的即是活躍的,所以設置爲No即可