如何在 macOS 上同时使用 Flutter2 和 Flutter3 进行 ios 开发

news2024/9/24 3:28:42

如何在 macOS 上同时使用 Flutter2 和 Flutter3 进行 ios 开发

前言

猫哥主打系统环境是:

  • macos
  • flutter 3.7.12
  • ruby 3.2.2
  • cocoapods 1.12.1
  • xcode 14.3.1

这套配置运行最新的项目没问题,但是最近需要维护 flutter 2.10.5 这种老项目,虽然用了 fvm 进行 flutter 版本切换,但是 flutter 2.10.5 用的 ruby 2 ,我当前是 ruby 3 所以运行 pod install 的时候就报错了。

[!] Invalid `Podfile` file: undefined method `exists?' for File:Class.

 #
  from /Users/ducafecat/Documents/project-2021/helber_v2/helber_v2_flutter_210/ios/Podfile:34
 #  -------------------------------------------
 #
 >    flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
 #
 #  -------------------------------------------

这个错误很常见,因为 ruby 3 的 api 接口有变化。

今天就来说说我是怎么解决的,我是需要灵活切换旧版、新版的 IOS 开发环境。

原文 https://ducafecat.com/blog/011-flutter-macos-rvm-cocoapods-fvm

参考

https://www.moncefbelyamani.com/how-to-install-xcode-homebrew-git-rvm-ruby-on-mac/

https://www.moncefbelyamani.com/why-you-should-never-use-sudo-to-install-ruby-gems/

https://www.phusionpassenger.com/library/walkthroughs/deploy/ruby/ownserver/nginx/oss/install_language_runtime.html

https://blog.driftingruby.com/articles/2023/03/04/ruby-with-yjit.html

https://github.com/rvm/rvm

https://rvm.io/rvm/install

https://brew.sh/

https://cocoapods.org/

rvm 知识点

RVM(Ruby Version Manager)是一个用于管理 Ruby 版本的工具,它可以让您在同一台机器上安装和使用多个 Ruby 版本,并且可以为每个 Ruby 版本提供独立的 gem 环境。以下是 RVM 的一些优点:

  1. 多版本管理:使用 RVM,您可以轻松地在同一台机器上安装和管理多个 Ruby 版本。这对于开发人员来说非常有用,因为不同的项目可能需要不同的 Ruby 版本或 gem 包。

  2. gem 环境隔离:RVM 可以为每个 Ruby 版本提供独立的 gem 环境,以避免不同版本之间的 gem 包冲突。这意味着您可以在不同的 gem 环境中安装和管理 gem 包,而不会相互干扰。

  3. 简单易用:RVM 提供了一组简单易用的命令,使您可以轻松地安装、卸载、切换和管理 Ruby 版本、gem 包和 gemset。

  4. 社区支持:RVM 是一个流行的 Ruby 工具,拥有活跃的社区支持和开发团队,可以及时解决问题和更新版本。

  5. 跨平台支持:RVM 支持多种操作系统,包括 macOS、Linux 和 Windows,使您可以在不同的平台上使用相同的工具和环境。

思路

我尝试了些方法,过程如下:

  • 删除本机各种 ruby cocoapods 工具
  • 安装最新版 ruby 3.2.2
  • 安装最新版 cocoapods
  • 安装 rvm ruby 版本切换工具
  • 通过 rvm 安装 ruby 2.7.8
  • 切换 ruby 2.7.8 安装 cocoapods
  • 完成后 rvm 可以切换回系统 ruby 3.2.2 版本

步骤

注意以下操作竟可能不要用 sudo 执行,否则权限会乱掉。

第一步:准备环境

卸载旧版 ruby 2 和 ruby 版本工具(rvm rbenv asdf frum)

安装 homebrew

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

brew 升级到最新

$ brew update && brew doctor

检查自己的系统芯片 arm64 x86_64

$ uname -m

清理错误的配置,有些包管理工具会写下面的配置文件

~/.zshrc
~/.zprofile
~/.zlogin
~/.bash_profile
~/.profile
~/.bashrc
~/.config/fish/config.fish

主要是 .zshrc .bash_profile .profile

第二步:安装 ruby 最新版

安装 ruby 3.2.2

$ brew install ruby

配置 ruby 环境

$ vi ~/.bash_profile

# ruyb
# intel 芯片
if [ -d "/usr/local/opt/ruby/bin" ]; then
  export PATH=/usr/local/opt/ruby/bin:$PATH
  export LDFLAGS="-L/usr/local/opt/ruby/lib"
  export CPPFLAGS="-I/usr/local/opt/ruby/include"
  export PATH=`gem environment gemdir`/bin:$PATH
fi
# m1 silicon 芯片
if [ -d "/opt/homebrew/opt/ruby/bin" ]; then
  export PATH=/opt/homebrew/opt/ruby/bin:$PATH
  export LDFLAGS="-L/opt/homebrew/opt/ruby/lib"
  export CPPFLAGS="-I/opt/homebrew/opt/ruby/include"
  export PATH=`gem environment gemdir`/bin:$PATH
fi

查看版本

$ ruby -v
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-darwin22]

安装 cocoapods

$ gem install cocoapods

第三步:安装 rvm 版本管理

安装 rvm

$ curl -sSL https://get.rvm.io | bash -s stable

rvm 查看可安装版本

$ rvm list known

安装 ruby 2.7.8

$ rvm install ruby-2.7.8 --default

rvm 切换版本

$ rvm use ruby-2.7.8

安装 cocoapods

$ gem install cocoapods

rvm 会自动管理 gem 不同 ruby 版本的隔离

使用

切换 flutter 2.10.5

fvm 切到 2.10.5

$ fvm global 2.10.5

rvm 切到 ruby 2.7.8

$ rvm use ruby-2.7.8

cocoapods 拉包

cd ios
$ pod install

切换 flutter 3.7.12

rvm 还原系统

$ rvm reset

fvm 切到 3.7.12

$ fvm global 3.7.12

cocoapods 拉包

cd ios
$ pod install

小结

大家可以看到现在可以顺利的切换 flutter 2&3 的开发环境了,如果你有和我相同需求的,可以动手试试。

感谢阅读本文

如果我有什么错?请在评论中让我知道。我很乐意改进。


© 猫哥 ducafecat.com

end

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/713359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

武汉理工大学第四届ACM校赛(部分补题与写题)

开裂 目录 k-雇佣农民 题目描述 输入描述: 输出描述: 输入 输出 备注: 小e的苹果树 不降序列 k-雇佣农民 题目描述 Ly很喜欢星际争霸二这款游戏,但是他现在玩不到了。所以Ly现在只能做一个关于农民的题消磨时光。 开始时Ly没有任何农民,第i天白…

三、QPushButton的使用,信号和槽

QT从入门到实战学习笔记 一、QPushButton的创建二、中文要设置成UTF-8格式才不会乱码三、对象树1、验证被释放掉 四、QT窗口坐标系九、信号和槽---点击按钮关闭窗口1、查询signal信号的定义(帮助文档)2、搜索QWidget查找槽函数(slot是槽的意思…

华为freebuds 5无线充电充不上电怎么办?

相信很多人都会遇到跟我一样的问题,华为FreeBuds 5无线充电充不进电是怎么回事?为此我专门整理了以下的经验,相信对大家有所帮助。 1. 充电时要把耳机盒保护套拆下来,耳机盒与充电底座之间不要有东西挡着。这样耳机盒充电时可以更…

jenkins的环境搭建

jenkins 环境 安装 我之前使用war安装、安装比较简单、就是jenkins的 对应的插件不能下载下来、后来发现是版本的问题、使用docker-compose 安装、jenkins安装 插件很容易安装下来 1、安装jdk 解压jdk 配置环境变量 #set java environment JAVA_HOME/usr/local/jdk1.8.0_281…

基于单片机和GSM短信模块的家庭防盗火灾安全报警系统

wx供重浩:创享日记 对话框发送:627短信 获取完整论文报告(含无水印图片和代码) 本系统主要由单片机和GSM短信模块组成,借助最可靠、最成熟的GSM移动网络,以最直观的中文短消息或电话形式,直接把…

392.04亿元?台积电公布下一代工艺发展路线图,2纳米2025 年投产

台积电近日在日本举办了一次研讨会,详细介绍了N3E工艺节点的最新进展和引人注目的性能提升。此外,台积电还公布了令人期待的下一代N2工艺的发展路线图。 台积电副总裁Kevin Zhang透露,公司正以迅猛速度发展,预计2022年的投资金额将…

360测试开发技术面试题目

目录 一、java方面 二、Linux方面 三、数据库方面 四、性能测试方面 五、HTTP协议方面 六、其他 总结: 最近面试了360测试开发的职位,将面试题整理出来分享~ 一、java方面 1、java重载和重写的区别 重载overloading 多个方法、相同的名字&#x…

CF578A(直线方程 + 数学) 1700

CF578A(直线方程 数学) 1700 有一条折线 , 这个折线经过这样一组点: (0,0) - (x,x) - (2x,0) - (3x,x) - (4x,0) - ....现给出折线上一点 , 求 x 的最小值 思路:我们不妨用解方程的思想 ,先写出折线的方程&#xf…

AIGC-stable-diffusion系列1- stable-diffusion-webui

安装方法1,源码安装 参考 repo参考地址:https://github.com/AUTOMATIC1111/stable-diffusion-webui python下载地址:https://www.python.org/downloads/release/python-3106/ git下载地址:https://git-scm.com/download/win 官…

逻辑回归模型

目录 引言 逻辑回归的理论基础 逻辑回归的实践 实战案例:银行营销预测 超越逻辑回归 引言 我们在上一篇文章中讨论了线性回归模型,探讨了如何利用它来解决连续变量预测的问题。今天,我们将转向一种新的模型——逻辑回归,它用…

TIDB v7.1 reource control资源管控特性体验贴

作者: bert 原文来源: https://tidb.net/blog/60c87e38 TIDB v7.1 reource control资源管控特性体验贴 1. 使用场景: 定义:TIDB的资源管控 (Resource Control) ,使用资源管控特性,将用户绑定到某个资源…

摇骰子设计与实现(uni-app微信小程序)

文章目录 摇骰子设计与实现准备工作实现步骤以及思路第一步:实现准备状态第二步:实现晃动中状态第三步:等待开起状态第四步:开启后状态部分优化 总代码 摇骰子设计与实现 手机摇一摇可以摇骰子,上划可查看结果&#x…

桥梁健康监测:时刻感知桥梁“脉搏”

随着交通量的不断增加,桥梁作为一种重要的交通基础设施,其安全性和可靠性面临着日益严峻的挑战。桥梁健康监测是保障桥梁安全和预防桥梁事故的重要手段,本文将介绍桥梁健康监测的意义、技术手段和应用案例。 一、桥梁健康监测的意义 保障交通…

解决React18+ts项目导入模块的声明报错

路径配置 项目路径别名的配置 ts对指向src的目录提示是不支持的 所以需要手动配置符号指向 在vite.config.ts import path from path export default defineConfig({plugins:[react()],resolve:{alias:{"":path.resolve(__dirname, ./src)}} })但这时path模块引入会…

阿里30K测试开发岗位面试过程

面试总结 a.测开岗考察内容与软开岗类似,难度相对较小 b.阿里是一面技术面试官协调推进面试流程,HR参与较少 c.遇到的面试官都很nice 一面 自我介绍项目C基础 C底层如何进行内存分配 C是面向对象的编程,类中默认的拷贝构造函数是浅复制…

使用 ANTMAN 工具替换 OceanBase 云平台节点

OceanBase 环境基本都会先安装 OCP 来部署、监控、运维数据库集群。但如果有机器过保等问题,就需要有平稳的 OCP 节点的替换方案。 作者:张瑞远 上海某公司 DBA,曾经从事银行、证券数仓设计、开发、优化类工作,现主要从事电信级 I…

旅游卡景区购票小程序开发定制

旅游业的蓬勃发展,越来越多的景区开始推出自己的旅游卡,以吸引更多的游客前来观光。同时,为了更加便捷地服务游客,许多景区也开始启用小程序来进行门票售卖和游客管理。针对这种情况,专业的小程序开发公司推出了定制旅…

机器学习-特征选择:如何使用相关性分析精确选择最佳特征?

一、引言 「特征选择」在机器学习中发挥着重要的作用,它的目标是从众多可用特征中挑选出最具预测能力的特征子集,以提高模型性能和泛化能力。然而,由于现实中的数据集通常具有大量特征和复杂的相关性,特征选择变得非常具有挑战性。…

[ 云计算 | AWS ] IAM 详解以及如何在 AWS 中直接创建 IAM 账号

本章节主要介绍 IAM 相关知识点以及在 AWS 控制台窗口如何创建一台 Amazon IAM 账号。 文章目录 一、什么是 IAM?二、IAM 常见种类2.1 EIAM2.2 CIAM2.3 云厂商 IAM 三、账号(Account)三户模型 四、认证(Authentication&#xff09…

java使用Tess4J实现OCR图片文字识别

目录 介绍一、maven如下二、下载语言模型1.下载语言模型2.百度云下载 三、测试1.测试代码2.测试图片3.效果 介绍 Tess4J 是 Tesseract OCR 的 java api 实现库,你可以通过 java 调用来轻松的实现图片识别并提取文字,也就是 OCR 图片提取文字技术。 Tes…