iOS界面调试工具之Reveal

前言:Reveal是一个iOS程序界面调试工具,它能够在应用程序运行过程中调试应用程序界面。通过Reveal我们可以连接到应用程序,并允许开发者编辑各种用户界面参数,结果会马上在用户界面上呈现。就像Web开发人员用浏览器提供的开发人员工具调试页面一样,Reveal允许开发者在不修改代码、不重新构建项目、不重新部署应用程序的情况下就能够调试ios应用的用户界面。同时还可以利用越狱手机查看其它应用的结构,做逆向分析,在应用开发过程中很有用处。

安装Reveal: http://revealapp.com/download/

Reveal在项目中的集成方式

一.直接导入静态库

将Reveal框架链接到您的iOS或tvOS应用程序是启用显示检查的一种快捷简单的方法。
1.在打开Reveal在菜单/help->Show Reveal Library in Finder ->(iOS Library和tvOS Library).
2.把RevealServer.framework导入到工程的根目录下.
3.工程配置:
(1).Build Settings->Linking->Other Linker Flags的Dehug配置-ObjC - lz - weak_framework RevealServer



(2).在Framework Search Paths中的Debug配置 $(inherited) $(SRCROOT)
(3).在Runpath Search Paths的Debug配置$(inherited)@executable_path/Frameworks



(4).在Build Phases中点击左上角的+号添加一个New Run Script Phase 在Shell脚本中粘贴如下代码:
export REVEAL_SERVER_FILENAME="RevealServer.framework"
 # Update this path to point to the location of RevealServer.framework in your project.
export REVEAL_SERVER_PATH="${SRCROOT}/${REVEAL_SERVER_FILENAME}"
 # If configuration is not Debug, skip this script.
[ "${CONFIGURATION}" != "Debug" ] && exit 0

# If RevealServer.framework exists at the specified path, run code signing script.
if [ -d "${REVEAL_SERVER_PATH}" ]; then "${REVEAL_SERVER_PATH}/Scripts/copy_and_codesign_revealserver.sh"
else
echo "Reveal Server not loaded: RevealServer.framework could not be found."
fi

4.在模拟器和真机上运行你的程序,若控制台打印出:INFO:Reveal Server Started(Protocol Version 40).说明RevealServer开启成功,然后在Reveal中的左上角会显示你的项目,点击即可查看项目页面的UI层级结构.

二.通过Xcode断点加载Reveal Server

通过Xcode Debugger Breakpoint加载Reveal Server框架是一种很好的方法,让您可以对项目文件进行最少或没有更改的任何项目进行检查。这也意味着您不必担心意外发送与显示库链接的应用程序的发布版本。

配置过程如下:
1.在Reveal中的help菜单中选择install Debugger Commands,然后出现弹框内容为:This process will create or modify the contents of .lldbinit file in your home directory.选择continue,然后提示Installation Complete 点击Done.

2.在Xocde的View菜单中选则Navigators,然后点击Show Breakpoint Navigator.

3.在Xcode的左下角点击+,在断点菜单中选择Symbolic Breakpoint…,然后添加一个断点,编辑断点在symbol中填写UIApplicationMain,单击添加操作按钮,并确保将Action设置为Debugger Command。将以下命令复制并粘贴到下面的字段中:reveal load,最后勾选在评估操作后自动继续检查.

4.右键单击新创建的断点,然后选择移动断点到→用户.

注:此断点可禁用和启用

5.在模拟器上运行你的程序,若控制台打印出:INFO Reveal Server Started(Protocol Version 40).说明RevealServer开启成功,然后在Reveal中的左上角会显示你的项目,点击即可查看项目页面的UI层级结构.

上述步骤足以使用iOS或tvOS Simulator中的Reveal来调试任何应用程序。但是,如果您还想在设备上调试应用程序时使用Reveal,则需要为每个项目执行一些额外的步骤:
1.在Build Phases中点击左上角的+号添加一个New Run Script Phase 在Shell脚本中粘贴如下代码:

