前言
在做項目的時候我們經(jīng)常會用到別人封裝好的資源,我們會看到有的資源是.a、.bundle文件,有的是.framework文件刘离,那么.framework文件是怎么生成的呢?接下來我會用圖形和文字給大家詳細說明一下睹栖。
一硫惕、什么是庫
庫實際上是一種代碼共享的方式,主要用于代碼重用和源碼隱藏野来,通常分為動態(tài)庫和靜態(tài)庫恼除。
靜態(tài)庫:鏈接時完整的拷貝至可執(zhí)行文件中,被多次使用就有多份冗余拷貝曼氛。
動態(tài)庫:鏈接時不復(fù)制豁辉,程序運行時由系統(tǒng)動態(tài)加載到內(nèi)存令野,供程序調(diào)用,系統(tǒng)只加載一次徽级,多個程序共用彩掐,節(jié)省內(nèi)存空間。
二灰追、什么是.a堵幽、.bundle、.framework
在iOS中靜態(tài)庫以.a和.framework的形式存在弹澎,動態(tài)庫以.dylib和.framework的形式存在朴下。之所以.framework既可能是動態(tài)庫又可能是靜態(tài)庫,是因為蘋果公司禁止用戶級App使用動態(tài)庫苦蒿,而自己卻又堂而皇之的使用動態(tài)庫殴胧,這就造成了iOS中系統(tǒng)級的.framework是動態(tài)庫,用戶級的.framework是靜態(tài)庫佩迟。
二者區(qū)別不大团滥,.a是純二進制文件,.a文件不能單獨使用报强,至少要有.h文件配合灸姊,而.framework除了二進制文件外,還包含一些資源文件(頭文件秉溉,plist等)力惯,由于自身包含了頭文件,所以.framework可以單獨使用召嘶。 .a和.framework兩種靜態(tài)庫父晶,通常都是把需要用的到圖片或者xib文件存放在一個bundle文件中,而該bundle文件的名字和.a或.framework的名字相同弄跌。
三甲喝、靜態(tài)庫使用的必要性
1>. 代碼的共享與重用
2>. 程序模塊化
3>. 分享給別人代碼庫時代碼隱藏
4>. 開發(fā)第三方SDK
步驟
1.打開xcode,新建工程
選擇“Framework & Library”,然后next
2.創(chuàng)建功能類
創(chuàng)建一個繼承自NSObject的People類铛只。
3.實現(xiàn)功能
在新創(chuàng)建的類里面聲明方法并實現(xiàn)埠胖。這里我寫一個buy的方法,以便后面測試使用格仲。
在People.h文件里面
#import <Foundation/Foundation.h>
@interface People : NSObject
+ (void)buy;
@end
在People.m文件里面
#import "People.h"
@implementation People
+ (void)buy
{
NSLog(@"buy");
}
@end
4押袍、更改參數(shù)
這里貼上Xcode基本操作
http://blog.csdn.net/phunxm/article/details/17044337
5、設(shè)置Headers
將你要公開的頭文件拖至Public下凯肋,要隱藏的放在Private或者Project下谊惭,當然,隱藏的頭文件就無法再被引用。
然后需要在CustomFramework.h(必須是公開的圈盔,否則無法引用)中將你所有要公開的.h引入
打包Framework
1.選中模擬器豹芯,編譯程序(cmd+B)
2.選中測試機,編譯程序(cmd+B)
3.在finder中找到framework文件
找到下圖中所示的CustomFramework文件驱敲,一個是Debug-iphoneos(真機)下的铁蹈,一個是Debug-iphonesimulator(模擬器)下的。
使用xcode自帶的lipo可以合并兩個版本:在終端下使用命令:lipo -create /User/...../release-iphoneos/xxx.framework/xxx /User/...../release-iphonesimular/xxx.framework/xxx -output ./xxx
其中xxx為你的庫的名稱众眨,路徑為生成的靜態(tài)庫的路徑握牧,然后把生成的xxx放到真機或者模擬器版的xxx.framework里面替換里面原有的xxx庫