说明
这个方法是在 iOS 8 刚发布的时候想到的,当时主要用来在非越狱的 iOS 8 设备上调试分析第三方已经支持 iOS 8 的 App,比如:UC 浏览器,下面也会使用 UCWEB 为例来说明一些命令。
原理
谈不上原理,主要就是利用 xcode 的工具链,当然如果对证书、签名、Entitlements 比较熟悉,可能会很自然的想到这个方法。当时想到方法后,就在 github 上搜索了一下发现已经有人写了相关的工具,下面跟大家说下具体如何操作。
工具
ios-deploy:https://github.com/phonegap/ios-deploy
环境
1、OS X Yosemite - 10.10.2
2、xcode - 6.1.1
步骤
1、配置 xcode 的命令行环境,如下图:
说明:xcode 支持的 iOS 系统版本号需要大于等于设备,否则会无法挂载调试工具。
2、签出工具:git clone https://github.com/phonegap/ios-deploy
3、编译工具,shell 进入到 ios-deploy 目录,直接 make 即可:
编译成功后,可以将 ios-deploy 拷贝到 /usr/local/bin 中,便于全局使用。
4、在越狱设备上解密第三方 App,可以手工操作,也可以使用 Clutch 等。
这步比较重要,不解密会报错,具体原因没有去追究。在开发调试时向设备上安装的应用也是没有加密的。
5、权限 Entitlements:
<?xml version="1.0"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>get-task-allow</key><true/></dict></plist>
将如上内容保存为:Entitlements.plist,后面签名时需要。
6、准备 mobileprovision 文件,可以 iOS Dev Center 中下载,mobileprovision 文件中需要包含目标设备,这个做 iOS 开发的应该都知道。检查方法是:可以使用 emacs 打开 mobileprovision 文件,然后查看设备的 udid 是否在文件中。
将下载到 mobileprovision 重命名为 embedded.mobileprovision,将重命名后的文件拷贝到 UCWEB.app 中:
7、运行如下命令重新签名:
codesign -f -s "iPhone Developer: 你的证书名字" --entitlements Entitlements.plist UCWEB.app
8、运行如下命令开始调试,调试前请解锁屏幕:
ios-deploy -v -d -n -i “设别 UDID" -b UCWEB.app
说明:安装应用的过程比较长。
如果成功,状态如下图:
9、设置断点,运行程序:
10、其他的跟正常的 lldb 远程调试没有什么区别,enjoy。