界面調(diào)試工具Reveal的使用

前言

Reveal(https://revealapp.com)是一個iOS程序界面調(diào)試工具。使用Reveal,我們可以在iOS開發(fā)時動態(tài)的查看和修改應(yīng)用程序的界面。

在開發(fā)中,對于動態(tài)或者復(fù)雜的交互界面,手寫UI的不可避免的。通過Reveal,我們可以很方便的調(diào)試和修改應(yīng)用頁面,免去了每次修改之后還要重新啟動程序的痛苦。


一. Reveal簡介

Reveal類似Chrome的“審查元素”功能,使我們不但可以在運行時看到iOS程序的界面層級關(guān)系,還可以實時的修改程序界面,不用重新運行程序就可以看到修改之后的結(jié)果。

在使用時,我們將Reveal連接上模擬器或真機上正在運行的iOS程序,然后就可以查看調(diào)試iOS程序的界面。

下圖是Reveal的運行界面,其界面主要分成三個部分:

1. 左邊部分是整個界面的層級關(guān)系,在這里可以以樹形層級的方式查看所有的界面元素。

2. 中間部分是可視化查看區(qū)域,用戶可以在這里切換2D或者3D的查看方式,這里也能看到程序運行的實時界面。

3. 右面部分是控件詳細(xì)的參數(shù)查看區(qū)域,當(dāng)我們選中其中某個控件的時候,右邊就可以顯示出該控件的詳細(xì)參數(shù)列表。除了在查看這些參數(shù)值以外,還可以修改這些值,所有的修改會實時的反應(yīng)到中間的預(yù)覽區(qū)域。


二. Reveal的使用

Reveal官方介紹的方法大多數(shù)需要修改工程文件,由于目前團隊開發(fā)居多,那么如果修改了工程文件,就需要團隊中其他人也都裝Reveal,這是很不友好的。下面介紹不修改任何工程文件的情況下完成對模擬器和真機的調(diào)試方法。

2.1 創(chuàng)建.lldbinit文件,并編輯

打開終端,輸入 vi ~/.lldbinit,創(chuàng)建一個.lldbinit文件,然后將如下內(nèi)容輸入到該文件中,并:wq保存退出。

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];

該步驟其實是為lldb設(shè)置了4個別名,這樣可以方便后續(xù)操作,這4個別名意義如下:

reveal_load_sim 為模擬器加載reveal調(diào)試用的動態(tài)鏈接庫。

reveal_load_dev 為真機加載reveal調(diào)試用的動態(tài)鏈接庫。

reveal_start 啟動reveal調(diào)試功能。

reveal_stop 停止reveal調(diào)試功能。

注:reveal_load_sim等別名可以根據(jù)自己的喜好設(shè)置。

2.2 模擬器調(diào)試

在AppDelegate類的application: didFinishLaunchingWithOptions:方法中,進行如下三個步驟:

1. 在方法內(nèi)部第一行增加一個斷點,并編輯該斷點“Edit Breakpoint”;

2. 單擊“Action”右面的“Add Action”按鈕,然后輸入模擬器加載動態(tài)庫的別名:“reveal_load_sim”;

3. 勾選“Option”上的“Automatically continue after evaluating actions”選項

設(shè)置調(diào)試模擬器斷點

之后運行iOS程序,并打開Reveal,在Reveal界面的左上角看到是否有模擬器可以連接調(diào)試,如果有選擇它,查看并調(diào)試iOS程序。

Reveal模擬器調(diào)試界面

2.3 真機調(diào)試

在開發(fā)中,大部分的調(diào)試設(shè)備是沒有越獄的設(shè)備,那么使用Reveal來調(diào)試UI的步驟稍微復(fù)雜一些的。

要用Reveal連接真機調(diào)試,需要把Reveal動態(tài)鏈接庫上傳到真機上,由于iOS設(shè)備有沙盒存在,那么只能將Reveal的動態(tài)鏈接庫添加到工程中,步驟如下:

1. 選擇Reveal菜單欄中的“Help” -> “Show Reveal Library in Finder” -> “iOS Library”。

找到Reveal中iOS動態(tài)鏈接庫

2. 找到iOS動態(tài)鏈接庫libReveal.dylib庫

libReveal.dylib庫

3. 把libReveal.dylib庫拖入到工程如圖位置中

libReveal.dylib庫位置

注:libReveal.dylib庫必須在 “Copy Bundle Resources” 下,如果在“Link Binary With Libraries”中,必須刪除。

4. 導(dǎo)入時選擇“Copy items if needed”選項

Copy items if needed”選項

5. 由于連接模擬器的方式和連接真機方式類似,只需要吧AppDelegate斷點Action內(nèi)容從reveal_load_sim改為reveal_load_dev即可。

6. 添加Reveal運行腳本選項

添加腳本選項

7. 添加腳本內(nèi)容

添加腳本內(nèi)容

腳本內(nèi)容如下:

set -e

if [ -n "${CODE_SIGN_IDENTITY}" ]; then

codesign -fs "${CODE_SIGN_IDENTITY}" "${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}/libReveal.dylib"

fi

8. 真機調(diào)試

真機調(diào)試成功

2.4 真機調(diào)試說明

1. 真機調(diào)試必須保證開發(fā)者電腦和手機都在統(tǒng)一wifi環(huán)境下;

2. 開發(fā)者證書必須和鑰匙串中證書保持一致,而且只有一個,因為Reveal只能識別一個證書,如果在鑰匙串中有多個以iPhone Developer開頭的證書,先刪除其他的,否則調(diào)試可能會不成功。

工程中的證書
鑰匙串中的證書

三.總結(jié)

除了Reveal還有其他的調(diào)試工具,如PonyDebugger(https://github.com/square/PonyDebugger),也可以調(diào)試iOS應(yīng)用界面,是免費而且是開源的,Reveal是收費的,不過功能相對強大。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Reveal是iOS開發(fā)工具中的神器之一,它能夠在應(yīng)用程序運行過程中調(diào)試應(yīng)用程序界面。 通過Reveal我們可以連...
    jackfrued閱讀 12,667評論 2 48
  • Reveal Reveal是分析、調(diào)試iOS應(yīng)用UI的利器。 Reveal能夠在運行時調(diào)試和修改iOS應(yīng)用程序。它...
    fakepinge閱讀 1,813評論 0 5
  • 最近不是特別忙閑來無事,研究一下,上網(wǎng)一看好的教程,但是都不是最新的,而且根據(jù)網(wǎng)上的教程坐下來根本就不行,直接上官...
    Zax_Smile閱讀 9,900評論 6 15
  • 為一樹金桂遮雨 只因你喜愛花香的馥郁 為一片星光輾轉(zhuǎn) 只因你向往銀河的璀璨 為一匹烈馬試鞍 只因你渴望馳騁的快感 ...
    璇紫閱讀 380評論 2 4
  • 兒時,總覺得長大了會幸福吧 于是我們拼命的想要長大, 可是,當(dāng)你真正長大之后, 才發(fā)現(xiàn),原來長大意味著永遠失去那種...
    檸檬燈塔閱讀 384評論 0 1

友情鏈接更多精彩內(nèi)容