無線客戶端框架設(shè)計(jì)(2):項(xiàng)目結(jié)構(gòu)的設(shè)計(jì)(iOS篇)
本文附帶源碼:http://down.51cto.com/data/935164
在設(shè)計(jì)任何一個(gè)框架之前,都應(yīng)規(guī)劃好項(xiàng)目結(jié)構(gòu)。
假定Git作為我們的項(xiàng)目管理工具。我們要建立兩個(gè)倉庫,一個(gè)用于存放我們的框架,另一個(gè)用于存放我們的項(xiàng)目,后者引用前者。
對(duì)于iOS而已,大部分開發(fā)者已經(jīng)習(xí)慣于就一個(gè)project,所有的功能、頁面都做在上面,倒也沒錯(cuò)。然而我現(xiàn)在要做的是,要讓我所設(shè)計(jì)的框架,脫離于項(xiàng)目而存在,這樣,明天我也許會(huì)做另一個(gè)項(xiàng)目,但是所使用的框架確是同一個(gè)。
為此,iOS需要用到workspace的概念。它相當(dāng)于.NET中的solution文件,在.NET中,我們可以在一個(gè)solution中添加多個(gè)project,同理,在iOS中,我們也可以在一個(gè)workspace中添加多個(gè)project。
搭建步驟如下:
1)新建一個(gè)空的workspace
選擇 File -> New -> Workspace , 將 Workspace 命名為 YoungHeart。
2)創(chuàng)建框架的project,命名為MyLib。
3)在MyLib中實(shí)現(xiàn)幾個(gè)方法,build一次。
4)創(chuàng)建項(xiàng)目的project,命名為MyApp
5)在MyApp中添加對(duì)MyLib的引用
先在Target中,選中Summary這個(gè)Tab,添加libMyLib.a的引用:
然后在Project中,選中Build Settings這個(gè)Tab,查找關(guān)鍵字Header Search Path,
在搜索到的結(jié)果中,選中Header Search Path,添加路徑,記得選擇recursive:
添加路徑后效果如下所示:
***,會(huì)發(fā)現(xiàn),項(xiàng)目中,多了一個(gè)libMyLib.a,將其轉(zhuǎn)移到Frameworks目錄下:
6)在MyApp中使用MyLib的方法
在MyApp的ViewController.m文件中,首先添加對(duì)MyLib項(xiàng)目的引用:
#import "MyLib.h"
然后編寫以下代碼:
如果編譯不出錯(cuò),就說明添加引用成功了。否則,請(qǐng)檢查1-4步。
同時(shí),如果編譯不出錯(cuò),你會(huì)發(fā)現(xiàn),在調(diào)試期間,你可以同時(shí)調(diào)試MyApp和MyLib兩個(gè)項(xiàng)目里面的代碼。而這非常重要。
最終截圖如下:
如果以后對(duì)MyLib進(jìn)行了修改,比如,我將add方法的實(shí)現(xiàn)修改為
,這時(shí),MyApp是不知道的,仍然返回修改之前的結(jié)果(a1+a2)。這時(shí),我們需要額外做一些事情,才能讓MyApp知道MyLib的修改。步驟如下:
1)刪除MyApp中對(duì)libMyLib的引用。
2)對(duì)修改過的MyLib項(xiàng)目,先Clean再Build。
3)在MyApp項(xiàng)目中重新添加對(duì)MyLib項(xiàng)目的引用。
也許你會(huì)覺得麻煩,但是框架一旦穩(wěn)定下來之后,修改就不是那么頻繁了,所以上述那么麻煩的事情不會(huì)經(jīng)常去做。而且,一般而言,框架只會(huì)由一個(gè)人維護(hù),所以只要他每次修改框架并相應(yīng)更新項(xiàng)目后,發(fā)封郵件通知到家更新Git就好了。