利用 Debug View Hierarchy 研究別人的 App 程式碼

身為一位 iOS App 開發魔法師,研究別人寫的 App 幾乎是逃不過的宿命。然而它卻是件十分辛苦的事。尤其當專案裡的程式碼很多時,光找出某個畫面的 controller 是哪一個類別,某個 button 點選將觸發哪一個 function,就要找到天荒地老。

還好,現在有了 Xcode 的 Debug View Hierarchy 幫忙,我們終於可以笑著研究別人的 App 程式碼。透過它,找出點選 button 觸發的 IBAction function 和控制畫面的 controller 類別都變得容易許多 ! 接下來我們將以一個實際的 App,笑著哭了的書 為例,見識一下 Debug View Hierarchy 的威力。

  1. 執行 App
  2. 點選 Xcode 下方的 Debug View Hierarchy。

Xcode 顯示 App 畫面的 View Hierarchy。

一. 找出點選 button 觸發的 IBAction function。

1. 點選畫面上的 button 小王子。

可將左邊 UIWindow 的樹狀圖展開,了解 button 小王子所在的階層。

2. 打開右邊的 Utilities 頁面,切換到 Object Inspector 分頁(第 3 個 Icon)。此時我們可看到 button 物件的相關資訊,其中 Action 說明了點選 button 後觸發的 function,Target 則是執行此 function 的物件類別。

因此,我們只要點選 Demo.BooksViewController 旁的箭頭,即可跳到 BooksViewController 的程式碼,找尋我們的目標

function openLittlePrince:

二. 找到控制畫面的 controller 類別

  1. 點選畫面的 View 元件後,從右邊的 Object Inspector 分頁得到它的記憶體位址(Address),0x7fc0baa02c50。

2. 在下方的 Console 利用 lldb 的 po 指令印出物件的資訊。

(lldb) po 0x7fc0baa02c50

<UIView: 0x7fc0baa02c50; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x61800003bf60>>

印出 View 物件的資訊

(lldb) po [0x7fc0baa02c50 nextResponder]

<Demo.BooksViewController: 0x7fc0bab03eb0>

利用 [0x7fc0baa02c50 nextResponder] 印出 controller 物件的資訊,從這裡我們明白了控制此頁面的 controller 物件是 BooksViewController。