这篇文章其实很早就写了,当时觉得只是个人记录,没有详细过程,没啥含金量,所以没有放到 Testerhome 。
后来见到 Monkey 绕了一个大圈才搞定,而且有些坑确实不好解决,所以也转过来吧。

按照文中步骤重现简单的 hook

基本可以按照文章里的步骤走通。

遇到了两个比较花时间且文中没提到的地方:

1、 在 build hook 的时候它依赖了一个外部库 CaptainHook 。虽然也可以手动把外部库加到项目中,但通过查看路径发现这个外部库是放在 /opt/iOSOpenDev 目录下的。

通过 Google ,这个目录是 iOSOpenDev 工具的,因此推荐直接安装这个工具(用 pkg 安装会报错,但此时库已经放到指定位置,满足我们这个 demo 的需要了)

2、 重签名时 正确的编写签名时使用的 Entitlements.plist 这步卡了 2 个小时。原因是文中说 "这里最需要注意的就是 application-identifier 要包含正确的 Team ID (可以在开发者中心查看) 和对应的 Bundle ID。",我被 Team ID 这个名字误导了,直接拿了平时显示在 Xcode 中证书后面括号里的 id,结果安装时一直提示 Error occurred: ApplicationVerificationFailed 。百思不得其解,最后看了How to Re-Sign an iOS App from an External Developer 才知道这个所谓 Team ID 实际上应该是 App ID Prefix !!!!!!(无数只草泥马在奔腾。。。)

到这里还没解决,因为网上说的都是去 Developer Members Center 查看。我此等穷屌丝只有苹果施舍的免费个人开发者证书,没法访问这么高大上的 Developer Members Center 。最后是通过查看这个应用对应的 provision profile 找到的。

大致步骤:

  1. Xcode->performance->Accounts
  2. 选中你的个人开发者账号
  3. 点击右下角【view details】
  4. 在 provision profile 这一栏找到含有你应用 bundle id 的文件,然后对那个文件右键->【Show in finder】
  5. 用文本编辑器(我用的是 Atom)打开这个文件,找到下面的内容:
...
    <key>ApplicationIdentifierPrefix</key>
    <array>
    <string>ABCD1234</string>
    </array>
...

这里的 ABCD1234 就是这个应用的 App ID Prefix 了。

3、 一个小技巧。我们可以不需要重签名里的最后一步打包成 ipa ,用 ideviceinstaller 可以直接安装 .app 。示例:

$ ideviceinstaller -i IceAndFire.app

这个工具的安装方式:brew install ideviceinstaller

参考文章

在非越狱手机上进行 App Hook
Resolving App ID Prefix Mismatching
How to Re-Sign an iOS App from an External Developer


↙↙↙阅读原文可查看相关链接,并与作者交流