創(chuàng)建.framework和靜態(tài)庫.a文件

創(chuàng)建.framework文件#

說明:本次操作使用的是Xcode7.2

1.新建工程钱磅,選擇Framework

Create a new Xcode project.png
選擇Framework.png

2.給工程命名豺旬,點擊next,選擇保存路徑

project name.png

3.我們首先看到的Products下的FrameworkDemo.framework是紅色樟蠕,表示還沒有相應的framework文件生成

framework_unvalid.png

4.刪除默認的FrameworkDemo.h文件

刪除默認的.h文件.png

5.刪除后就可以創(chuàng)建自己的類來實現(xiàn)相應的功能,比如

功能實現(xiàn).png

說明:兩個類里僅寫了示例代碼

在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.png
需要公開的接口文件.png

處理好之后就可以做一下編譯之前的準備工作了

1.選擇運行環(huán)境缩多,模擬器或者真機呆奕,這個應該都知道怎么選擇吧 這里不在累述了,先選擇模擬器

2.選擇Edit Scheme

Edit Scheme_simulator.png

3.選擇Run,Debug模式衬吆,點擊close

RunAndDebug.png

4.編譯一下梁钾,到這里,在模擬器下運行的framework已經(jīng)生成了逊抡,但是此時你看到的Product下的.framework文件還是紅色的姆泻,這是正常的。甭管它

切換到真機狀態(tài)下

1.選擇真機或者iOS Device

iPhone.png

2.選擇Edit Scheme

Edit Scheme_iPhone.png

3.選擇Run,Release模式, 點擊close

RunAndRelease.png

4.編譯拇勃,到這里四苇,在真機上運行的framework文件就生成好了,此時看到的product下的.framework文件已經(jīng)變成黑色了

framework_valid.png

點擊Products下的FrameworkDemo.framework文件方咆,右鍵月腋,選擇show in Finder,可以看到該文件所在位置

show in Finder.png

在這兒可以看到有兩個文件夾,分別對應模擬器和真機瓣赂,選中任意一種狀態(tài)下的FrameworkDemo.framework文件罗售,可以看到該framework文件里面包含的文件

framework——included.png

紅色框選中的為二進制文件。后面會用到

到這里就可以創(chuàng)建一個測試工程來測試創(chuàng)建的framework是否可用了钩述,但是現(xiàn)在使用的話模擬器和真機是分開的寨躁,也就是前面兩個文件夾下的framework文件只能在對應的環(huán)境下使用⊙揽保可以通過終端看一下使用環(huán)境职恳,首先切換到該目錄下,然后使用 lipo -info 命令方面。

模擬器文件下的framework

模擬器運行環(huán)境.png

真機文件夾下的framework

真機運行環(huán)境.png

為了統(tǒng)一使用放钦,可以將兩種狀態(tài)下的framework文件合并成一個,這樣在使用的時候就不用區(qū)分了恭金。還是用使用終端來實現(xiàn)這一強大的轉變操禀。使用lipo -create XXX XXX -output FrameworkDemo命令。

說明:兩個XXX分別表示模擬器和真機兩個文件下的FrameworkDemo.framework里面的二進制文件FrameworkDemo横腿,output FrameworkDemo中的FrameworkDemo指的是合并之后的二進制文件

合并.png

最后通過ls可以看到多了一個FrameworkDemo文件

使用前的準備
在模擬器或者真機文件夾里把 FrameworkDemo.framework文件復制一份放到桌面上(隨便你放在哪兒都一樣哈),然后把合并之后生成的二進制文件替換調FrameworkDemo.framework里面的二進制文件颓屑。這樣一個完整的framework文件就制作完成了,耶耶~

激動人心的時刻到了耿焊,創(chuàng)建一個測試工程test揪惦,把桌面上的FrameworkDemo.framework放到測試項目中,可以清晰地看到里面的.h文件提供了哪些接口罗侯。

scan.png

導入頭文件

#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

add Framework.png

添加之后在Linked Frameworks and Libraries里面會看到兩個相同的文件,刪掉一個吧

Delete Framework.png

然后在運行一下,就可以看到你想要的結果了

模擬器運行結果.png

真機運行會出同樣的結果哈讲弄,試試吧

結果出來了措左,恭喜你~~

創(chuàng)建靜態(tài)庫.a文件#

打開Xcode,選擇Framework&Library,選擇Cocoa Touch Static Library,點擊Next

choose staticLibrary.png

給靜態(tài)庫文件命名(staticLibDemo),點擊Next,選擇保存路徑...

name.png

在項目的左側垂睬,我們看到Products文件夾里的libstaticLibDemo.a文件是紅色的媳荒,說明該文件是不存在的抗悍,所以...

a_ notExist.png

刪除默認的.h和.m文件

delete default.png

創(chuàng)建自己的類來實現(xiàn)該.a文件的功能

my class.png

在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

