likes
comments
collection
share

Flutter Library not loaded: @rpath/App.framework/App

作者站长头像
站长
· 阅读数 5

这几天在做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"

Flutter Library not loaded: @rpath/App.framework/App

确实能够跑起来,但是我在使用真机测试的时候,会出现以下两个问题

  1. 使用FlutterGroupEngine内存还是很大,且会奔溃
  2. 每次加载新的FlutterEngine,还是有长时间(500ms)的白屏加载
  3. 打包出来的api安装到测试机上时,写的Flutter模块是白屏

最终解决

进过大量查阅 找到两个有价值的链接 链接1 链接2 再看了下面两个回答后我发现,问题其实因为cocoapods生成了pods在执行 podhelper.rb时,没有把 install_framework "${PODS_ROOT}/../../[your-module-name]/.ios/Flutter/App.framework"这句脚本主动加入执行脚本中,而为什么没有加入是因为ruby没有加入进去。这个问题出现在ruby version < 1 或 > 3,所以我们可以通过降级这个问题

解决步骤

    1. 查看本地ruby版本
ruby --version

=* ruby-3.0.0 [ x86_64 ]

# => - current
# =* - current && default
#  * - default
    1. 查看本地可用的ruby版本
rvm list

=> ruby-3.0.0 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

发现只有一个3.0.0的版本,所以需要去下载线上的版本

    1. 查看线上版本
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版本

    1. 下载较低版本等级的ruby
rvm install 2.7.2 
    1. 重新查看本地可用版本
rvm list

 * ruby-2.7.2 [ x86_64 ]
=> ruby-3.0.0 [ x86_64 ]

# => - current
# =* - current && default
#  * - default
    1. 设置默认ruby版本
rvm use 2.7.2 --default
    1. 重新安装cocoapods
gem install cocoapods

这一步很重要

    1. 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.
    1. 再次查看Pods-[you-project-name]-frameworks.sh 脚本文件 Flutter Library not loaded: @rpath/App.framework/App

可以看到install_framework "${PODS_ROOT}/../../[your-module-name]/.ios/Flutter/App.framework"这行脚本被自动添加了

测试

  • 不在报错Library not loaded: @rpath/App.framework/App
  • 使用FlutterEngineGroup也不再有内存异常
  • module 加载速度更快了
  • 打包也正常了

虽然降级这种方法并不是一种最好的方法,但起码目前可用,后期ruby新的版本应该会解决这个问题