不修改Xcode项目加载Reveal

作者: 龙城九哥 | 来源:发表于2015-06-26 23:07 被阅读4993次

      关于iOS UI调试工具Reveal的配置,很多初学者朋友可能在网上搜索到一些文章,这些文章大部分都是讲述了如何通过配置Xcode项目,通过加入一些库文件,并且在程序中编写额外的代码来调用Reveal服务,从而保证调试程序的时候能够将项目附加到Reveal中分析。

      这种方式,比较繁琐,并且每写个项目都需要重复这些繁琐的步骤,这是让人难以忍受的。为此,在下通过诸多分析尝试,终于发现了一种一劳永逸的方法。现在就将这个方法介绍给大家。这个方法不是我发明的,这是Reveal官方的文档提供的方法。但是网上鲜少提及,我在这里把这个方法介绍给大家。这个方法是通过Xcode断点命令来调用Reveal服务,然后保证在程序在模拟器运行的时候,Reveal随时都可以附加上,这样就可以方便地分析UI的层次结构。这个方法只需要对Xcode做一次配置,从此以后,任何时候都可以使用Reveal,这是极其方便的,避免了每次繁琐的项目配置,并且不需要编写任何代码。下面我就详细地跟大家介绍一下具体的配置方法。

如果你尚未安装Reveal,建议从官方下载安装试用。

本文使用的Reveal版本是1.5.1

下面是详细的配置步骤:

1.在Xcode中打开一个iOS项目,选择菜单项View → Navigators → Show Breakpoint Navigator.步骤如下图所示:

2.在左侧的导航面板下方,点击“+”并且选择【Add Symbolic Breakpoint 】菜单项,如下图所示:

3.在弹出面板的Symbol字段中填写“UIApplicationMain”,如下图:

4.点击Add Action 按钮,如下图:

5.复制如下的命令粘贴到上图中所示的编辑框:

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

如下图所示:

上述命令中,有个路径字符串

/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib

请确保这个字符串所指的文件在磁盘上存在(正常情况下,如果将Reveal安装到Application目录,这里不会出问题)。

6.勾选Automatically continue after evaluating actions选项


7.完成上述步骤以后,在新创建的断点上面点击右键,弹出如下菜单并选择,如下图所示:

现在,所有的配置步骤均已完成。以后无论分析任何项目,都可以直接启动Reveal 并分析。

现在启动一个项目调试,Xcode控制台会输出如下log,表明配置正确,Reveal已经可以正常启动使用,如下图所示:

接下来启动Reveal,如下图操作:

下面体验一下Reveal的强悍吧:

在上面这个演示demo中,足以说明Reveal的强大与方便,各种层次结构一目了然,特别是针对那些不规则的UI实现,可以进行方便的分析。

相关文章

网友评论

  • af762ad40509:谢谢楼主分享,按照楼主步骤设置成功。
  • c0484e3761ba:帅呆了
  • Andyzhao:赞,已转 :smile:
  • 5af97fe85913:中间怎么是黑屏,有参数
  • 43a3136cea3c:请问下,我是通过pod的方式加载的,但是模拟器连接的时候,Reveal列表中搜到了,但是连接的时候连接超时
    43a3136cea3c:@了克已复礼阿克苏减得了口 我修改过hosts文件,但是改回来还是连接超时
  • cacb98a35daa:楼主 为什么我配置好之后 UI不能实时更新 我还是需要去重启模拟器
  • 大生活家:在真机上,运行怎么看?????也出一个教程吧
  • StoneLeon:挺好~
  • AlexQian:大神 你好 我想问下 你提供的这种方式是不是只能用于模拟器测试 在真机测试的时候用不了reveal
    龙城九哥:@joeyqian 真机应该是不行,因为这种方法不注入代码,所以控制真机就比较困难了。真机建议使用动态加载方式。
  • ddaa8dae50b0:强大 感谢
  • 龙城九哥:@夜央未尽 @waterluo 修改一下命令字符串,上次编辑出错了。文档已经更正。试用版应该可以用。
  • 龙城九哥:@Durff 修改一下命令字符串看看,原文已经更正。
  • 龙城九哥:各位仁兄,万分抱歉,编辑是命令串出了点问题,原文已更正。大家可以重新拷贝尝试.
    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("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2) : ((void*)0)
  • 龙城九哥:@请叫我汪二 多谢 编辑的时候出了点小错误 :smile:
  • borjigeen_narsu:报这个是什么原因呢?
    (void *) $0 = 0x0000000000000000
    策马鞭程:此方法只能运用于模拟器,真机不行
    没有黑眼圈de熊猫:我的也是一直打印这个log,你们解决了吗?
    大生活家:@borjigeen_narsu 我也是一直都会在控制台打印这个.
  • 不进则退:@cyzju 确实命令有错误,现在好了
  • 不进则退:我的用不了啊,是不是reveal试用版用不了呢?? :sweat:
  • s_在路上:XCode6.0以上,集成了Reveal吧。
  • 3d8d2377fca7:@KevinWu @KevinWu @夜央未尽 expr(Class) 少了个空格
  • KaiweiWu:@夜央未尽 你也遇到这种情况?
  • KaiweiWu:我的操作不能成功,显示以下信息:
    error: unknown command shorthand suffix: '(Class)NSClassFromString(@"IBARevealLoader")==nil?(void*)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib",0x2):((void*)0)'
  • 夜央未尽:pod 项目

    遇到这个提示
    error: unknown command shorthand suffix: '(Class)NSClassFromString(@"IBARevealLoader")==nil?(void*)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib",0x2):((void*)0)'

    路径也存在:/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib
  • 李俊峰:这个其实是Reveal集成文档里的一个方法,我现在也在用这个方法确实比较方便。

本文标题:不修改Xcode项目加载Reveal

本文链接:https://www.haomeiwen.com/subject/ldodqttx.html