Cycript安装报错 Library not loaded终极解决方案

一、下载安装

Cycript 官方完整

资源下载完成后,解压。目录如下:

二、执行

打开命令终端,cd到对应目录,然后执行./cycript

bash 复制代码
#第一步:cd到解压的目录
cd /xx/cycrpt_0

#执行:
./cycript
2.1、报错Library not Loaded

果然不出所料报错如下:

可以看到,Library not loaded 错误, ./cycript执行时,dyld加载libruby.2.0.0.dylib, 但找不到相应路径。查看自己电脑的ruby环境是,/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/libruby.2.6.dylib。怪不得。

那就想办法弄一个,网上找了很多方案,发现都是复制粘贴,由于苹果不同系统SIP的原因,并不能在系统文件夹里新建文件,因为只有只读权限。

在 OS X El Capitan 系统以后有一个跟安全相关的模式叫 SIP(System Integrity Protection ),它禁止让软件以 root 身份来在 Mac 上运行,在升级到 OS X 10.11 中或许你就会看到部分应用程序被禁用了,这些或许是你通过终端或者第三方软件源安装。对于大多数用户来说,这种安全设置很方便,但是也有些开发者或者高级 Mac 用户不需要这样的设置

网上说了很多关闭SIP,建立软链接,但都不起作用。既然都不靠谱,还是得自己再研究下。

2.2、分析原因

若不关注具体原因,可以直接跳过出,查看第三部分解决办法。

既然是dyld加载动态库时报错,谁用到了libruby.2.0.0.dylib,仔细看报错,可以看出:

可以看到是由于Cycript.lib下的cycript-apl,引用了。 那用otool 分析下,执行otool -l cycript-apl,

bash 复制代码
otool -l cycript-apl

从上图的输出可以看出,果然cycript-apl 加载了 libruby.2.0.0.dylib。说明cycript-apl是用到了libruby2.0.0.dylib提供的方法。

ruby是向后兼容的,2.6的版本提供的能力是大于2.0的。既然是加载动态库,那岂不是可以更改链接的动态库。

对,就是将动态库2.0的版本改动自己2.6的版本。

2.3、install_name_tool 改变dyld加载ruby的路径

1、通过install_name_tool 更改 cycript-apl 加载动态库的路径

install_name_tool -change xxx旧ruby.dylib路径 xxx新ruby.dylib路径 cycript-apl

install_name_tool -change /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/libruby.2.6.dylib ~/Downloads/cycript_0/Cycript.lib/cycript-apl

bash 复制代码
install_name_tool -change /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/libruby.2.6.dylib ~/Downloads/cycript_0/Cycript.lib/cycript-apl

2、执行上述命令后,再次查看cycript-apl加载的动态库

bash 复制代码
#再次查看cycript-apl加载的动态库
otool -l cycript-apl

看到使用ruby.dylib已经更改为自己的了。

3、再次执行./cycript

还是报错Library not loaded,但仔细观察报错,会发现虽然还是libruby.2.0.0.dylib,但引用ruby.dylib的已经变成libcycript.dylib不是前面的cycript-apl。说明上面的更改加载动态路径是生效的。我想这个报错你应该会自己解决了。

对,同理通过install_name_tool,更改libcycrippt.dylib加载 ruby.dylib的路径。

install_name_tool -change /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/libruby.2.6.dylib ~/Downloads/cycript_0/Cycript.lib/libcycript.dylib

bash 复制代码
install_name_tool -change /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/libruby.2.6.dylib ~/Downloads/cycript_0/Cycript.lib/libcycript.dylib
2.4、再次执行./cycript

执行./cycript成功了。

三、解决办法

3.1、 更改 cycript-apl加载ruby的路径

install_name_tool -change /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/libruby.2.6.dylib ~/Downloads/cycript_0/Cycript.lib/cycript-apl

bash 复制代码
install_name_tool -change /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/libruby.2.6.dylib ~/Downloads/cycript_0/Cycript.lib/cycript-apl
3.2、更改libcycript.dylib的加载ruby路径

install_name_tool -change /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/libruby.2.6.dylib ~/Downloads/cycript_0/Cycript.lib/libcycript.dylib

bash 复制代码
install_name_tool -change /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/libruby.2.6.dylib ~/Downloads/cycript_0/Cycript.lib/libcycript.dylib 

install_name_tool -change xxx旧ruby.dylib路径 xxx新ruby.dylib路径 需要更改的文件

注:上述的路径,请根据自己的路径进行修改。

3.3、再次执行./cycript

执行./cycript成功了。

​​​​​​​至此问题便解决了,请开心的使用cycript吧。

相关推荐
QuantumLeap丶7 小时前
《Flutter全栈开发实战指南:从零到高级》- 26 -持续集成与部署
android·flutter·ios
2501_9159184110 小时前
TCP 抓包分析在复杂网络问题中的作用,从连接和数据流层面理解系统异常行为
网络·网络协议·tcp/ip·ios·小程序·uni-app·iphone
二流小码农11 小时前
鸿蒙开发:个人开发者如何使用华为账号登录
android·ios·harmonyos
wvy14 小时前
Xcode 26还没有适配SceneDelegate的app建议尽早适配
ios
游戏开发爱好者815 小时前
苹果 App 上架流程,结合 Xcode、CI 等常见工具
macos·ios·ci/cd·小程序·uni-app·iphone·xcode
前端老白15 小时前
webview在微信小程序中,安卓加载失败,IOS正常加载
android·ios·微信小程序·webview
2501_9151063215 小时前
用 HBuilder 上架 iOS 应用时如何管理Bundle ID、证书与描述文件
android·ios·小程序·https·uni-app·iphone·webview
2501_9159090615 小时前
资源文件混淆在 iOS 应用安全中的实际价值
android·安全·ios·小程序·uni-app·iphone·webview
2501_9159184115 小时前
iOS App 性能测试中常被忽略的运行期问题
android·ios·小程序·https·uni-app·iphone·webview
Name_NaN_None15 小时前
iPhone怎么投屏到电脑上?
ios·电脑·iphone