前言
不論是個(gè)人開發(fā)還是團(tuán)隊(duì)開發(fā),隨著經(jīng)驗(yàn)的積累友绝,會(huì)有一套屬于自己的類和工具函數(shù)抛腕。在團(tuán)隊(duì)開發(fā)中芋绸,每個(gè)成員都會(huì)有自己習(xí)慣的屬于自己的類和工具,如果不能進(jìn)行整合利用担敌,一個(gè)項(xiàng)目中會(huì)存在許多重復(fù)的工具函數(shù)和類別摔敛,所以整合成為一個(gè)受到大家認(rèn)可的工具集尤為重要。當(dāng)開啟一個(gè)新項(xiàng)目時(shí)柄错,你肯定會(huì)發(fā)現(xiàn)許多之前項(xiàng)目中用到過的方法舷夺,重用代碼的最簡(jiǎn)單方法是copy,但是這種方式會(huì)對(duì)維護(hù)造成極大的阻礙售貌,你很難保證共用文件在所有項(xiàng)目之間的同步升級(jí)给猾。這時(shí)靜態(tài)庫就閃亮登場(chǎng)了,一個(gè)靜態(tài)庫是由若干個(gè)類,函數(shù),定義和資源的包裝颂跨,將私密內(nèi)容打包成靜態(tài)庫敢伸,別人只能調(diào)用接口,而不能知道其中實(shí)現(xiàn)的細(xì)節(jié)恒削,你可以將其打包并在項(xiàng)目之間共享池颈。
制作靜態(tài)庫
1.開一個(gè)新項(xiàng)目尾序,創(chuàng)建靜態(tài)庫
2.將你需要打包的文件拖入項(xiàng)目。(此處無圖)
此處需要注意的是:如果你在靜態(tài)庫工程中使用了Category躯砰,那么你可能會(huì)碰到鏈接問題每币。解決方法:
*? 方法1:在生成靜態(tài)庫的工程和使用靜態(tài)庫的工程中使用“-all_load”編譯選項(xiàng),即在“Other Linker Flags”選項(xiàng)添加“-all_load”琢歇。(Build Settings)
*? 方法2:在Category的.M文件中兰怠,聲明一個(gè)虛擬類。(推薦)
3.配置你的靜態(tài)庫
*? 配置靜態(tài)庫的Deployment Target(Build Settings)
*? 配置需要暴露的頭文件(Build Phases - Copy File)
*? 配置靜態(tài)庫的architecture版本(Build Settings - Build Active Architecture Only)
注意:"Build Active Architecture Only" 設(shè)置為”NO” (設(shè)置為NO會(huì)編譯所有版本李茫,否則只編譯當(dāng)前的architecture版本)
在進(jìn)行以上配置之后揭保,就可以滿足大多數(shù)靜態(tài)庫的需求了,打包走起魄宏!
4.編譯生成靜態(tài)庫.a文件
1)分別選擇真機(jī)和Iphone6模擬器進(jìn)行編譯秸侣,這是你可以看到項(xiàng)目文件夾中Products里面的.a文件生成了,然后右鍵Show In Finder
2)可以看到在文件夾中生成了對(duì)應(yīng)的模擬器.a以及真機(jī).a宠互,以及需要暴露的頭文件味榛。
3)合并.a文件
使用終端進(jìn)行合成操作 lipo -create (真機(jī).a路徑) (模擬器.a路徑) -output 保存路徑/(文件名).a
成功之后新生成的.a文件就可以使用啦!C恪励负!
5.使用靜態(tài)庫
將.h以及合成的通用版.a文件導(dǎo)入測(cè)試工程中,實(shí)現(xiàn).h提供的接口
福利
既然你堅(jiān)持看到這里!X暗谩!不得不送你一個(gè)宏作為感謝巾表,幫助你在Category中快速創(chuàng)建虛擬類
#ifndef FIX_CATEGORY_BUG
#define FIX_CATEGORY_BUG(_name_) \
@interface FIX_CATEGORY_BUG ## _name_ : NSObject? @end\
@implementation FIX_CATEGORY_BUG ## _name_? @end
#endif
目前iOS設(shè)備對(duì)應(yīng)的CPU架構(gòu)了列表:iOS設(shè)備的CPU架構(gòu)