前言
不論是個人開發還是團隊開發,隨著經驗的積累,會有一套屬于自己的類和工具函數。在團隊開發中,每個成員都會有自己習慣的屬于自己的類和工具,如果不能進行整合利用,一個項目中會存在許多重復的工具函數和類別,所以整合成為一個受到大家認可的工具集尤為重要。當開啟一個新項目時,你肯定會發現許多之前項目中用到過的方法,重用代碼的最簡單方法是copy,但是這種方式會對維護造成極大的阻礙,你很難保證共用文件在所有項目之間的同步升級。這時靜態庫就閃亮登場了,一個靜態庫是由若干個類,函數,定義和資源的包裝,將私密內容打包成靜態庫,別人只能調用接口,而不能知道其中實現的細節,你可以將其打包并在項目之間共享。
制作靜態庫
1.開一個新項目,創建靜態庫
2.將你需要打包的文件拖入項目。(此處無圖)
此處需要注意的是:如果你在靜態庫工程中使用了Category,那么你可能會碰到鏈接問題。解決方法:
*? 方法1:在生成靜態庫的工程和使用靜態庫的工程中使用“-all_load”編譯選項,即在“Other Linker Flags”選項添加“-all_load”。(Build Settings)
*? 方法2:在Category的.M文件中,聲明一個虛擬類。(推薦)
3.配置你的靜態庫
*? 配置靜態庫的Deployment Target(Build Settings)
*? 配置需要暴露的頭文件(Build Phases - Copy File)
*? 配置靜態庫的architecture版本(Build Settings - Build Active Architecture Only)
注意:"Build Active Architecture Only" 設置為”NO” (設置為NO會編譯所有版本,否則只編譯當前的architecture版本)
在進行以上配置之后,就可以滿足大多數靜態庫的需求了,打包走起!
4.編譯生成靜態庫.a文件
1)分別選擇真機和Iphone6模擬器進行編譯,這是你可以看到項目文件夾中Products里面的.a文件生成了,然后右鍵Show In Finder
2)可以看到在文件夾中生成了對應的模擬器.a以及真機.a,以及需要暴露的頭文件。
3)合并.a文件
使用終端進行合成操作 lipo -create (真機.a路徑) (模擬器.a路徑) -output 保存路徑/(文件名).a
成功之后新生成的.a文件就可以使用啦?。。?/p>
5.使用靜態庫
將.h以及合成的通用版.a文件導入測試工程中,實現.h提供的接口
福利
既然你堅持看到這里?。?!不得不送你一個宏作為感謝,幫助你在Category中快速創建虛擬類
#ifndef FIX_CATEGORY_BUG
#define FIX_CATEGORY_BUG(_name_) \
@interface FIX_CATEGORY_BUG ## _name_ : NSObject? @end\
@implementation FIX_CATEGORY_BUG ## _name_? @end
#endif
目前iOS設備對應的CPU架構了列表:iOS設備的CPU架構