最近项目需要混编,又引入了SwiftUI,导致在iOS13以下系统直接闪退;
报错:
dyld: Library not loaded:/System/Library/Frameworks/SwiftUI.framework/SwiftUI
Referenced from: /var/containers/Bundle/Application/D80A336C-EE82-4C4B-AF30-7234C6EC4C18/XXXX.app/XXXX
Reason: image not found;
原因:SwiftUI库是在iOS13才开始引入的,13以下的系统无SwiftUI库;
目前有两种方案可以解决,但都涉及到写两套UI,即13以上使用SwiftUI写,13以下使用UIKit写;或者在低于13的系统上直接屏蔽这个功能也可以😏。
方案一:
在主工程 -> TARGETS -> Build Phases -> Link Binary With Libraries 中添加SwiftUI.framework库,将Status值由Required(默认是这个值)改为Optional;
方案二:
在主工程 -> TARGETS -> Build Settings -> Linking - General -> Other Linker Flags中添加-weak_framework SwiftUI。
两种方案最终实现原理基本差不多,都是弱引用SwiftUI库,但还是比较推荐方案一。
两种方案都能让代码部署在低于13的系统手机上,但是切记在使用SwiftUI库时,使用@available(iOS 13.0, *)来进行判断,否则还是会崩溃,方案一、方案二都只是解决引入不了库导致的编译错误;13+以上才能使用SwiftUI。