前言: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应用能够与之连接。如果您在连接应用时仍遇到问题,请先检查防火墙和代理设置,以确保它们没有阻碍通讯。