这篇文章其实很早就写了,当时觉得只是个人记录,没有详细过程,没啥含金量,所以没有放到 Testerhome 。
后来见到 Monkey 绕了一个大圈才搞定,而且有些坑确实不好解决,所以也转过来吧。
基本可以按照文章里的步骤走通。
遇到了两个比较花时间且文中没提到的地方:
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 找到的。
大致步骤:
...
<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