1.问题描述:
手机iOS版本 13.3.0+、Swift语言、Xcode11
在某个iOS项目中,我使用了Swift语言进行开发,开发前期大多都是在电脑的手机模拟器来查看效果,较少连接真机进行测试,并且前期真机运行一切正常。直到前段时间,我连接上了我的手机进行测试,发现编译结束后手机打开APP显示首屏后就卡住报错,报错的信息如下:
dyld: Library not loaded: @rpath/AFNetworking.framework/AFNetworking
Referenced from: /private/var/containers/Bundle/Application/0BD33FE4-9E41-4F2C-A8EC-614ED6671EAA/NewsReading.app/NewsReading
Reason: no suitable image found. Did find:
/private/var/containers/Bundle/Application/0BD33FE4-9E41-4F2C-A8EC-614ED6671EAA/NewsReading.app/Frameworks/AFNetworking.framework/AFNetworking: code signature invalid for '/private/var/containers/Bundle/Application/0BD33FE4-9E41-4F2C-A8EC-614ED6671EAA/NewsReading.app/Frameworks/AFNetworking.framework/AFNetworking'
...
该项目使用了CocoaPods来对第三方库进行管理,在其中我使用了AFNetworking这个第三库(后来证明与这个库并没有什么关系),每次真机运行都是在启动的时候闪退,Xcode报这个错。
2.尝试解决:
关于这种问题我都是下意识的进行百度以及在CSDN进行问题的搜索,不乏有很多大神给出了解决方案:
引用自:https://www.cnblogs.com/meilj/p/10757022.html
解决方案:
1. clear项目运行的缓存
2. 重启xcode
3. 重新执行 pod install ,也可以重新执行 pod update/setup
4. 在target -> build phases -> Link Binary With Libraries -> 添加pod.framework,并将request改成optional
5. 执行 pod deintegrate 再重新安装 pod install
6. 搜索的答案中还有说是系统证书问题,需要都改成系统默认
其中还包括证书修改法、删除重装法、清除缓存法、库copy法等等。
但是并没有解决问题,至少并没有解决我的项目情况下的问题,如果你从之前的答案中已经找到了解决方法,那就不用往下看了。
我首先尝试更换了 AFNetworking 的版本,3.2.1 、2.6.3、3.0.x,发现不行仍然报这个错,与库版本无关,而且每次模拟器都可以正常运行,而真机每次都报错。
然后尝试删除了 AFNetworking 这个库,发现仍然报错 dyld: Library not loaded: 只不过报错的库名变成了其它第三方的库名。
说明错误与某个具体的库无关。
我又尝试把 CocoaPods 整个删除然后重装,重新 pod init、pod install、 pod update,还是不行。
3. 解决方法
把 Podfile 中的 use_frameworks! 这句注释掉,使用 use_modular_headers! , 然后 pod update。
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'NewsReading' do
# Comment the next line if you don't want to use dynamic frameworks
# use_frameworks!
use_modular_headers!
# Pods for NewsReading
pod 'AFNetworking', '~> 3.1.0'
pod 'SVProgressHUD'
pod 'SnapKit', '~> 4.0'
pod 'SDWebImage'
pod 'SwiftyJSON'
pod 'MJRefresh'
pod 'SCLAlertView'
end
清下缓存,重新编译运行,发现可以了!
看上去好像是手机iOS版本的问题,我突然意识到是在手机更新了新版的系统后才出现这个问题的。
最终了解到其实原因是苹果通过升级系统到13.3.1+来限制开发者在免费账户上使用外部框架(第三方框架),解决后我才意识到我用的是免费版本的开发者账号。
所以要么使用订阅的开发者的账号,老老实实交年费,使用动态库引入。或者就直接使用静态库引入。
要么在CocoaPods 的 Podfile 中修改采用模块头的方式引入第三方支持库,即 use_modular_headers! 。