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