Reveal:分析iOS UI的利器

來源:互聯網
上載者:User

標籤:

轉: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的技巧:

  • iOS裝置需要越獄,iOS6以上
  • 安裝Reveal,越獄裝置與安裝Reveal的Mac在同一wifi內。
  • 點擊菜單Help / Show Reveal Library in Finder,擷取libReveal.dylib
  • 將libReveal.dylib上傳到裝置的/Library/MobileSubstrate/DynamicLibraries
  • 編輯並上傳一個libReveal.plist,格式和/Library/MobileSubstrate/DynamicLibraries下面的其他plist類似,其中的filter的bundle寫要查看的iOS App的bundle Id。 格式如下:

    { Filter = { Bundles = ( "你要查看的app的bundle Id" ); }; }

  • 重啟iOS裝置

小結

本文簡要介紹了Reveal的功能和幾種載入方法。歡迎大家去體驗下Reveal的強大功能。最後,可以看看關於Reveal的tips:Reveal tips: Navigation。

Reveal:分析iOS UI的利器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.