Reveal-iOS頁面調試利器

SabrinaMosl 8年前發布 | 7K 次閱讀 iOS開發 移動開發

一、Reveal 簡介

Reveal 是一個 iOS UI 調試工具,使用 Reveal 可以在應用運行時方便的查看頁面的層級結構,此外,可以在 Reveal 中動態的修改頁面中各個控件的背景色、字體大小(可以顯示字體的控件,如 UILabel)等樣式,并且不需要重新運行程序就可以在 Reveal 中實時看到修改后的效果。

Reveal 既可以查看模擬器上運行的應用程序的頁面結構,也可以查看真機上運行的程序的頁面結構。

二、下載 Reveal

官網地址: Reveal官網

三、Reveal 連接模擬器調試

Reveal 官方推薦使用方法中需要修改工程文件,為了減少團隊協作開發引起的沖突,應盡量減少工程文件的修改,此處使用不修改工程文件的方式使用 Reveal。Reveal 連接模擬器調試的步驟如下:

1. 新建 .lldbinit 文件

在 Home 目錄(就是 ~ 目錄)下新建 .lldbinit 文件,然后加入下面的內容:

command alias swift_reveal_load_sim expr dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 2)
command alias swift_reveal_load_dev expr dlopen(NSBundle.mainBundle().pathForResource("libReveal", ofType: "dylib")!, 2)
command alias swift_reveal_start expr NSNotificationCenter.defaultCenter().postNotificationName("IBARevealRequestStart", object: nil)
command alias swift_reveal_stop expr NSNotificationCenter.defaultCenter().postNotificationName("IBARevealRequestStop", object: nil)
command alias objc_reveal_load_sim expr (void*)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2);
command alias objc_reveal_load_dev expr (void*)dlopen([(NSString*)[(NSBundle*)[NSBundle mainBundle] pathForResource:@"libReveal" ofType:@"dylib"] cStringUsingEncoding:0x4], 0x2);
command alias objc_reveal_start expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:nil];
command alias objc_reveal_stop expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStop" object:nil];
  • swift_reveal_load_sim

為模擬器加載 Reveal 的動態鏈接庫,以便可以用 Reveal 動態調試模擬器運行的應用程序的頁面結構。用于 Swift 代碼的工程;

  • swift_reveal_load_dev

為真機加載 Reveal 的動態鏈接庫,以便可以用 Reveal 動態調試模擬器運行的應用程序的頁面結構。用于 Swift 代碼的工程;

  • swift_reveal_start

啟動 Reveal 調試功能;

  • swift_reveal_stop

結束 Reveal 調試功能;

  • objc_reveal_load_sim

作用與 swift_reveal_load_sim 相同,只不過該命令用于 Obejective-C 代碼的工程;

  • objc_reveal_load_dev

作用與 swift_reveal_load_dev 相同,只不過該命令用于 Obejective-C 代碼的工程;

  • objc_reveal_start

作用與 swift_reveal_start 相同,只不過該命令用于 Obejective-C 代碼的工程;

  • objc_reveal_stop

作用與 swift_reveal_stop 相同,只不過該命令用于 Obejective-C 代碼的工程;

2. 配置斷點

在 AppDelegate application:didFinishLaunchingWithOptions: 方法的中,按如下操作:

(1) 在 application:didFinishLaunchingWithOptions: 方法第一行代碼前面點擊行號添加一個斷點,如下圖:

(2) 右鍵點擊斷點,選擇 "Edit Breakpoint",如下圖:

(3) 點擊 "Add Action",然后在 action 下面填入: objc_load_reveal_sim ,注意填入的命令和實際需求有關,這里是要用 Reveal 調試模擬器上的 Objective-C 應用,所以選用了 objc_load_reveal_sim 。此外,需要勾選中:Options 中的 "Automatically continue after evaluating actions"。

3. 運行工程,打開 Reveal 聯調

