Flutter子工程编译,Ruby升级及Cocoapods安装问题集

发布时间 2023-12-22 16:31:44作者: Joel Zeng

背景:工程为iOS原生与Flutter混合开发的工程,在编译Flutter子工程的过程中报了一个错,一度让我以为是ruby与pod的版本不兼容导致了一些奇奇怪怪的问题,随即来回折腾了Ruby环境升级与pod的升级安装。

问题1:flutter子工程执行了flutter pub get,执行flutter build ios --no-codesign时,报了如下错误,下面截取的部分报错信息为关键部分,其实日志已经说的很清楚了。

[!] CocoaPods could not find compatible versions for pod "shared_preferences_foundation":
In Podfile:
FlutterPluginRegistrant (from `../flutter子模块工程文件夹目录/.ios/Flutter/FlutterPluginRegistrant`) was resolved to 0.0.1, which depends on
shared_preferences_foundation

shared_preferences_foundation (from `../flutter子模块工程文件夹目录/.ios/.symlinks/plugins/shared_preferences_foundation/ios`)

Specs satisfying the `shared_preferences_foundation (from `../flutter子模块工程文件夹目录/.ios/.symlinks/plugins/shared_preferences_foundation/ios`), shared_preferences_foundation` dependency were found, but they required a higher minimum deployment target.

解决方案:

此问题发生在flutter子工程依赖插件shared_preferences: ^2.0.15,执行flutter pub get命令后,生成的.ios文件下platform :ios, '9.0' 默认为9.0,而 flutter子模块工程文件夹目录/.ios/.symlinks/plugins/shared_preferences_foundation/ios/shared_preferences_foundation.podspec中的s.ios.deployment_target = '11.0',两者发生了冲突,所以一定要将.ios文件中的改为11.0,即platform :ios, '11.0',之后再执行flutter build ios --no-codesign即正常。

 

问题2:安装ruby 3.0.0时报错,具体错误信息不贴了,报错原因跟openssl版本过高有关,openssl版本超过3.0时,ruby版本也需要大于3.0.0。

解决方案:安装rvm -> 再安装ruby -> 最后安装cocoapods

  • 安装rvm:curl -L get.rvm.io | bash -s stable
  • 安装指定版本的ruby:rvm install ruby-3.2.1 --with-openssl-dir=`brew --prefix openssl`(查看可支持安装的ruby版本:rvm list known,如果显示最高版本是3.0.0,此时又想安装大于3.0.0版本的ruby,不要使用命令:rvm install ruby/rvm install ruby --latest,实操发现默认会安装3.0.0版本,如果openssl版本超过3.0,此时会报错),安装完后通过ruby --version查看当前版本号,如果不是想要的,通过命令将最新版本的ruby设置为默认版本:rvm use ruby -default
  • 安装pod:sudo gem uninstall cocoapods && sudo gem install cocoapods,如果需要安装知道pod版本: sudo gem install cocoapods v 版本号(查看pod安装的历史版本:gem list/sudo gem list),之前的.cocoapods可以不用删除(重新下载太好使,代价巨大,~/Library/Caches/CocoaPods/Podsc此目录下的三方库缓存文件也可以提前进行备份),防止卸载的时候被删,可以先改个名,安装完成后再改回来,如果repo需要升级,执行命令:pod repo update --verbose

备注:ruby卸载后,pod需要重新安装。