RunTrace 1.2

RunTrace 1.2

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2015年10月

ansun维护。



  • sx1989827

一个可以实时跟踪分析iOS App视图的小工具(已开源)

前言

作为一名iOS开发者,我们常常因为UI界面而苦恼,你是否经常遇到这样的问题:这个视图是从哪里来的,它的父视图是什么,它的子视图有哪些,它的frame会发生什么样的变化,它如何突然隐藏,它什么时候会被释放,对于如自动布局这样的问题,错误常常如洪水般涌来,我想动态获取一个视图的约束怎么办,我想知道这个视图此时此刻与其他视图产生了怎样的约束,如何直观地展示这个视图的约束等等各种各样的问题,为了几个视图的正常显示常常加班加点,痛苦不堪。作为iOS开发者的一员,我深有同感。因此,我编写了这款小工具,作为app内嵌使用,完全解耦,安全方便无副作用,希望大家会喜欢。

更新

已更新至1.1,弹出窗口完全重写,交互性更好,操作比之前更简单,同时增加了view stack和hit功能,提升了用户体验,修复了少量bug,保证了稳定性。

安装

1.将RunTrace目录下的RunTrace.h,RunTraceHelp.xib,libRunTraceLib.a三个文件移动到您的工程下,或者直接将文件夹复制过去即可。至此无需编写一行代码,运行您的app,在界面的右上角,一个可爱的写着T的浅绿色圆形小按钮就会出现。

2.如果您使用了cocoapods,那么在podfile中添加pod "RunTrace"即可。

禁用

因为这个工具是供开发者调试使用的,所以在正式发布时肯定需要禁用,禁用不需要移除文件,在RunTrace.h中将RunTraceOpen宏的值更改为0即可。

使用

获取View的基本信息

将圆形按钮拖到您想要获取信息的视图上,它可以获取您想要的任何视图,无论是tabitem上的,还是navigationitem上的,甚至是uiwindow上的,您都可以获取。点击顶部的信息栏,便会弹出一个窗口,在General列表中会列出视图的基本信息。

获取View的父视图和子视图

想查看这个视图的父视图或子视图有哪些?将圆形按钮拖到您想要获取信息的视图上,点击顶部的信息栏,便会弹出一个窗口,在SuperViews和SubViews列表中列举出了这个视图的父视图(按照从上至下的顺序)和子视图(按照由内向外的顺序),点击便会列举出该视图的信息,右上角有一个back按钮,点击便可以一层层回到原先的视图。当您不知道当前获取的是哪个视图的信息时,hit按钮可以帮助您快速定位到当前正在查看的是哪个视图。

显示自动布局信息

获取您想要的视图,在弹出窗口中,在Constrains列表中显示视图的自动布局约束,点击列表,相应的约束在页面上高亮显示。

追踪View的状态

很多时候,我们需要实时跟踪一个视图的状态和属性,比如它的frame的变化、它的center的变化、它的superview的改变、它的subview的改变、它的contentSize的变化等等变化,现在一个按钮就可以实现您想要的。点击弹出窗口上的Trace列表中的Start按钮,即可追踪该视图的状态,视图的更新信息全部都在列表中,当您点击stop时,便会停止追踪。

监测内存泄露

没错,它还可以监测内存泄露,那么如何来做呢?当您push进一个viewController时,随意获取一个视图的信息,然后pop回来,如果内存正常会弹出RemoveFromSuperview的提示框,如果没有弹出,说明那个viewController发生了内存泄露。

原理

讲述了大致的使用方法后,我们来简单谈谈原理,原理就是在很多方法入口加入我们想要的内容,比如那个圆形小按钮,然后通过视图的hittest来获取我们想要的视图,对视图的相关属性kvo来跟踪它的一些状态。其实原理并不难,但是细节很复杂,尤其是在写自动布局约束展示时需要判断很多东西。另外,大家在使用时可以放心,对于app原生界面上的视图,我都使用了weak引用,不会影响到您的代码。

后记

支付宝账号:[email protected] 您的支持是我夜以继日完善这个工具的动力,如果您的条件允许,同时觉得这个工具对您有帮助,可以小额赞助,重在心意。

QQ群:1群:460483960(目前已满) 2群:239309957 这是我们的iOS项目开发者QQ群,这是一个纯粹的iOS开发者社区,里面汇聚了众多有经验的iOS开发者,没有hr和打扰,没有广告的骚扰,为您创造一个纯净的技术交流环境,如果您对我的项目以及对iOS开发有任何疑问,都可以加群交流,欢迎您的加入~

微信公众号:fuckingxcode 欢迎大家关注,我们群的活动投票和文章等都会在公众号里,群期刊目前也移到公众号里。