REVEAL_APP_PATH=$(mdfind kMDItemCFBundleIdentifier="com.ittybittyapps.Reveal2" | head -n 1)
BUILD_SCRIPT_PATH="${REVEAL_APP_PATH}/Contents/SharedSupport/Scripts/reveal_server_build_phase.sh"
if [ "${REVEAL_APP_PATH}" -a -e "${BUILD_SCRIPT_PATH}" ]; then
"${BUILD_SCRIPT_PATH}"
else
echo "Reveal Server not loaded: Cannot find a compatible Reveal app."
fi
注:此构建阶段将在您的计算机上找到Reveal,并将Reveal Server框架作为资源复制到应用程序中,但只有在使用Debug配置构建时才可以。

2.在Xcode中,使用设置为使用调试配置的方案,在iOS或TvOS设备上构建和运行应用程序。确保设备与Mac运行显示相同的Wi-Fi网络,或通过USB电缆连接到Mac。


三.通过CocoaPods集成

1.添加下面的指令到你的podfile中:
target 'YourMainAppTargetName' do
pod 'Reveal-iOS-SDK', :configurations => ['Debug']
end

注:configurations参数确保Reveal只会被连接到debug builds.

2.pod install或者 pod update Reveal-iOS-SDK
3.在真机和模拟器上运行.


调试他人的app

1.越狱

调试他人app首先要把iphone越狱,关于怎么越狱,baidu一下即可,要注意的是,越狱过程中最好关闭“查找我的iphone功能”,并且将开机密码清除,否则可能会越狱不成功,至少我自己碰到过因为这个原因不能越狱的情况。

越狱完成后,通过Cydia(越狱后自动安装的一个软件源)安装OpenSSH和MobileSubstrate(现在已经改名叫:cydia substrate),注意Cydia第一次启动后需要更新软件源,所以可能搜索不到应用,这时候等一会,让Cydia更新完之后再搜索就行了,有点像ubuntu的apt-get update。

2.通过openSSH拷贝framework和dylib到越狱机

3.编辑libReveal.plist

在iphone的 /Library/MobileSubstrate/DynamicLibraries/ 目录下创建文件libReveal.plist,当然也可以在电脑上创建编辑后拷贝到iphone上,方法同上面拷贝framework。

4.重新启动越狱的iphone

然后就可以打开Reveal看别人的app怎么布局的了。注意,iphone和安装Reveal的机器一定要在同一网络下。

最后需要注意的事项:

1.不要将连接了Reveal库文件的应用正式发布。 Reveal的检视机制,会将您应用的许多内部信息暴露出来,而这将很可能导致您的应用被Apple审查团队拒绝发布。Reveal的目的仅用于内部开发与应用调试。从项目中移除Reveal参考官方文档: http://support.revealapp.com/kb/getting-started/remove-reveal-from-your-xcode-project

2.当iOS宿主应用进入后台后,Reveal服务将会自动停止。 当应用重新打开时,它又会自动启动。

3.Reveal支持基于iOS 6及更新版本而编译的应用。 构建配置中的iOS Deployment Target也必须是'iOS 6.0'或更新版本。 如果iOS版本太旧,您有可能会在构建应用过程中遇到连接错误。

4.Reveal使用Bonjour协议来连接运行时的iOS应用。 如果您的iOS应用是运行在真实的设备之上,那么此设备也需要处在同一个网络之内,以便电脑上的Reveal应用能够与之连接。如果您在连接应用时仍遇到问题,请先检查防火墙和代理设置,以确保它们没有阻碍通讯。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • Reveal简介 Reveal是一个iOS程序界面调试工具。可以在Reveal上查看视图的层级和修改控件的属...
    繁星mind阅读 11,239评论 11 35
  • Reveal是iOS开发工具中的神器之一,它能够在应用程序运行过程中调试应用程序界面。 通过Reveal我们可以连...
    jackfrued阅读 12,415评论 2 48
  • 我今天在空中读书会学习了《第二期》内容,读了纸质书对应内容!提交了作业!今天在群里做了一个微课分享!分享的是我这几...
    闪光的种子阅读 205评论 0 3
  • 方法一、谓词(NSPredicate)创建正则表达式 使用它来判断用户输入的字符串是否为合法的: 方法二、NSRe...
    雪中客阅读 266评论 0 0
  • 今日挑战彩铅,画一串翡翠手链。折腾了两个多小时,终于画完啦!翡翠的成色和种水都不错。老婆说:今后送我们娘俩礼物都不...
    曾颖阅读 315评论 2 1