add New Headers.png

此刻發(fā)現(xiàn)Headers里面empty

headers_empty.png

點擊下方的加號+,選中所有.h文件鱼炒,點擊Add

add_h.png

添加之后發(fā)現(xiàn).h文件全部都在Project里面衔沼,所以在這里我們做一些調整,將需要公開接口的.h文件移動到Public昔瞧,不公開的可以移動到Private

headers_Project.png
headers_Public.png

現(xiàn)在進行編譯指蚁,通常只需要設置模擬器和真機,但是在這里需要提醒一下自晰,在編譯之前先進行一項設置,這一步非常重要凝化,選中項目,Build Settings, Architectures里面的Build Active Architecture Only里面有Debug和Release兩種狀態(tài),請都設置成NO酬荞,請設置成NO,請設置成NO,重要的事說三遍,(如果是YES的話搓劫,假如你選中的是5s進行編譯的話,生成的.a文件就只能在5s的模擬器上運行混巧,在其他機型上是跑不起來的~~)

settings.png

選擇Edit Scheme, Run, Debug, 點擊Close枪向,最后編譯一下,只要編譯成功就可以了咧党,到這里和生成framework是一樣的

Edit Scheme_simulator.png
RunandDebug.png

模擬器編譯完成后.a文件依然是紅色的秘蛔,和framework一樣,不必驚訝

simulator_a.png

選擇真機

choose iPhone.png
Edit Scheme_iPhone.png

真機選擇 Release 0狻I钤薄!

RunandRelease.png

編譯成功后.a文件顯示黑色聪舒,Show in Finder

iPhone_a.png

在文件夾中發(fā)現(xiàn)有兩個文件夾:模擬器的Debug版和真機的Release版, 到這里就創(chuàng)建好了辨液,而且能使用了虐急,但是還不完整箱残,模擬器上的.a文件不能在真機上運行,同樣真機的.a文件不能再模擬器上運行止吁,所以還是和framework一樣被辑,把兩個.a合并成一個通用的版本。

two_a.png

啟動終端敬惦,使用lipo -create XXX XXX -output XXX

說明:前面兩個XXX分別表示模擬器和真機編譯的.a文件盼理,最后一個XXX是指合并后的.a文件

terminal.png

執(zhí)行完以后發(fā)現(xiàn)Products下除了模擬器和真機兩個文件夾以外多了一個.a文件,恭喜你俄删,這個.a文件就是通用版本的.a文件宏怔,直接把這個.a文件復制一個奏路,比如放在桌面

universal_a.png

.a文件要稍微麻煩一點,除了把這個.a放到項目以外臊诊,還要把公開的.h文件一起拷貝出來鸽粉,可以新建一個文件夾libstaticlibdemo

doucment.png

使用的時候把文件夾libstaticlibdemo放到項目中就可以了。

下面可以新建一個測試工程來測試.a文件的功能
如果出現(xiàn)下面的錯誤抓艳,檢測一下前面在編譯之前的準備工作是否完善触机,選中項目,Build Settings, Architectures里面的Build Active Architecture Only里面有Debug和Release兩種狀態(tài),如果是YES的話就只能選擇之前編譯時選中的模擬器型號了玷或,改成NO儡首,重新生成吧,自作孽偏友,不可活

error information.png

運行結果:

result.png

恭喜蔬胯,.a文件創(chuàng)建成功.

.framework和.a文件都Ok了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末位他,一起剝皮案震驚了整個濱河市笔宿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌棱诱,老刑警劉巖泼橘,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異迈勋,居然都是意外死亡炬灭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門靡菇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來重归,“玉大人,你說我怎么就攤上這事厦凤”撬保” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵较鼓,是天一觀的道長椎木。 經(jīng)常有香客問我,道長博烂,這世上最難降的妖魔是什么香椎? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮禽篱,結果婚禮上畜伐,老公的妹妹穿的比我還像新娘。我一直安慰自己躺率,他們只是感情好玛界,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布万矾。 她就那樣靜靜地躺著,像睡著了一般慎框。 火紅的嫁衣襯著肌膚如雪勤众。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天鲤脏,我揣著相機與錄音们颜,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的返帕。 我是一名探鬼主播抹镊,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤称近,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后哮塞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刨秆,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年忆畅,在試婚紗的時候發(fā)現(xiàn)自己被綠了衡未。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡家凯,死狀恐怖缓醋,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情绊诲,我是刑警寧澤送粱,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站掂之,受9級特大地震影響抗俄,放射性物質發(fā)生泄漏。R本人自食惡果不足惜板惑,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一橄镜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冯乘,春花似錦、人聲如沸晒夹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至喷好,卻和暖如春翔横,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梗搅。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工禾唁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人无切。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓荡短,卻偏偏與公主長得像,于是被迫代替她去往敵國和親哆键。 傳聞我的和親對象是個殘疾皇子掘托,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內容