之前遇到了dyld: Library not loaded: @rpath/xxx/xxx这个问题虽然解决了(直接注释掉Podfile文件中的use_frameworks! 即可),但是不知掉原因,后来在作者ic3w33k的Xcode真机调试中活久见的BUG——【code signature invalid for Framework】中找到了原因。
一:问题解决
依据关键词dyld: Library not loaded: @rpath/xx.framework/xx搜索,大部分的解答都认为是没有找到对应框架,需要嵌入操作(embed),然后进行过如下几种尝试:
- cmd + shift + k清理工程
- 清空/Users/xx/Library/Developer/Xcode/DerivedData目录
- general – embeded binaries 嵌入文件
- 在 Build Phases 里添加 Copy Files
- 修改mach-O Type中的Dynam Library为Static Library
- 在keychain中将使用的调试证书的信任改为“使用系统默认”
- 重装rvm、Cocoa Pods、Xcode
以上所有的方式皆未解决问题, 搜索code signature invalid for xx.framework,终于在苹果开发者论坛找到相关提问,并一路链接到GitHub上几个开源框架的issues(flutter和Alamofire无故中招😂)和Stack Overflow,最终找到:
code signature invalid for Framework
Running iOS apps causes runtime error for frameworks “code signature invalid”
App crashes on iPhone but works fine with android emulator, android device and iOS simulator
How to run an iOS app that causes runtime error for frameworks “code signature invalid”
简单来说,新版Xcode和iOS系统,在当我们使用非付费开发人员账号时,都有概率对嵌入的动态库发生无效签名。而解决的方式有:
1.有条件的话,清理非付费开发人员账号生成的证书与配置文件,改为付费人员对应的证书
2.打开Cocoa Pods的Podfile文件,注释掉use_frameworks!
3.在Podfile文件中添加一句use_modular_headers!
4.执行pod deintegrate+pod install重新配置一次第三方库
解决方法:直接注释掉Podfile文件中的use_frameworks! ,再pod install 即可!
二:上面的方法依然不能解决
按照上面的方法利用cocospods 使用静态库的方式添加三方时有时候依然无法解决问题,是因为有的三方库是以xx.framework 文件进行管理的,所以还需要对xx.framework文件进行处理,方法如下:
1.先将对应的三方库从Podfile文件中移出,然后直接将对应的xx.framework文件拖到代码中进行手动管理。
2.切换到Build Phases -> Link Binary With Libraries -> xx.framework 将Status设置为Optional即可
PS:最简单的方法时直接使用付费开发人员账号即可!
更优的方法:
可以查看我的这篇文章:Xcode Unable to install "xx" 解决办法 以及解决方案:
将iPhone中所以自带的应用升级到最新版本,即可解决dyld: Library not loaded: @rpath/xxx/xxx相关问题。