創(chuàng)建.framework文件#
說明:本次操作使用的是Xcode7.2
1.新建工程钱磅,選擇Framework
2.給工程命名豺旬,點擊next,選擇保存路徑
3.我們首先看到的Products下的FrameworkDemo.framework是紅色樟蠕,表示還沒有相應的framework文件生成
4.刪除默認的FrameworkDemo.h文件
5.刪除后就可以創(chuàng)建自己的類來實現(xiàn)相應的功能,比如
說明:兩個類里僅寫了示例代碼
在GPModel.h里定義了一個方法
@interface GPModel : NSObject
- (void) learn;
@end
實現(xiàn)方法
@implementation GPModel
-(void)learn{
NSLog(@"正在學習如何創(chuàng)建framework");
}
@end
在GPView.h文件定義了一個方法
@interface GPView : UIView
- (void) createViewFromSuperView:(UIView *) superView;
@end
實現(xiàn)方法
@implementation GPView
-(void)createViewFromSuperView:(UIView *)superView{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
view.backgroundColor = [UIColor redColor];
[superView addSubview:view];
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
@end
到這里嗅义,假設該framework的所有功能都實現(xiàn)完了钳宪,下面的操作就很關鍵了~~
點擊項目揭北,選擇Build Phases,Headers吏颖,默認情況下所有的.h文件都已經(jīng)添加到Project里面了搔体,但是我們需要做一些調整,有些.h必須放到Public下半醉,這樣在外界使用的時候才能調用到相應的接口疚俱,不公開的接口文件放在Private下。
處理好之后就可以做一下編譯之前的準備工作了
1.選擇運行環(huán)境缩多,模擬器或者真機呆奕,這個應該都知道怎么選擇吧 這里不在累述了,先選擇模擬器
2.選擇Edit Scheme
3.選擇Run,Debug模式衬吆,點擊close
4.編譯一下梁钾,到這里,在模擬器下運行的framework已經(jīng)生成了逊抡,但是此時你看到的Product下的.framework文件還是紅色的姆泻,這是正常的。甭管它
切換到真機狀態(tài)下
1.選擇真機或者iOS Device
2.選擇Edit Scheme
3.選擇Run,Release模式, 點擊close
4.編譯拇勃,到這里四苇,在真機上運行的framework文件就生成好了,此時看到的product下的.framework文件已經(jīng)變成黑色了
點擊Products下的FrameworkDemo.framework文件方咆,右鍵月腋,選擇show in Finder,可以看到該文件所在位置
在這兒可以看到有兩個文件夾,分別對應模擬器和真機瓣赂,選中任意一種狀態(tài)下的FrameworkDemo.framework文件罗售,可以看到該framework文件里面包含的文件
紅色框選中的為二進制文件。后面會用到
到這里就可以創(chuàng)建一個測試工程來測試創(chuàng)建的framework是否可用了钩述,但是現(xiàn)在使用的話模擬器和真機是分開的寨躁,也就是前面兩個文件夾下的framework文件只能在對應的環(huán)境下使用⊙揽保可以通過終端看一下使用環(huán)境职恳,首先切換到該目錄下,然后使用 lipo -info
命令方面。
模擬器文件下的framework
真機文件夾下的framework
為了統(tǒng)一使用放钦,可以將兩種狀態(tài)下的framework文件合并成一個,這樣在使用的時候就不用區(qū)分了恭金。還是用使用終端來實現(xiàn)這一強大的轉變操禀。使用lipo -create XXX XXX -output FrameworkDemo
命令。
說明:兩個XXX分別表示模擬器和真機兩個文件下的FrameworkDemo.framework里面的二進制文件FrameworkDemo横腿,output FrameworkDemo中的FrameworkDemo指的是合并之后的二進制文件
最后通過ls
可以看到多了一個FrameworkDemo
文件
使用前的準備
在模擬器或者真機文件夾里把 FrameworkDemo.framework文件復制一份放到桌面上(隨便你放在哪兒都一樣哈),然后把合并之后生成的二進制文件替換調FrameworkDemo.framework里面的二進制文件颓屑。這樣一個完整的framework文件就制作完成了,耶耶~
激動人心的時刻到了耿焊,創(chuàng)建一個測試工程test揪惦,把桌面上的FrameworkDemo.framework放到測試項目中,可以清晰地看到里面的.h文件提供了哪些接口罗侯。
導入頭文件
#import <FrameworkDemo/GPModel.h>
#import <FrameworkDemo/GPView.h>
測試代碼
- (void)viewDidLoad {
[super viewDidLoad];
GPModel *model = [[GPModel alloc] init];
[model learn];
GPView *view = [[GPView alloc] init];
[view createViewFromSuperView:self.view];
}
點擊運行器腋,此刻程序崩了,他娘的~ 氣死人了吧
![Error info.png](./Error info.png)
別著急钩杰,會有解決辦法的~
點擊項目纫塌,General,在Embedded Binaries添加Framework
添加之后在Linked Frameworks and Libraries里面會看到兩個相同的文件,刪掉一個吧
然后在運行一下,就可以看到你想要的結果了
真機運行會出同樣的結果哈讲弄,試試吧
結果出來了措左,恭喜你~~
創(chuàng)建靜態(tài)庫.a文件#
打開Xcode,選擇Framework&Library,選擇Cocoa Touch Static Library,點擊Next
給靜態(tài)庫文件命名(staticLibDemo),點擊Next,選擇保存路徑...
在項目的左側垂睬,我們看到Products文件夾里的libstaticLibDemo.a文件是紅色的媳荒,說明該文件是不存在的抗悍,所以...
刪除默認的.h和.m文件
創(chuàng)建自己的類來實現(xiàn)該.a文件的功能
在GPModel.h里定義了一個方法
@interface GPModel : NSObject
- (void) learn;
@end
實現(xiàn)方法
@implementation GPModel
-(void)learn{
NSLog(@"正在學習創(chuàng)建靜態(tài)庫.a文件");
}
@end
在GPView.h文件定義了一個方法
@interface GPView : UIView
- (void) createViewFromSuperView:(UIView *) superView;
@end
實現(xiàn)方法
@implementation GPView
-(void)createViewFromSuperView:(UIView *)superView{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
view.backgroundColor = [UIColor redColor];
[superView addSubview:view];
}
@end
到這里,假設該靜態(tài)庫.a文件的所有功能都實現(xiàn)完了钳枕,下面將介紹如何生成.a文件缴渊。
首先選中項目名稱,Build Phases,點擊加號+,選擇 New Headers Phase
此刻發(fā)現(xiàn)Headers里面empty
點擊下方的加號+,選中所有.h文件鱼炒,點擊Add
添加之后發(fā)現(xiàn).h文件全部都在Project里面衔沼,所以在這里我們做一些調整,將需要公開接口的.h文件移動到Public昔瞧,不公開的可以移動到Private
現(xiàn)在進行編譯指蚁,通常只需要設置模擬器和真機,但是在這里需要提醒一下自晰,在編譯之前先進行一項設置,這一步非常重要凝化,選中項目,Build Settings, Architectures里面的Build Active Architecture Only里面有Debug和Release兩種狀態(tài),請都設置成NO酬荞,請設置成NO,請設置成NO,重要的事說三遍,(如果是YES的話搓劫,假如你選中的是5s進行編譯的話,生成的.a文件就只能在5s的模擬器上運行混巧,在其他機型上是跑不起來的~~)
選擇Edit Scheme, Run, Debug, 點擊Close枪向,最后編譯一下,只要編譯成功就可以了咧党,到這里和生成framework是一樣的
模擬器編譯完成后.a文件依然是紅色的秘蛔,和framework一樣,不必驚訝
選擇真機
真機選擇 Release 0狻I钤薄!
編譯成功后.a文件顯示黑色聪舒,Show in Finder
在文件夾中發(fā)現(xiàn)有兩個文件夾:模擬器的Debug版和真機的Release版, 到這里就創(chuàng)建好了辨液,而且能使用了虐急,但是還不完整箱残,模擬器上的.a文件不能在真機上運行,同樣真機的.a文件不能再模擬器上運行止吁,所以還是和framework一樣被辑,把兩個.a合并成一個通用的版本。
啟動終端敬惦,使用lipo -create XXX XXX -output XXX
說明:前面兩個XXX分別表示模擬器和真機編譯的.a文件盼理,最后一個XXX是指合并后的.a文件
執(zhí)行完以后發(fā)現(xiàn)Products下除了模擬器和真機兩個文件夾以外多了一個.a文件,恭喜你俄删,這個.a文件就是通用版本的.a文件宏怔,直接把這個.a文件復制一個奏路,比如放在桌面
.a文件要稍微麻煩一點,除了把這個.a放到項目以外臊诊,還要把公開的.h文件一起拷貝出來鸽粉,可以新建一個文件夾libstaticlibdemo
使用的時候把文件夾libstaticlibdemo
放到項目中就可以了。
下面可以新建一個測試工程來測試.a文件的功能
如果出現(xiàn)下面的錯誤抓艳,檢測一下前面在編譯之前的準備工作是否完善触机,選中項目,Build Settings, Architectures里面的Build Active Architecture Only里面有Debug和Release兩種狀態(tài),如果是YES的話就只能選擇之前編譯時選中的模擬器型號了玷或,改成NO儡首,重新生成吧,自作孽偏友,不可活
運行結果:
恭喜蔬胯,.a文件創(chuàng)建成功.
.framework和.a文件都Ok了。