【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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章