关于flutter_module嵌入ios原生项目报错:dyld: Library not loaded: @rpath/App.framework/App解决方案

简介: 上个星期,突然有一位做flutter开发的小伙伴添加了我的微信,说他的项目中报dyld: Library not loaded: @rpath/App.framework/App这个错误,说是采用我之前的文章Flutter-module嵌入iOS原生老项目中中的方法可以解决,但是他们是团队开发,路径写死对多人开发不够友好,问我有没有其他解决方案。

上个星期,突然有一位做flutter开发的小伙伴添加了我的微信,说他的项目中报dyld: Library not loaded: @rpath/App.framework/App这个错误,说是采用我之前的文章Flutter-module嵌入iOS原生老项目中中的方法可以解决,但是他们是团队开发,路径写死对多人开发不够友好,问我有没有其他解决方案。


于是我就打开之前的flutter混合项目,开始探索,删除之前的方法,开始复现dyld: Library not loaded: @rpath/App.framework/App这个错误,如图:


image.png


其实项目中报这个错误很常见,这个错误就是dyld去加载App.framework/App这个文件时没有找到,为啥没有找到呢,那就是这个@rpath/App.framework/这个路径下没有App这个文件呗,首先我们得知道这个@rpath代表的是啥,知道@rpath,我们就明白了上面这个报错的原因。


要知道这个@rpath是啥,我们先简单了解一下项目编译到运行的过程中都发生了什么?


  1. 编译:在我们项目编译后,会生成项目的主程序文件(一个可执行文件Executable),在这个主程序文件所在的目录下,还有info.plish、_CodeSignature、Frameworks等文件,由这些文件组成的一个.app文件,这个文件再进行压缩就形成了我们熟悉的.ipa文件。(不信你可以把Xcode打包一个项目,导出ipa包,修改后缀名为.zip,解压缩看看😄)


  1. 运行:在项目运行的时候,dyld就会先加载主程序中所依赖的库,我们看下主程序中的Load command,如下图:


image.png


图中可以看到,加载系统的库,是没有@rpath的,因为系统的库所在位置是固定的。加载三方库如@rpath/AFNetworking.framework/AFNetworking是App.framework和@rpath/App.framework/App的时候就采用@rpath来代替路径,那么@rpath表示的路径是什么呢?这个@rpath是可以设置的,在我们的项目中,如图:


image.png



可看到@rpath是由@executable_path/Frameworks表示的,那么这个@executable_path又是什么呢?它是系统为了方便表示主程序这个可执行文件所在的路径而设计的一个变量,@executable_path表示的是主程序这个可执行文件所在的路径。那么@executable_path/Frameworks也就是@rpath则代表的是主程序文件所在的路径下Frameworks这个文件夹。


搞清楚@rpath是什么这个问题了,那么我们再来看一下.app/Frameworks都有什么?


image.png


发现其中确实没有App.framework。

我当时想到的第一种解决方案就是找到flutter_module中的App.framework,然后将它copy到编译后的.app/Frameworks下,不就解决了吗?编译后手动copy也行,当然如果项目clean了,就没有了。我这里采用脚本copy,如图,在Build Phases中新建一个Run Script,将脚本写入即可。


image.png


经过一番操作,我这里项目可以顺利运行了,但是这个方式给到咨询我的那个小伙伴,他那里的项目却不行,编译都不过。


然后又经过一系列的查找,最终我把问题定位到flutter的SDK的版本上,因为官方提供的flutter_module嵌入iOS原生项目中第一种方式(pod导入),实际上是使用了podhelper.rb这个脚本来完成一系列的加载,我查看了这个脚本的位置是在flutter的SDK中的,当时想到一个问题就是:我的这个项目21年9月份嵌入的的,我的flutter版本2.2.3也不是最新的,这位咨询的小伙伴的flutter版本也不是最新的,于是,我让他升级一下flutter版本看下,果不其然,他升级flutter后就可以顺利运行了。

其他同学如果遇到这个问题,可以先尝试一下flutter的版本升级,少走一些弯路。

最后贴出解决办法:(评论区小伙伴 ningcol 给出的方法,在此感谢!)

重装Cocoapods和ruby-macho:


sudo gem uninstall ruby-macho
sudo gem uninstall cocoapods
sudo gem install ruby-macho
sudo gem install cocoapods



相关文章
|
2月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
264 4
|
4天前
|
前端开发 Java 开发工具
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
|
11天前
|
安全 数据安全/隐私保护 Android开发
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
140 75
|
4天前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
25天前
|
Dart 前端开发 IDE
鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II
本文介绍了如何将现有 Flutter 项目适配鸿蒙系统,详细步骤包括安装 FVM、使用 FVM 安装 Flutter SDK、搭建开发环境、创建项目架构和壳工程等。
166 4
鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II
|
21天前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
|
2月前
|
传感器 iOS开发 UED
探索iOS生态系统:从App Store优化到用户体验提升
本文旨在深入探讨iOS生态系统的多个方面,特别是如何通过App Store优化(ASO)和改进用户体验来提升应用的市场表现。不同于常规摘要仅概述文章内容的方式,我们将直接进入主题,首先介绍ASO的重要性及其对开发者的意义;接着分析当前iOS平台上用户行为的变化趋势以及这些变化如何影响应用程序的设计思路;最后提出几点实用建议帮助开发者更好地适应市场环境,增强自身竞争力。
|
2月前
|
设计模式 Swift iOS开发
探索iOS开发:从基础到高级,打造你的第一款App
【10月更文挑战第40天】在这个数字时代,掌握移动应用开发已成为许多技术爱好者的梦想。本文将带你走进iOS开发的世界,从最基础的概念出发,逐步深入到高级功能实现,最终指导你完成自己的第一款App。无论你是编程新手还是有志于扩展技能的开发者,这篇文章都将为你提供一条清晰的学习路径。让我们一起开始这段旅程吧!
|
6天前
|
Dart 前端开发 架构师
【01】vs-code如何配置flutter环境-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈-供大大的学习提升
【01】vs-code如何配置flutter环境-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈-供大大的学习提升
|
3天前
|
小程序 IDE PHP
圈子源码如何打包生成App小程序/开发一个圈子系统软件所需要的费用体现在哪里?
将PHP源码打包成App的过程涉及多个步骤和技术选择。以圈子源码为例,首先明确需求,确定App功能和目标用户群体,并根据需求开发小程序页面,如用户注册、圈子列表等。源码准备阶段确保源码适用于小程序开发,环境配置需安装IDE(如微信开发者工具)及依赖库。最后在IDE中打包小程序并上传至管理平台,通过审核后发布。费用方面,模板开发成本较低,定制开发则更高,具体取决于需求复杂度和第三方服务费用。
27 0

热门文章

最新文章