【iOS开发】Xcode使用CocoaPods时真机运行报错:dyld: Library not loaded: @rpath/AFNetworking.framework/AFNetworking

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! 。

 

stackflow参考:https://stackoverflow.com/questions/60096258/library-not-loaded-rpath-fblpromises-framework-fblpromises-ios-13-3-1/60394826#60394826

你可能感兴趣的:(iOS)