一個可以實時跟蹤分析iOS App視圖的小工具:RunTrace

jopen 9年前發布 | 16K 次閱讀 RunTrace iOS開發 移動開發

一個可以實時跟蹤分析iOS App視圖的小工具

前言

作為ios的開發者,常常為了UI界面搞得頭破血流,你是不是經常遇到這樣的痛點:這個view是從哪里來的,它的父視圖是什么,它的子視圖有哪些,它的frame會發生什么樣的變化,它怎么突然隱藏了,它什么時候會被釋放掉,對于像自動布局,錯誤常常如潮水般的涌來,我想動態獲取一個view的約束怎么辦,我想知道這個view此時此刻和其他哪些view產生了怎樣的約束,如何才能直觀的表現出這個view的約束呢等等各種各樣的問題,為了幾個 view的正常顯示常常加班加點,痛苦不堪。同是身為ios開發者的我,深有同感。所以,我編寫了此款小工具,作為app內嵌使用,完全解耦,安全方便無副作用,希望大家喜歡。

安裝

安裝十分簡單,將RunTrace目錄下的RunTrace.h,RunTraceHelp.xib,libRunTraceLib.a三個文件移動到你的工程下,或者直接將文件夾拷貝過去即可,如果工程的Build Setting的Other Linker Flags沒有添加-ObjC,則添加上。至此無需寫一行代碼,運行你的app,在界面的右上角,一個可愛的寫著T的淺綠色圓形按鈕便出現。

禁用

因為這個工具是給開發者調試用的,所以正式發布的時候肯定是需要禁用的,禁用不需要移除文件,在RunTrace.h里將RunTraceOpen宏的值改為0即可。

使用

獲取view的基本信息

將圓形按鈕拖到你想獲取信息的view上即可,它可以獲取你想要的任何view,無論是tabitem上的,還是navigationitem上,甚至uiwindow上的,你都可以獲取到。

獲取view的父視圖和子視圖

想看看這個view的父視圖或者子視圖有哪些,將圓形按鈕拖到你想獲取信息的view上,點擊頂部的信息欄,便會彈出一個窗口,這個窗口上列舉出了這個view的父視圖(按照以此往上的順序)和子視圖(按照由內向外的順序),點擊一下便會在頁面上高亮顯示(如果該父視圖或者子視圖是自動布局,便會跳轉到自動布局列表),還有當前的視圖是否是自動布局,以及信息欄是置頂顯示還是置底顯示,最后還有一個支持按鈕,感覺不錯可以贊助一下:)

顯示自動布局信息

獲取你想要的view,在彈出窗口里,如果該view是自動布局,便會有detail按鈕,點擊按鈕,顯示自動布局列表,點擊列表,相應的約束在頁面上高亮顯示,同理在view的父視圖和子視圖列表,你同樣可以點擊列表顯示該視圖的自動布局,是不是爽歪歪啊~

追蹤view的狀態

很多時候,我們實時跟蹤一個view的狀態和屬性,比如它的frame的變化,它的center的變化,它的superview的改變,它的 subview的改變,它的contentSize的改變等等變化,現在一個按鈕即可實現你想要的。點擊彈出窗口上的Trace按鈕,即可追蹤該view 的狀態,view的更新信息全部都在log列表里,當你點擊stop的時候,便回到了原先的彈出窗口。同理在view的父視圖和子視圖列表,你左劃列表,點擊Trace按鈕,同樣可以實現對父視圖和子視圖的追蹤。

監測內存泄露

沒有聽錯吧,它可以監測內存泄露,是的,那么如何來做呢,你push進一個viewController的時候,隨便追蹤一個view的狀態,然后 pop回來,如果內存正常會彈出RemoveFromSuperview的提示框,如果沒有彈出,說明那個viewController發生了內存泄露。

原理

說完了大致運用,我們來簡單說說原理,原理就是首先Method Swizzling修改很多方法的入口,加入我們想要的東西,比如那個圓形小按鈕,然后通過view的hittest來獲取我們想要的view,對 view的相關屬性kvo便可以跟蹤它的一些狀態啦。其實原理并不難,但是細節很麻煩,尤其是在寫自動布局約束展現的時候需要判斷的東西很多。另外大家在使用的時候可以放心,對于app原生界面上的view我都使用了weak引用,不會影響到你的代碼。

后記

支付寶賬號:395414574@qq.com 你的支持,是我夜以繼日完善這個工具的很大動力,如果您的條件允許,同時覺得這個工具有幫助到你,可以小小贊助下,不在多,重在心意。

QQ群:460483960 這是我們的ios項目的開發者qq群,這是一個純粹的ios開發者社區,里面匯聚了眾多有經驗的ios開發者,沒有hr和打擾和廣告的騷擾,為您創造一個純凈的技術交流環境,如果您對我的項目以及對ios開發有任何疑問,都可以加群交流,歡迎您的加入~

項目主頁:http://www.baiduhome.net/lib/view/home/1442991808607

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