Reveal使用原則

# **Reveal使用手冊**

 

## **痛點**

- 移動開發這一塊做的最多的無疑就是UI和交互,而UI調試也是移動開發人員經常乾的一苦逼事。雖然目前iOS開發工具Xcode集成了UI調試功能(Debug View Hierarchy),但帶給我們的卻只有失望。

## **簡介**

- Reveal 是我們調試UI的利器,他避免了每次調試UI時一旦修改UI就需要重新cmd+R重新運行的麻煩操作,我們只需要接入Reveal,然後在Reveal操作界面修改UI屬性,可以直接反應在運行的App中!如下圖的Reveal主界面,最左邊反應樹形UI視圖層級,中間是一個3D的UI顯示層級,右邊類似我們在使用xib時選中某個元素可以修改元素的各種屬性的操作,修改完成後無需運行直接反應在我們的模擬器或者真機上面!方便極了

 

![uAcD3R.png](https://s2.ax1x.com/2019/09/24/uAcD3R.png)

 

## **集成方式**

### **Framework集成** (會導致App包體積增加,不建議)

### **Framework集成弊端**

- 因爲用這種方式集成的弊端就是在於,你還要配置project的other linker Flags,還要注意不要在打包發佈的時候也一起打包進去了。而且每個項目都要去加入Reveal的framework,並且配置other linker Flags。

 

```

use_frameworks!

 

platform :ios, '9.0'

 

target 'RevealDemo' do

 

  pod 'Reveal-SDK', '~> 2',:configurations => ['Debug']

 

end

```

## **模擬器調試**

### **1.添加斷點按鈕,添加一個Symbolic BreakPoint**

[![uExPkF.png](https://s2.ax1x.com/2019/09/25/uExPkF.png)](https://imgchr.com/i/uExPkF)

### **2.輸入Symbol:UIApplicationMain**

[![uExwtg.png](https://s2.ax1x.com/2019/09/25/uExwtg.png)](https://imgchr.com/i/uExwtg)

### **3.Add Action**

[![uExXND.md.png](https://s2.ax1x.com/2019/09/25/uExXND.md.png)](https://imgchr.com/i/uExXND)

 

* **version 1.6.3(5790)**

* **模擬器**

```

expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void )dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2) : ((void)0);

```

* **真機**

```

expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void *)dlopen((char *)[(NSString *)[(NSBundle )[NSBundle mainBundle] pathForResource:@"libReveal" ofType:@"dylib"] cStringUsingEncoding:0x4], 0x2) : ((void)0;

```

 

* **version 4 (8769)**

* **模擬器**

```

expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void )dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/RevealServer.framework/RevealServer", 0x2) : ((void)0);

```

* **真機**

```

(Class)NSClassFromString(@"IBARevealLoader") == nil ? (void)dlopen((char)[(NSString)[(NSString)[(NSBundle)[NSBundle mainBundle] pathForResource:@"RevealServer" ofType:@"framework"] stringByAppendingPathComponent:@"RevealServer"] cStringUsingEncoding:0x4], 0x2) : ((void)0);

```

 

### **4.選中Automatically continue after evaluating actions.**

[![uVpZXn.png](https://s2.ax1x.com/2019/09/25/uVpZXn.png)](https://imgchr.com/i/uVpZXn)

 

### **5.至此如果是模擬器的話,直接cmd+R,即可!**

[![uVCDOA.png](https://s2.ax1x.com/2019/09/25/uVCDOA.png)](https://imgchr.com/i/uVCDOA)

 

# **LLDB集成**(推薦)

- LLDB集成的優勢就是在於不用擔心打包會把Reveal的framework也打包進去的問題。而且本地配置好了,只要在這臺機器上任何項目都通用。

- 使用LLDB命令集成其實也很簡單,大體分爲如下兩步。

 

## **第一步 點擊pause program execution,暫停app。**

[![uVAAUI.png](https://s2.ax1x.com/2019/09/25/uVAAUI.png)](https://imgchr.com/i/uVAAUI)

## **第二步 依次輸入兩條命令即可,分別如下:**

### **第一條命令**

```

expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void *)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2) : ((void*)0)

```

 

```

ps:/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib這個地址爲絕對路徑,我的Reveal是存放於application目錄下的,所以路徑就是/Applications/Reveal.app/.....

```

### **第二條命令**

```

expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:nil];

```

- 兩條命令順利的話,控制檯則會打印INFO: Reveal Server started (Protocol Version 25).這條信息。(如下圖)

[![uVAzon.md.png](https://s2.ax1x.com/2019/09/25/uVAzon.md.png)](https://imgchr.com/i/uVAzon)

- 如果最後未能正常輸出INFO: Reveal Server started,那你就要好好檢查一下第一條命令裏的dlopen裏包含的路徑是否正確了。

- 最後,你在點擊continue按鈕或者在控制檯裏繼續輸入c字符然後回車,讓程序結束暫停即可。

- 現在,你在打開你的Reveal,在你的左上角點擊No Connection,瞅瞅,是否有你的app啦。

 

## **.lldbinit裏設置別名**

- 每次需要Reveal來審查UI的時候都要輸入這兩條看着如此蛋疼的命令。so... 幸運的是我們可以在~/目錄下的.lldbinit文件裏爲我們的LLDB命令添加別名。

- 首先,簡單科普一下吧。.lldbinit是一個隱藏文件,貌似默認是沒有的。而Xcode每次啓動的時候,則都會去~/.lldbinit這個目錄尋找這個文件裏的LLDB命令。所以我們可以在這個文件裏進行一些命令的初始化設置或者設置別名等等

- 現在,我們打開終端,在終端裏輸入touch ~/.lldbinit命令來進行創建。然後在輸入open ~/.lldbinit命令。則就會以文本編輯器打開此文件。然後再把如下字符複製到文本編輯器裏即可:

 

```

command alias icome_reveal_load_sim expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void *)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2) : ((void*)0)

 

command alias icome_reveal_start expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:nil];

```

- command alias 其格式爲:command alias 別名 LLDB命令,因此如上icome_reveal_start和icome_reveal_load_sim就是我設置的別名。也可以替換成你們自己喜歡的名字

 

- 然後,現在在按照如上LLDB集成的步驟,運行項目,暫停app,這時候你在輸入icome_reveal_load_sim然後在輸入icome_reveal_start即可在Reveal裏審查你的UI元素了。(如下圖)

[![uVVNB4.png](https://s2.ax1x.com/2019/09/25/uVVNB4.png)](https://imgchr.com/i/uVVNB4)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章