標籤:
轉:http://security.ios-wiki.com/issue-3-4/Reveal簡介
Reveal是分析iOS應用UI的利器:
Reveal能夠在運行時調試和修改iOS應用程式。它能串連到應用程式,並允許開發人員編輯各種使用者介面參數,這反過來會立即反應在程式的UI上。就像用FireBug調試HTML頁面一樣,在不需要重寫代碼、重新構建和重新部署應用程式的情況下就能夠調試和修改iOS使用者介面。--InfoQ
Reveal運行在Mac上,目前的最新版本是1.0.4,可以從這裡下載,要求Mac OS X 10.8及以上,iOS 6以及以上。
現在正式版本可以下載試用30天,試用期後需要購買。有需要的話可以買一個,功能相當強大。
Reveal的功能查看iOS應用的View階層
使用Reveal的效果
圖中最左側可以看到View的名稱,中間是View的3D展示效果,可以非常清楚的看到View的階層。
修改參數後無需編譯即可看到效果
Reveal另一個非常有用的功能就是動態修改參數,無需編輯動態查看效果。如所示:
顯示出UILabel和UIView的關鍵屬性值,更重要的是,這些都可以動態修改,比如我們改成測試,如:
把其中的圖片的寬度從80改成50,改之後的效果
箭頭所指向的對方都可以動態修改。
關於Reveal的更多功能,歡迎大家去探索並分享。下面介紹Reveal如何整合到iOS應用中去調試。
Reveal的3種載入方法載入方法(1)
下載Reveal之後開啟,在菜單中的Help中可以找到整合到Xcode項目的方法,這裡不再贅述。
載入方法(2)
Integrating Reveal without modifying your Xcode project
reveal: 檢視 iOS app 的 view 結構。
給出了如何不用修改Xcode工程就可以載入使用Reveal的方法。
在目前使用者目錄建立一個檔案.lldbinit,位於~/.lldbinit,LLDB每次啟動的時候都會載入這個檔案。
在.lldbinit中輸入如下內容:
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:0x4], 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];
上述檔案建立了4個命令:
reveal_load_sim,reveal_load_dev, reveal_start 和 reveal_stop
reveal_load_sim 這個只在iOS模擬器上有效。它從Reveal的應用程式bundle中找到並載入libReveal.dylib(請確保你把Reveal安裝到了系統的Application檔案夾,如果你換地方了,你修改上述的檔案)。
reveal_load_dev 這個命令在iOS裝置和模擬器上都有效。不過,它需要你在Build Phase中的的Copy Bundle Resources中加上libReveal.dylib,請確保沒有放到Link Binary With Libraries這個地方。
reveal_start 這個命令發出一個通知啟動Reveal Server。
reveal_stop 這個命令發出一個通知停止Reveal Server。
請注意:只有在iOS應用發出了UIApplicationDidFinishLaunchingNotification通知之後,比如應用的delegate已經處理過application::didFinishLaunchingWithOptions:之後才能調用上面的reveal_load_*命令,然後再調用reveal_start
在裝置起來之後,你就可以斷下應用,在LLDB提示框中輸入上述的命令了。
上述的過程還需要手動輸入,下面介紹如何設定條件斷點,使得Reveal在啟動之後自動載入。
在你的應用的application:didFinishLaunchingWithOptions 中的代碼出加一個斷點,然後右鍵,選擇編輯斷點。
輸入如一樣的命令:
重新運行下應用,如果控制台輸出了如下資訊:
Reveal server started.
說明Reveal已經自動成功載入。
載入方法(3)
Reveal查看任意app的進階技巧介紹了如何在越獄裝置上查看任意app的技巧:
小結
本文簡要介紹了Reveal的功能和幾種載入方法。歡迎大家去體驗下Reveal的強大功能。最後,可以看看關於Reveal的tips:Reveal tips: Navigation。
Reveal:分析iOS UI的利器