Reveal是一個(gè)界面調(diào)試工具。使用Reveal,我們可以在iOS開發(fā)時(shí)動(dòng)態(tài)地查看和修改應(yīng)用程序的界面。它類似Chrome的“審查元素”功能,我們不但可以在運(yùn)行時(shí)看到iOS程序的界面層級(jí)關(guān)系,還可以實(shí)時(shí)地修改程序界面,不用重新運(yùn)行程序就可以看到修改之后的效果。
配置Reveal:
1、配置方式一(需要修改工程文件)
(1)啟動(dòng)Reveal,選擇Reveal -> Help -> Show Reveal Library in Finder -> iOS Library。
(2)在Xcode中打開iOS項(xiàng)目,將Reveal.framework拖到項(xiàng)目中,如果升級(jí)了Reveal,對(duì)應(yīng)的Reveal.framework文件也要更新到對(duì)應(yīng)的版本。
(3)選擇Target -> Build Phases -> Link Binary With Libraries將Reveal.framework移除。經(jīng)測(cè)試本步驟不是必須的
(4)在Xcode的Target -> Build Setting -> Other Linker Flags添加如下幾個(gè)配置項(xiàng)
-ObjC -lz -framework Reveal
(5)運(yùn)行項(xiàng)目,然后打開Reveal的界面,在左上角選擇連接的設(shè)備
然后就可以看到實(shí)際的運(yùn)行效果
2、配置方式二(建議使用)
Reveal官方介紹了好幾種辦法使Reveal連接模擬器,都需要修改工程文件。但如果修改了工程文件,就需要參與項(xiàng)目開發(fā)的所有人都裝有Reveal,下面介紹一種比較方便的方式來集成Reveal,步驟如下:
首先打開Terminal,輸入vim ~/.lldbinit創(chuàng)建一個(gè)名為.lldbinit的文件,然后將如下內(nèi)容輸入到該文件中:
command alias reveal_load_sim expr (void*)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2);
command alias reveal_load_dev expr (void*)dlopen([(NSString*)[(NSBundle*)[NSBundle mainBundle]? ? ? ? ? ? ? pathForResource:@"libReveal" ofType:@"dylib"] cStringUsingEncoding:0? ? x4], 0x2);
command alias reveal_start expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter]? ? ? ? ? postNotificationName:@"IBARevealRequestStart" object:nil];
command alias reveal_stop expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter]? ? ? ? ? ? postNotificationName:@"IBARevealRequestStop" object:nil];
該步驟其實(shí)是為lldb設(shè)置了4個(gè)別名,為了后續(xù)方便操作,這4個(gè)別名意義如下:
reveal_load_sim 為模擬器加載reveal調(diào)試用的動(dòng)態(tài)鏈接庫
reveal_load_dev 為真機(jī)加載reveal調(diào)試用的動(dòng)態(tài)鏈接庫
reveal_start 啟動(dòng)reveal調(diào)試功能
reveal_stop 結(jié)束reveal調(diào)試功能
(1)Reveal連接模擬器
在AppDelegate類的application:didFinishLaunchingWithOptions:方法中,做如下3步操作(如下圖所示):
1)點(diǎn)擊該方法左邊的行號(hào)區(qū)域,增加一個(gè)斷點(diǎn),之后右擊該斷點(diǎn),選擇“Edit Breakpoint”。
2)點(diǎn)擊”Action”項(xiàng)邊右的”Add Action”,然后輸入“reveal_load_sim”
3)勾選上Options上的”Automatically continue after evaluating”選項(xiàng)。
(2)Reveal連接真機(jī)
要用Reveal連接真機(jī)調(diào)試,我們需要先把Reveal的動(dòng)態(tài)鏈接庫上傳到真機(jī)上。由于iOS設(shè)備有沙盒存在,所以我們只能將Reveal的動(dòng)態(tài)鏈接庫添加到工程中。
1)點(diǎn)擊Reveal菜單欄的”Help”->”Show Reveal Library in Finder”選項(xiàng),可以在Finder中顯示出Reveal的動(dòng)態(tài)鏈接庫:libReveal.dylib
2)調(diào)整libReveal.dylib的引用方式,這里我們只需要將libReveal.dylib文件拷貝到Sandbox中,但是我們?cè)谝雔ibReveal.dylib的時(shí)候Xcode默認(rèn)是以Link Binary With Libraries的方式的,實(shí)際上應(yīng)該是Copy Bundle Resources,所以應(yīng)該先將libReveal.dylib從Link Binary With Libraries中移除掉,然后在Copy Bundle Resources中添加。
3)按照之前處理模擬器的方式,將AppDelegate類中的斷點(diǎn)Action改成reveal_load_dev.
啟動(dòng)后在控制臺(tái)會(huì)出現(xiàn)如下內(nèi)容:
至此,Reveal成功集成至Xcode中,可以進(jìn)行UI調(diào)試了。