OC 项目引用了swift代码库charts,才手机11系统和12系统引发了如下问题,高系统是没有此类问题的
dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib
网上很多大神都拿出了解决办法:
比如:
最基础的解决
更新Xcode14后低版本iPhone调试报错
dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib
Referenced from: /var/containers/Bundle/Application/…/….app/…
Reason: image not found
这是缺少libswiftCoreGraphics库
直接导入libswiftCoreGraphics库即可解决。
————————————————
版权声明:本文为CSDN博主「Kevin写代码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42979360/article/details/126962070
库肯定是引用好了的,但是没有解决问题。
升级Xcode 14 .打包的app ,在Xcode14之后发现编译项目在iOS12.5以上的系统都正常,但是在跑iOS12.5以下的系统,例如iOS11,之类的系统会报dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib
我这应该是是加载libswiftCoreGraphics动态库失败了,没有找到该库的文件,我用的这个Charts三方库需要依赖这个libswiftCoreGraphics系统库。
运行时哪个三方库报这个错,就找到报错的三方库,同样在Build Setting ->Other Link Flags路径下添加这个-Wl,-weak-lswiftCoreGraphics。比如我Charts三方库:
4790876-409349acbcb9b37e.jpg
其他的库报类似的错 按照这个思路改就行了
作者:小锤子_
链接:https://www.jianshu.com/p/23ecb9c08ea7
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
随着16.0系统正式发布,最近升级xcode14以调试16.0的真机。升级成功后,发现调试11.x和12.x固件的iphone,运行app直接崩溃了,启动不了。
崩溃日志如下:
dyld:Library not loaded:/usr/lib/swift/libswiftCoreGraphics.dylibReferencedfrom:/var/containers/Bundle/Application/xxx/xxxxxxx.app/xxxxxxxReason:image not found
看字面上的意思是加载libswiftCoreGraphics动态库失败了,没有找到该库的文件。
这个库属于系统库,因为项目采用了OC+Swift混编,所以需要依赖。
上网查找类似的问题,试了常见的解决方案如下:
1.手机重启
2.xcode 清理项目生成文件,重新build
3.修改build settings- Always Embed Swift Standard Libraries-YES
4.重新添加build settings- Runpath Search Paths-@executable_path/Frameworks
5.添加build settings- Runpath Search Paths-/usr/lib/swift
6.关闭bitcode(项目设置里也没有开启Bitcode)
都没有解决问题
在苹果开发者论坛上也有好些帖子,遇到这个问题,没有给出解决方案。
查看生成的app显示包内容,看到@executable_path/Frameworks目录下,有libswiftCoreGraphics.dylib文件,如下图:
app-name-Frameworks.png
但运行的时候却加载了另一个路径/usr/lib/swift/libswiftCoreGraphics.dylib
有帖子说用install_name_tool命令工具对app的动态库路径做修改,命令如下
install_name_tool oldpath newpath app_path/app_name
因为觉得治标不治本,所以没有尝试。
用otool命令工具查看app依赖的动态库,命令如下
otool -L app_path/app_name
xcode 14编译生成的app的依赖库,如下图:
xcode14 otool.png
之前使用xcode13调试11.x真机运行正常,所以比较下
xcode13编译生成的app的依赖库,如下图:
xcode13 otool.png
对比发现xcode14生成的app的依赖库多了/usr/lib/swift/libswiftCoreGraphics.dylib,算是找到问题了。
同时看到依赖库里也有@rpath/libswiftCoreGraphics.dylib,感觉是xcode14编译时重复依赖了系统库。
怎么解决重复依赖的问题,继续查资料,发现xcode13.2版本发布日志里有提到一个已知问题,原文如下:
Apps built with Xcode 13 or Xcode 13.1 that make use of Swift Concurrency features (such as async/await), deploy to iOS prior to 15, tvOS prior to 15, or watchOS prior to 8, and have bitcode enabled may crash at launch with an error reporting that the libswift_Concurrency.dylib library was not loaded.
Workaround: Add -Wl,-weak-lswift_Concurrency -Wl,-rpath,/usr/lib/swift to Other Linker Flags in the app’s build settings.
中文意思如下:
使用 Xcode 13 或 Xcode 13.1 构建的应用程序使用 Swift 并发功能(例如async/ await),部署到 15 之前的 iOS、15 之前的 tvOS 或 8 之前的 watchOS,并且启用了位码可能会在启动时崩溃并出现错误报告该库未加载。libswift_Concurrency.dylib
解决方法:在应用程序的构建设置中添加到其他链接器标志。-Wl,-weak-lswift_Concurrency -Wl,-rpath,/usr/lib/swift
因此我们可以借鉴一下,用弱引用(或者叫弱链接)的方式同时指定弱链接的路径和先后顺序,来处理libswiftCoreGraphics.dylib
buildsettings- Other Linker Flags-添加"-Wl,-weak-lswiftCoreGraphics -Wl,-rpath,/usr/lib/swift"
至此,解决了这个问题!应该是xcode14自身兼容低固件的bug导致的问题。
作者:喵了个二咪
链接:https://www.jianshu.com/p/6d205a3e1f9f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
后来发找到了这篇文章:
背景
测试说iOS 12的手机上安装Xcode14.0.2导出的新包后,打开就崩溃,但是在系统版本高的手机上就没有问题。
<!--more-->
调试后发现,崩溃日志是dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib,具体如下:
dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib Referenced from: /private/var/containers/Bundle/Application/55730273-D9D6-4C42-9335-7A56F92B7F2C/xxx.app/Frameworks/FSPagerView.framework/FSPagerView
Reason: image not founds
搜索后发现,开发者社区中有此问题的记录,xcode14:Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib,解决方案是:
If you are building your app with Xcode 14 or Xcode 14.0.1, your app will crash on older OS versions, including while building and testing directly from Xcode, as well as after submitting the app to the App Store. The OS versions affected include iOS 11 - 12.1, macOS 10.13 - 10.14.3, as well as watchOS and tvOS versions from the same time frame. To work around the crash when building with Xcode 14, add -Wl,-weak-lswiftCoreGraphics (substituting other library names for swiftCoreGraphics if appropriate for your crash) to the Other Linker Flags build setting.
即添加-Wl,-weak-lswiftCoreGraphics到Build Settings中的Other Linker Flags中。
这里要注意是添加到Other Linker Flags而不是Other Swift Flags,如果遇到下面的报错,就说明你和我一样,添加到了错误的地方。。。。
Driver threw unknown argument: '-weak-libswiftCoreGraphics' without emitting errors.
注意1
然而需要注意的是,假如项目有多个Target,如果添加在Target中,就要针对每个Target都要添加一次,很是麻烦,所以可以直接在PROJECT下的Build Settings中添加。
注意2
在项目中添加了-Wl,-weak-lswiftCoreGraphics到Other Linker Flags之后,编译运行发现还是会崩溃,还是报错
dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib Referenced from: /private/var/containers/Bundle/Application/55730273-D9D6-4C42-9335-7A56F92B7F2C/xxx.app/Frameworks/FSPagerView.framework/FSPagerView
Reason: image not founds
仔细看了之后,发现报错中提示的FSPagerView,是CocoaPods三方库,所以找到对应的第三方库,然后在对应库的Build Settings中找到Other Linker Flags,然后添加-Wl,-weak-lswiftCoreGraphics,再运行,发现还是报错,但是换了另一个三方库。。。
针对每个三方库一个个添加,是不可能的,太麻烦不说,每次Pod install之后就需要重新再设置,不是正确的解决办法。
所以有没有可能,在Podfile中post_install添加设置,统一一次性给所有三方库加这个编译设置。当然可以,设置如下:
post_installdo|installer| installer.pods_project.targets.eachdo|target| target.build_configurations.eachdo|config| config.build_settings['OTHER_LDFLAGS'] ='-Wl,-weak-lswiftCoreGraphics'endendend
然后编译,发现报错,因为项目中有些库没有用到swiftCoreGraphics,比如OC的三方库,或者非UI的库,所以还是要改,需要区分添加。针对项目中Swift类型的UI相关的库,添加这个编译选项,其他的不添加,最终示例如下:
need_otherlinkerflags_frameworks = ['FSPagerView','HandyJSON','IQKeyboardManagerSwift','JXSegmentedView','KDCircularProgress','Kingfisher','RxSwift','PKHUD','RxCocoa','SnapKit','ZLPhotoBrowser']post_installdo|installer| installer.pods_project.targets.eachdo|target| target.build_configurations.eachdo|config|ifneed_otherlinkerflags_frameworks.include?(target.name) config.build_settings['OTHER_LDFLAGS'] ='-Wl,-weak-lswiftCoreGraphics'endendendend
Pod install后,编译运行,发现可以正常运行了。再验证一下,非低版本手机上是否受到影响,没有影响,完美。
Done!