一个可以实时跟踪分析iOS App视图的小工具

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

GitHub入口:https://github.com/sx1989827/RunTrace

前言

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

更新

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

安装

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

2.如果你使用了cocoapods,那么在podfile里加上pod "RunTrace"即可。

禁用

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

使用

获取view的基本信息

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

获取view的父视图和子视图

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

显示自动布局信息

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

追踪view的状态

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

监测内存泄露

没有听错吧,它可以监测内存泄露,是的,那么如何来做呢,你push进一个viewController的时候,随便获取一个view的信息,然后pop回来,如果内存正常会弹出RemoveFromSuperview的提示框,如果没有弹出,说明那个viewController发生了内存泄露。

原理

说完了大致运用,我们来简单说说原理,原理就是首先Method Swizzling修改很多方法的入口,加入我们想要的东西,比如那个圆形小按钮,然后通过view的hittest来获取我们想要的view,对view的相关属性kvo便可以跟踪它的一些状态啦。其实原理并不难,但是细节很麻烦,尤其是在写自动布局约束展现的时候需要判断的东西很多。另外大家在使用的时候可以放心,对于app原生界面上的view我都使用了weak引用,不会影响到你的代码。

时间: 2024-10-11 21:44:45

一个可以实时跟踪分析iOS App视图的小工具的相关文章

20个可以帮你简化iOS app开发流程的工具

这里推荐20个可以帮你简化iOS app开发流程的工具.很多开发者都使用过这些工具,涉及原型和设计.编程.测试以及最后的营销,基本上涵盖了整个开发过程. 原型和设计 有了一个很好的创意后,你要做的不是立刻编程,而是设计UI和创建原型,这样你才能知道app如何运行,根据用户体验需要做哪些调整. App Cooker AppCooker 不仅是一个创建原型的优秀工具,它提供的许多功能还可以帮助你将程序发布到App store中.它集成了Dropbox,Box.net和photo roll,你可以直接

iOS开发之工具篇-20个可以帮你简化移动app开发流程的工具

本文转载至 http://www.cocoachina.com/ios/20130402/5926.html 如果想进入移动app开发这个领域,你总能从别的开发者或者网上或者书上找到各种各样的方法和工具,对于新手来说,还没有摸清门路就已经陷入迷茫了.这里推荐20个可以帮你简化app开发流程的工具.很多开发者都使用过这些工具,涉及原型和设计.编程.测试以及最后的营销,基本上涵盖了整个开发过程. 原型和设计 有了一个很好的创意后,你要做的不是立刻编程,而是设计UI和创建原型,这样你才能知道app如何

开发实时查询公交的APP软件的重要性

公交是最实惠的出行工具,很多民众出行都是偏向于选择公交,但是等公交确实不好受,如果你时间充足可以慢慢等,但是赶时间的话,这滋味真的不好受.如何让自己更舒心地等公交呢?创业者们就想到开发一个可以实时查询公交的APP软件.通过这个APP软件,用户可以实时查询到公交所在的位置,以及然后根据自己的时间规划性出门,提前出门等公交,这样就可以避免错过公交或者过长时间等公交,类似的实时查询公交APP软件有掌上公交.搜狗公交等.这就是为什么那么多创业者想要开发实时查询公交APP软件的原因. 现在的实时查询公交A

分享一个很早之前写的小工具DtSpyPlus

几年前写的一个获取windows窗体基本信息和屏幕取色的小工具 ,一直在用. 下载地址 http://files.cnblogs.com/dint/SpyPlus.zip

怎样做一个iOS App的启动分层引导动画?

一. 为什么要写这篇文章? 这是一个很古老的话题,从两年前新浪微博开始使用多层动画制作iOS App的启动引导页让人眼前一亮(当然,微博是不是历史第一个这个问题值得商榷)之后,各种类型的引导页层出不穷,到如今,github上也有了各种的成型的library存在供选择,同时不少app也已经慢慢的开始返璞归真回归单一静态引导页.虽然时尚的潮流不停的在变化,但是我一直在思索,这种多图层的启动引导动画到底是什么个结构?实现起来究竟有多难?本文,将试图探寻这个话题. 二. 我们要做成什么样子的? 首先定下

iOS 10越狱和Reveal 7分析三方App UI框架教程

前言 这是一篇写给开发者的博客,如果碰巧非开发者搜到了这篇博客,那么博客的内容可能不适合你. 其实网上Reveal的教程很多,但是很多都是停留在Reveal 1或者Reveal 2时代的博客,不太适合最新版本的Reveal 7,所以还是决定写这样一篇文章. 本文最终的效果: 淘宝首页: 可以看到,淘宝首页其实就是一个巨大的CollectionView 京东首页: 可以看到,京东首页其实就是一个巨大的TableView 越狱 准备工作: 一台待越狱的设备(10.3系统以下),最好用测试机或者淘汰下

使用Reveal分析其他App的视图布局

使用Reveal分析其他App的视图布局 我们有时候可能不知道怎么怎么布局视图,这个时候我们就会想要去参考相似的其他App的界面布局,那么我们就可以使用Reveal来进行布局分析. (一)越狱安装OpenSSH和Cydia substrate 查看他人App时需要将手机越狱,越狱的方法这里就不仔细讲了,大家搜索一下就行.越狱成功后就能看见这个安装好的软件Cydia软件,启动Cydia软件,第一次启动需要更新一下软件源.在Cydia软件里下载安装OpenSSH和Cydia substrate (二

第一个IOS APP后续(审核,上架)

上一篇<第一个IOS APP总结 >我觉得预留2个星期审核上架应该够了,实际上用了1个星期,提交第5次版本审核过,相当于修改了4次,纪录一下避免下次再犯错.1.0.1版是第一个版本:拒绝!说是我的资源里面包含有免费字样,他说我选择的收费模式已经表明是免费,所以不需要再图片上再次申明.我原来的图片是这样的:我把永久免费去掉了,变成了这样:然后我提交了1.0.2版本:继续拒绝!原因是我不符合最小内容原则,我一看评审人员的截图,就是进入APP后没有数据,空白页面,我看了测试人员的测试时间是北京时间半

输出Bag中的所有记录为一个json数组---精通android、IOS App应用服务程序开发

书写闭合的json格式内容 {"item": { <chtml> - - </chtml> } ,"tatol":@{item:getLength} } 与内层的标签运行结果共同组织一个完整的json格式文本输出到Android(IOS) App "tatol":@{item:getLength} 为统计记录数 初始化Bag中的记录 同上一博 (您也可以从数据库中查询,如) <esql module=help id=