
做iOS的開發(fā),UI是非常非常重要的一環(huán)。調(diào)試時我們一般用模擬器,提交前用真機做測試。用模擬器來調(diào)試UI效果雖然快捷方便,但有時仍然希望有更強大的工具來幫助分析UI,尤其是專注在UI的效果調(diào)試時。最近看到了Reveal這個工具,發(fā)現(xiàn)真的是強大無比,類似于FireFox上的FireBug,對于UI上的層的顯示很清晰直觀,可以很方便的用于UI的調(diào)試,用來學(xué)習(xí)UI的使用也是無上利器。
【Reveal軟件說明】
要調(diào)試iOS應(yīng)用,開發(fā)者要將應(yīng)用程序與Reveal安裝的框架層關(guān)聯(lián)。Reveal會掃描其網(wǎng)絡(luò)中關(guān)聯(lián)的應(yīng)用程序,并讓開發(fā)者選擇連接其中之一,當連接到一個應(yīng)用程序后,Reveal將顯示其UI,其中包括大量的參數(shù)和設(shè)置。開發(fā)人員現(xiàn)在可以檢查UI或者更改設(shè)置,直到用戶界面的外觀和行為達到預(yù)期目標。目前它尚不支持布局約束,但根據(jù)Reveal的支持文檔來看,這一功能將在未來的版本中發(fā)布。Reveal可以和iOS模擬器一起使用,也可以用在運行在真機上的應(yīng)用程序上。另外,Reveal的安裝只需幾分鐘。除了解析出UI參數(shù)外,Reveal也會通過一個分解的3D視圖顯示復(fù)雜的UI層次結(jié)構(gòu)。開發(fā)者可以輕松的檢查UI組件的分層,并在其層次結(jié)構(gòu)中選擇特定元素。為了進一步簡化調(diào)試,也可以僅關(guān)注部分UI,而把其余部分屏蔽起來。
【Reveal安裝教程】
安裝Reveal不算復(fù)雜,要把Reveal用到工程中則需要把framework或者dylib編入。
1. 打開Xcode工程
2. 打開Revel工具,選擇Menu->Help->Show Reveal Library in Finder,這樣就會打開RevealApp里面帶的庫
3. 把Reveal.framework加入工程,在彈出框中選中Copy items into destination group’s folder (if needed).
4.在工程設(shè)置中,在Other Linker Flags項增加-ObjC -framework Reveal
如果你使用的還是Xcode4,那么還需要增加-frame CFNetwork -frame QuartzCore -framework CoreGraphics
5. 運行你的應(yīng)用,應(yīng)用可以是在模擬器上,也可以在真機上,不過必須保證Reveal和你的設(shè)備在同一個網(wǎng)絡(luò)里面,然后選擇Reveal里面的鏈接目標,連上應(yīng)用后UI就會顯示出來,每個層次,每個元素都可以顯示,而且可以選中了看到數(shù)據(jù)。

我這里做的說明是把Reveal作為靜態(tài)庫鏈接到應(yīng)用中的,也可以作為動態(tài)庫來載入,當然,設(shè)置略微有點不同,需要在AppDelegate.m文件中增加載入和移除的代碼。
【查看任意app的高級技巧】
Reveal是一個很強大的UI分析工具,與其他幾個功能相近的工具(比如PonyDebugger)相比,其最大的特點就是非常直觀,用來查看app的UI布局非常方便。其常規(guī)用法是將framework集成至Xcode工程中,可參見Reveal的官網(wǎng),但我們這次講述的卻是非常規(guī)用法。
在12/21的#阿里技術(shù)嘉年華#上,我給聽眾展示了使用Reveal查看任意app的效果,估計是當時所展示的工具中最亮眼的一個。既然如此,我就提前在這里把Reveal的這個技巧詳細的列出來。
1、越獄設(shè)備,iPhone/iTouch/iPad都可以,iOS6以上(驚聞iOS7也已經(jīng)越獄了);
2、安裝Reveal,Trail或正式版都可以,然后越獄設(shè)備與安裝Reveal的Mac在同一wifi內(nèi)。
3、點擊菜單Help / Show Reveal Library in Finder,獲取libReveal.dylib
4、將libReveal.dylib上傳到設(shè)備的/Library/MobileSubstrate/DynamicLibraries
5、同時編輯并上傳一個libReveal.plist,格式如下:

注意,此時是可以指定多個BundleID的,也就是說,你可以同時監(jiān)控任意多的app;再擴大一步說,如果你愿意,不上傳這個libReveal.plist,你可以監(jiān)控所有app,只要你不覺得機器很慢。。。
6、re-spring或重啟iOS設(shè)備,打開你想看的app,再從Reveal界面左上角選擇要連接的機器,進入不同的頁面之后還可以點擊右上角的刷新鈕來刷新監(jiān)測的頁面信息。
以上是不寫一行代碼就能夠查看任意app的方法,各位看別人app爽的時候,也可以摸摸脖子想想自己的app。
這種“高級技巧”從來沒有被Reveal官方提起過,而是我們接觸到Reveal之后逐步發(fā)現(xiàn)的。一開始的方法比較粗暴,是直接hook想看的app,把libReveal.dylib插進去;后來經(jīng)過@盧明華 的進一步探索,才總結(jié)出這個更簡單粗暴的方法。
雖然Reveal是最直觀的一個工具,但是在iOS逆向這個領(lǐng)域,它占的比重連1/10都不到,真正的大塊頭都有點難啃,相信各位都是理解的。
最后,相信我們的書出來之后,會給朋友們更多深度撞擊的感覺。

