在模擬其中選中一個需要調試的頁面,打開 Reveal,在左上角位置選中設備后,即可調試當前頁面,當 Reveal 顯示出頁面結構后,可以選中頁面中的任意控件,在 Reveal 右側的檢查器中查看屬性值;此外,可以在檢查器中修改屬性值,并且可以實時看到屬性修改后的樣式。

注意:運行工程時,注意運行在模擬器還是真機應該與上一步驟中斷點添加的 action 對應。

四、Reveal 連接真機測試

使用 Reveal 調試應用程序需要使用到 Reveal 的動態鏈接庫,由于真機上并沒有 Reveal 動態鏈接庫,所以我們需要將其拷貝到真機上,但是真機的應用程序有沙盒,所以我們只能將動態鏈接庫放入到工程的 "Copy Bundle Resources" 中,具體操作如下:

(1) 打開 Reveal -> 頂部菜單欄 Help -> Show Reveal Library in Finder -> iOS Library

(2) 將 "libReveal.dylib" 拷貝到工程的 Frameworks group 下(當然也可以放在其他 Group 下,比如 Supporting Files),注意如果是將 "libReveal.dylib" 拖拽到工程,需要選中 "Copy items if needed"。

(3) 進入 Target -> Build Phases -> Link Binary With Libraries,將 "libReveal.dylib" 從 "Link Binary With Libraries" 中刪除,并將其添加到 Target -> Build Phases -> Copy Bundle Resources 中。

(4) 將"第三步-Reveal 連接模擬器調試"中設置的斷點的 action 修改為 objc_load_reveal_dev ,將程序運行在真機上后,即可打開 Reveal 在左上角選擇真機設備進行頁面調試;注意:電腦和手機設備必須處于同一個局域網內,才能使用 Reveal 調試真機應用程序的頁面,這一點非常關鍵,此外如果在真機時無法正常使用 Reveal 調試(比如無法編譯運行,運行后無法查看到頁面結構)可以參考下一步說明。

(5) 如果第四步無法正常運行,可以在 Target -> Build Phases -> 添加一個 Run Script,并將以下內容填入:

set -e

if [ -n "${CODE_SIGN_IDENTITY}" ]; then codesign -fs "${CODE_SIGN_IDENTITY}" "${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}/libReveal.dylib" fi</code></pre>

這段代碼是對 libReveal.dylib 進行簽名,因為 iOS 的安全機制,程序只能運行簽過名的代碼,所以這里進行一次簽名,再次執行第四步即可。

五、進階-使用 Revel 查看任意應用頁面結構

在我們看到某個應用復雜頁面時,有時會想要了解這個頁面的結構是什么樣子,這時 Reveal 就可以派上用場了。使用 Reveal 可以查看任意應用的頁面結構,但是前提是必須要有越獄的 iOS 設備。下面介紹在越獄設備上查看任意應用頁面結構的最簡潔的方法。

1. 前提

  • 必須要有越獄的 iOS 設備;
  • iOS 設備必須與電腦處于同一個局域網;
  • 電腦需要安裝 Reveal

2. 配置越獄設備

(1) 打開 Cydia,等待 Cydia 數據更新完成;

(2) 點擊搜索 Reveal Loader,并進行安裝,如下圖:

(3) 安裝完成后,系統會提示需要重啟 SpringBoard,重啟后進入系統設置,在設置中找到 Reveal,然后進入 Enabled Applications 頁面,如下圖:

選中需要使用 Reveal 查看的 App。

3. 查看應用的頁面結構

經過第2步,且 iOS 設備與電腦處于同一局域網時,即可打開 iOS 設備上的在第2步勾選的應用,然后打開電腦的 Reveal,在左上角選擇設備進行頁面結構的查看,如下圖:

六、參考文檔

  1. iOS逆向工程之Reveal工具的安裝、配置與使用

  2. iOS開發中集成Reveal

 

來自:http://www.jianshu.com/p/de9a83ed3f83

 

 本文由用戶 SabrinaMosl 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!