Flutter Library not loaded: @rpath/App.framework/App
这几天在做Flutter-module开发(add2app),在xcode启动项目后遇到标题所示问题
环境
- M1 MacbookPro
- Arm64版本的Android Studio
- flutter 版本也是amr64
解决尝试
网上的解决的方法都是主动在Pods-[you-project-name]-frameworks.sh
脚本文件中添加引用app.framework的脚本eg:install_framework "${PODS_ROOT}/../../[your-module-name]/.ios/Flutter/App.framework"
确实能够跑起来,但是我在使用真机测试的时候,会出现以下两个问题
- 使用FlutterGroupEngine内存还是很大,且会奔溃
- 每次加载新的FlutterEngine,还是有长时间(500ms)的白屏加载
- 打包出来的api安装到测试机上时,写的Flutter模块是白屏
最终解决
进过大量查阅 找到两个有价值的链接 链接1 链接2
再看了下面两个回答后我发现,问题其实因为cocoapods生成了pods在执行 podhelper.rb时,没有把
install_framework "${PODS_ROOT}/../../[your-module-name]/.ios/Flutter/App.framework"
这句脚本主动加入执行脚本中,而为什么没有加入是因为ruby没有加入进去。这个问题出现在ruby version < 1 或 > 3,所以我们可以通过降级这个问题
解决步骤
-
- 查看本地ruby版本
ruby --version
=* ruby-3.0.0 [ x86_64 ]
# => - current
# =* - current && default
# * - default
-
- 查看本地可用的ruby版本
rvm list
=> ruby-3.0.0 [ x86_64 ]
# => - current
# =* - current && default
# * - default
发现只有一个3.0.0的版本,所以需要去下载线上的版本
-
- 查看线上版本
rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.10]
[ruby-]2.3[.8]
[ruby-]2.4[.10]
[ruby-]2.5[.8]
[ruby-]2.6[.6]
[ruby-]2.7[.2]
[ruby-]3[.0.0]
ruby-head
可以看到有好多个ruby版本
-
- 下载较低版本等级的ruby
rvm install 2.7.2
-
- 重新查看本地可用版本
rvm list
* ruby-2.7.2 [ x86_64 ]
=> ruby-3.0.0 [ x86_64 ]
# => - current
# =* - current && default
# * - default
-
- 设置默认ruby版本
rvm use 2.7.2 --default
-
- 重新安装cocoapods
gem install cocoapods
这一步很重要
-
- cd到目标文件下 重新执行 pod install
➜ XTest pod install
Analyzing dependencies
Downloading dependencies
Installing CocoaLumberjack (3.7.2)
Installing Flutter (1.0.0)
Installing FlutterPluginRegistrant (0.0.1)
Installing t_module (0.0.1)
Generating Pods project
Integrating client project
Pod installation complete! There are 4 dependencies from the Podfile and 4 total pods installed.
-
- 再次查看
Pods-[you-project-name]-frameworks.sh
脚本文件
- 再次查看
可以看到install_framework "${PODS_ROOT}/../../[your-module-name]/.ios/Flutter/App.framework"
这行脚本被自动添加了
测试
- 不在报错Library not loaded: @rpath/App.framework/App
- 使用FlutterEngineGroup也不再有内存异常
- module 加载速度更快了
- 打包也正常了
虽然降级这种方法并不是一种最好的方法,但起码目前可用,后期ruby新的版本应该会解决这个问题
转载自:https://juejin.cn/post/7077494268578775048