前言
最近需要重新编译一个名为 PassBy 的iOS越狱插件,发现在我的新设备上频频报错,于是将探索经过与解决过程记录在下。
由于我并不专业,甚至对iOS开发并不了解,完全是以学习的态度进行的探索记录。如有纰漏,欢迎大家在评论区批评指正。
顺便给自己的另外一篇相关文章打打广告哈哈:
iOS越狱插件PassBy定制,记录了我尝试解决PassBy不识别Apple Watch之外的其他蓝牙穿戴设备的经过。
尝试编译
第一次编译
系统:macOS Monterey 12.6.5
芯片类型:Intel芯片,非M系列
Xcode版本:14.2
我先是尝试直接编译,输入make package
,结果提示openURL已经被淘汰。
此时我便猜测是Xcode版本太高导致的不适配,我打算先去GitHub的源代码地址去看看作者有没有进行更新。结果很可惜,没有办法,我只能尝试修改一下代码。
根据报错信息我先是找到了相关c文件,搜索openURL关键词后,注释了相关代码。
继续寻找,可以发现这是并不影响主要功能的代码,应该是执行一个打开捐赠和源代码网址的操作,由于我并不熟悉Objective-C语言,最简单的方式便是直接注释掉,所幸也不影响插件主体功能。两个网址我粘贴在下面:
- 捐赠(Donate):https://paypal.me/giorgioiavicoli
- 源代码(Source Code):https://github.com/giorgioiavicoli/PassBy
第二次编译
尝试继续编译,不出所料,新的问题又出现了。
这次的问题则更为棘手,theos在调用Xcode编译工具时直接提示找不到Message框架。
这个问题就不是我简单修改能够解决的了。我猜测是新版本的Xcode舍弃了这个框架,这是摆在我眼前的就只有两条路:要么重构相关代码(难度对我来说确实是太大了),要么就只能更换到Xcode的旧版本(在我实践之前其实也是个未知数,不能保证一定能解决)。
我只能尝试更换Xcode版本这条路了。
尝试更换Xcode版本
先查看一下目前的版本,可以看到是14.2版本的。
在Xcode的支持页面可以清楚的看到每个Xcode版本的最低系统要求以及包含的SDK等信息。
接下来去Apple官方关于Xcode所有版本的下载页面,下载一个旧版本即可。我下载的是12.5.1版本。
接下来就是解压.xip文件,将解压出来的Xcode.app更改一个名字,比如Xcode_12.5.app,最后将其移动到/Application目录下即可。
上图可以看到我的老版本Xcode是并不能直接打开的,但是对本章来说是丝毫没有影响的,我们并不需要直接打开老版本Xcode进行操作。具体缘由请继续看下去。
这里解压的时间比较久,需要耐心等待一下。
另外平时下载更新Xcode也可以这样操作。配合多线程下载工具的话,基本上可以跑满宽带速度,同时避免App Store下载失败等问题。缺点就是解压比较耗时。
切换Xcode开发工具版本
注意本节的小标题并不是“切换Xcode版本”,因为对我们来说,仅仅需要的只是Xcode老版本软件自带的开发目录下的那些脚本工具而已,比如gcc等。
接下来只需要使用该命令切换xcode-select目录即可:
|
|
修改成自己的老版本文件名即可,输入密码不显示。
此时再输入命令验证一下:
|
|
以上命令的输出结果都可以看到你选择的老版本Xcode文件名称的字样,类似 Xcode_12.5 。
第三次编译
再次尝试编译,问题终于迎刃而解了。
|
|
其实之后我还尝试过将上面注释掉的代码恢复正常,没想到还是报一样的错误
这里我怀疑可能是安装的 Command Line Tools 的版本问题。由于不知道安装低版本的Tools会造成什么影响,我就没有进行尝试。
切换回原版本
|
|
还是验证一下:
一键脚本
这里再提供一个大佬分享的一键脚本,但我并没有亲自尝试,于是我将链接贴在这里,以示感谢。
文章链接:https://www.cnblogs.com/zndxall/p/12463744.html