神刀安全网

UI调试神器 for ios:Reveal的使用与破解 – 简书

UI调试神器 for ios:Reveal的使用与破解 - 简书
镇楼图

移动开发这一块做的最多的无疑就是UI和交互,而UI调试也是移动开发人员经常干的一苦逼事。虽然目前iOS开发工具Xcode集成了UI调试功能(Debug View Hierarchy),但带给我们的却只有失望。接下来就如标题所见,笔者来简单介绍和使用Reveal,因为这东西使用起来并不难,所以着重讲解怎么集成到工程里。但是…这个工具是收费的,不过还好我们在天朝(你懂得,暴力破解)。

简单介绍

Reveal的使用其实真的很简单,就如第一张镇楼图的效果一样。中间是3D可视化当前APP页面的视图,左侧则是这些UI元素和层次结构,而右侧则是View的属性,你可以修改View的颜色、frame等等,并且效果还是及时渲染到模拟器上的。当你真正使用的时候一眼就能看懂。而关于Reveal的下载就去Google一下就搞定了。至于没翻墙的童鞋则随意百度就行。

集成

把Reveal集成到项目里有两种方式。第一种则是添加Reveal的 framework 到工程里(不推荐)。第二种是用LLDB命令(吐血推荐)。

framework集成(不推荐)

而关于用 framework 集成的方式可参考我很久以前在CSDN上写的一篇文章, 点我传送过去 。因为用这种方式集成的弊端就是在于,你还要配置project的 other linker Flags ,还要注意不要在打包发布的时候也一起打包进去了。而且每个项目都要去加入Reveal的framework,并且配置 other linker Flags 。那么问题来了,有没有一劳永逸的方式尼?就是配置一次环境,以后不管有多少项目都直接使用?答案是有的。那就是用第二种方式LLDB来配置,因为这需要一点LLDB的基础知识,在本章都会进行简单介绍。

LLDB集成(吐血推荐)

LLDB集成的优势就是在于不用担心打包会把Reveal的framework也打包进去的问题。而且本地配置好了,只要在这台机器上任何项目都通用。最最最主要的一点就是,高bigger。

使用 LLDB命令集成 其实也很简单,大体分为如下两步。

第一步: 点击 pause program execution ,暂停app。(如下图)

UI调试神器 for ios:Reveal的使用与破解 - 简书

暂停app的效果图

第二步: 依次输入两条命令即可,分别如下:

第一条:

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

ps: /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib 这个地址为绝对路径,我的Reveal是存放于 application 目录下的,所以路径就是 /Applications/Reveal.app/.....

第二条

expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:nil];

两条命令顺利的话,控制台则会打印 INFO: Reveal Server started (Protocol Version 25). 这条信息。(如下图)

UI调试神器 for ios:Reveal的使用与破解 - 简书

成功之后的效果图

ps:如果最后未能正常输出 INFO: Reveal Server started ,那你就要好好检查一下第一条命令里的dlopen里包含的路径是否正确了。

最后,你在点击 continue 按钮或者在控制台里继续输入 c 字符然后回车,让程序结束暂停即可。

现在,你在打开你的 Reveal ,在你的左上角点击 No Connection ,瞅瞅,是否有你的app啦。接下来你就好好的享受Reveal带给你的快感吧。。。

.lldbinit里设置别名

但是,这还没有结束尼。每次需要Reveal来审查UI的时候都要输入这两条看着如此蛋疼的命令。这,不是要我老命嘛? so… 幸运的是我们可以在 ~/ 目录下的 .lldbinit 文件里为我们的 LLDB 命令添加别名。

首先,简单科普一下吧。 .lldbinit 是一个隐藏文件,貌似默认是没有的。而 Xcode 每次启动的时候,则都会去 ~/.lldbinit 这个目录寻找这个文件里的 LLDB 命令。所以我们可以在这个文件里进行一些命令的初始化设置或者设置别名等等(本篇不做这方面介绍)。

现在,我们打开终端,在终端里输入 touch ~/.lldbinit 命令来进行创建。然后在输入 open ~/.lldbinit 命令。则就会以文本编辑器打开此文件。然后再把如下字符复制到文本编辑器里即可:

command alias zxp_reveal_load_sim expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void *)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2) : ((void*)0)  command alias zxp_reveal_start expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:nil];

command alias 其格式为:command alias 别名 LLDB命令,因此如上 zxp_reveal_startzxp_reveal_load_sim 就是我设置的别名。你们也可以替换成你们自己喜欢的名字

然后,现在在按照如上LLDB集成的步骤,运行项目,暂停app,这时候你在输入 zxp_reveal_load_sim 然后在输入 zxp_reveal_start 即可在Reveal里审查你的UI元素了。(如下图)

UI调试神器 for ios:Reveal的使用与破解 - 简书

自定义LLDB命令使用的效果图

破解

由于Reveal是收费的,所以我们得要用点手段才行。正所谓上有政策下有对策嘛。其实也很简单,直接把 ~/Library/Preferences/com.ittybittyapps.Reveal.plist 这个路径下的这个文件给干掉,然后在重启一下电脑即可。但这并不是完全破解,而是一直循环30天试用。等30天试用完了,在把这个文件干掉,然后在重启电脑即可。当然 ~/Library/Preferences/ 这个目录下的文件较多,现在你打开你的终端,然后输入 rm ~/Library/Preferences/com.ittybittyapps.Reveal.plist 这条命令即可删除。然后继续重启你的电脑吧。这个破解方法简单粗暴也实用,如果童鞋们有其他更好的方法或者有完全破解不需要循环30天的方法,还望多指点我。

最后

由于本篇废话有点多,可能多少有点枯燥。总之就先忍忍吧,每天进步一点点,生活会更精彩一点。

关于iOS的一些小技巧或者其他实用的工具欢迎与笔者进行交流。本文也欢迎转发,标注原文出处即可。

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » UI调试神器 for ios:Reveal的使用与破解 – 简书

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
分享按钮