一定要看到花开-M1下的环境噩梦

人有时候就是喜欢犯贱。

关注我这快小一年的扯闲天的都知道,自己也算是经历了一劫吧。虽然,这劫难还不能说结束,但也算是走出来了。

一切,似乎正在朝着好的方向发展。

但是,就那么突然地,我去找了个逼班上。

没几个钱,更没什么排面。开发就俩人,一个我,一个后台。剩下的几个,都是些喜欢回复“收到”的纯种牛马。

就是有点对那个蓝牙指环感兴趣,在全职和兼职之间就那么鬼使神差地选择全职,觉得可以all in一下。

然后,这个逼班就上起来了。

Day1,发现似乎这台笔记本上没运行过RN新架构下的anroid工程?铺天盖地的kvm报错。。。。。。

当时就觉得---我不该在这里,我该待家里。

创建RN工程的时候那必然会考虑到鸿蒙,就选择了0.72.5版本。就挺纳闷,0.72.5创建出来的andorid工程是java的,编译的时候node_modules里跑的全是kotlin。。。。。。调整来调整去,往anroid工程里加各种kotlin插件,各种指定版本,却也是各种无效。第一天上班,上午全员吹牛逼,下午就在那手忙脚乱整环境。kt又没用过自然是两眼一抹黑完全被deepseek牵着鼻子走。末了快下班老板又过来讨论下技术,得又是一顿说。

上班第一天,喜提扁桃腺发炎,晚上跑药店买阿奇霉素。。。。。。

Day2,破罐子破摔直接不指定RN版本初始化,android自然是默认kt的,一顿加repo换maven源,anroid跑起来了!眼一闭先不管了,直接拿高版本RN干吧。测试了下truboModule,发现和之前鸿蒙RN做的操作不一样。试了半天算是把c++的跨平台实现做掉了,但andorid原生和RN的交互codengen没生成文件,还得继续查原因。鸿蒙RN里arkts和RN之间交互是基于c++的,但anroid/ios看文档似乎c++/RN与原生/RN是turboModule的两种实现方式。这就有点懵逼了。由于干鸿蒙RN的时候就围绕着鸿蒙在开发,andorid/ios都没管,看了RN的官方指南一下子搞不明白了。

其实这原生js交互还算是小事,真正头大的是ios的开发环境:ruby死活更新不了。

问来问去,deepseek最后都词穷了。我也不知道该不该继续问下去。

这是我最终成功安装的步骤

# Winning script!
brew install openssl@1.1 export PATH="$(brew --prefix)/opt/openssl@1.1/bin:$PATH"
export LDFLAGS="-L$(brew --prefix)/opt/openssl@1.1/lib"
export CPPFLAGS="-I$(brew --prefix)/opt/openssl@1.1/include"
export PKG_CONFIG_PATH="$(brew --prefix)/opt/openssl@1.1/lib/pkgconfig" rvm autolibs disable export RUBY_CFLAGS=-DUSE_FFI_CLOSURE_ALLOC
export optflags="-Wno-error=implicit-function-declaration"
# 脚本是安装2.7.3,我安装后依然报错
#rvm install 2.7.3 --with-openssl-dir=$(brew --prefix)/opt/openssl@1.1
# 最终我选择了用brew直接安装ruby
brew install ruby

安装成功后设置ruby的path,ruby -v验证下版本正确,ruby就搞定了

  echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
ruby -v
ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +PRISM [x86_64-darwin23]

重装了ruby后,cocoapod需要卸载重装(ruby生gem,gem生cocoapod。。。。。。)

  # 卸载所有 CocoaPods 相关 gem
gem uninstall cocoapods cocoapods-core cocoapods-downloader
# 删除残留的可执行文件
sudo rm -f /usr/local/bin/pod
  # 确认当前 Ruby 路径
which ruby # 应输出 /usr/local/opt/ruby/bin/ruby(Homebrew 安装路径)
# 安装 CocoaPods
gem install cocoapods
# 验证安装路径
gem env | grep "EXECUTABLE DIRECTORY" # 应指向 Homebrew 的 Ruby gem 目录
  # 将 Homebrew 的 Ruby gem bin 目录加入 PATH,注意我的是bash_profile,如果用zshrc的换成.zshrc
echo 'export PATH="/usr/local/lib/ruby/gems/3.4.0/bin:$PATH"' >> ~/.bash_profile
# 重新加载配置
source ~/.bash_profile

验证,结束

  pod --version
1.16.2

你以为故事结束了?

这才哪到哪!

晚上偶尔跑了下鸿蒙RN,结果发现鸿蒙模拟器死活连不上RN,好嘛,这是andorid/ios环境搞得差不多了把鸿蒙环境搞崩了吗?!

才上了两天班,原本平静的生活被搅了个天翻地覆。什么ArkTS的学习,什么鸿蒙RN的开发,统统都丢在一旁。白天焦头烂额,晚上回来继续痛苦面具。多亏了这发炎的扁桃腺,也不想出去散步运动了,真的是all in 啊。

Day3,pod依赖报错,还是DoubleConversion,folly这几个老演员。都是老套路了,pod换个清华的源也就解决了。ios也算是能编译了。新的问题又来了------yarn start后无论andorid还是ios都连不到服务器。发现RN0.78下Metro是0.82,和RN0.72.5下Metro v0.76有些版本差别。不知道是不是Metro的原因。调查不出来。更奇怪的是用yarn run ios/android就可以启动DevTool,此时无论ios还是andorid把壳工程打开都能debug。你就说奇怪不奇怪吧。

当然,还有更奇怪的,昨晚那个鸿蒙RN没法连服务器,最后电脑重启了一下,居然又可以了。

总结下,现在就是鸿蒙RN还是可以yarn start来连上本地服务器,但RN0.78下的ios/android只能用yarn run ios/android。

就这么诡异,好在已经见怪不怪,能干就干,就这么开发吧。下午开始研究起codegen,跟鸿蒙RN又是有点差别,学吧,菜就多练不是。

上午去体检加上新办张工资卡,路上柳絮挺多,然后就过敏了。。。。。。喉咙那个难受,不停干咳。晚上下班又去逛药店了,这次买了盒氯雷他定。发现我买药比搞RN0.78版本熟练多了。

M1上这些问题的根源,就在于当初买回来初始化的时候选择了去复制上一台pro(2018款,x86的cpu)。这导致了很多配置都是基于x86的,虽然在Rosetta下可以兼容,却也使得开发时遇到各种莫名其妙的环境问题。21年射出去的子弹终于在25年打中了自己的眉心。

这第三天怎么说呢?算是个好日子了吧,至少两个移动端都开始能跑了。

三天,才三天,就把养了大半年的精气神耗得七七八八,好不容易攒下的一点功力都散了。想想还有Day4,Day5,DayN。。。。。。

什么为20年后人均寿命100岁而努力?分明这上班才是最折寿的事啊。

PS:后面发现似乎是VSCODE下的bash挂了导致anroid/ios下没法yarn start,用系统自带的终端就一点问题都没有。现在就直接用中断起服务得了。

一定要看到花开-M1下的环境噩梦的更多相关文章

  1. 【转】花开正当时,十四款120/128GB SSD横向评测

    原文地址:http://www.expreview.com/19604-all.html SSD横评是最具消费指导意义的评测文章,也是各类热门SSD固态硬盘的决斗疆场.SSD评测在行业内已经有不少网站 ...

  2. 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

    原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...

  3. Windows下的环境搭建Erlang

    Windows下的环境搭建 Erlang 一.安装编译器 在http://www.erlang.org/download.html下载R16B01 Windows Binary File并安装. 二. ...

  4. RF+Appium框架自动化测试系列一之(Mac下Appium环境搭建)万事开头难

    消失了3个月,有一段时间没来园子更新博客了,各位看官见谅哈哈,消失是因为刚换了工作环境没外网,好多笔记没能及时的记录分享,以后有时间慢慢补上吧,这段时间主要接触了移动端app的自动化测试,公司为了快速 ...

  5. 记一次Linux下JavaWeb环境的搭建

    今天重装了腾讯云VPS的系统,那么几乎所有运行环境都要重新部署了.过程不难懂,但是也比较繁琐,这次就写下来,方便他人也方便自己日后参考参考. 我采用的是JDK+Tomcat的形式来进行JavaWeb初 ...

  6. 跟我一起,利用bitcms内容管理系统从0到1学习小程序开发:一、IIS下SSL环境搭建

    缘起 1.从事互联网十来年了,一直想把自己的从事开发过程遇到的问题给写出来,分享给大家.可是可是这只是个种想法,想想之后就放下了,写出来的类文章是少之又少.古人说无志之人常立志,有志之人立长志.今天, ...

  7. Ubuntu下 jdk环境变量设置

    流程 1. 官网下载对应的jdk文件 2. 在根目录 / 下创建一个java目录 mkdir /java 3. 使用mv命令 将下载下来的文件(压缩格式),移动到上一步创建的/java目录下   Ps ...

  8. android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

      android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创) 一直想搞NDK开发却一直给其他事情耽搁了,参考了些网上的资料今天终于把 ...

  9. Android NDK r8 Cygwin CDT 在window下开发环境搭建 安装配置与使用 具体图文解说

    版权声明:本博客全部文章均为原创.欢迎交流.欢迎转载:转载请勿篡改内容,而且注明出处,谢谢! https://blog.csdn.net/waldmer/article/details/3272500 ...

  10. 2017.7.18 linux下ELK环境搭建

    参考来自:Linux日志分析ELK环境搭建  另一篇博文:2017.7.18 windows下ELK环境搭建   0 版本说明 因为ELK从5.0开始只支持jdk 1.8,但是项目中使用的是JDK 1 ...

随机推荐

  1. php7有哪些新特性

    目录 太空船操作符 标量类型声明和返回值的类型说明 null 合并操作符 常量数组 namespace 批量导入 非混合模式的 use 声明 混合模式的 use 声明 复合模式的 use 声明 thr ...

  2. Git安装与Git GUI的使用

    一.下载安装包 官网:https://git-scm.com/downloads(下载慢) 或 https://pc.qq.com/search.html#!keyword=git,本人使用的是Git ...

  3. anaconda创建新环境

    博客地址:https://www.cnblogs.com/zylyehuo/ anaconda创建新环境 conda create -n 环境自定义的名称 python=版本号 anaconda指定路 ...

  4. 密码加密|jsencrypt|md5|加密解密的两种方式

    一.md5 npm install md5 二.JSEncrypt 2.1 介绍 JSEncrypt属于RSA加密,RSA加密算法是一种非对称加密算法: 2.2 使用 安装: npm install ...

  5. String常见面试题

    第一题:打印的结果是true还是false呢? 在之前我们就说过这题,执行s1时,检查字符串常量池,发现没有"abc",于是创建"abc",执行s2时,接着检查 ...

  6. 【JDBC第4章】操作BLOB类型字段

    第4章:操作BLOB类型字段 4.1 MySQL BLOB类型 MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据. 插入BLOB类型的数据必须使用Pre ...

  7. 关于ASCII码的一些信息(转载自https://blog.csdn.net/na_tion/article/details/50148883)

    ASCII码分基本表(128个字符,从00000000到01111111).扩展表(256个字符,从00000000到11111111)和压缩表(64个字符),我们经常用的是128个的基本表,而在一些 ...

  8. study Rust-7【使用结构体的demo】

    fn main() { let width1 = 30; let height1 = 50; println!( "The area of the rectangle is {} squar ...

  9. nodejs参数的处理与用户的交互

    解析脚本参数 作为脚本或者命令行工具,一般都需要支持不同的用户参数.默认参数被保存在process.argv的数组中,如下: [ nodeBinary, script, arg0, arg1, ... ...

  10. yolov5常用命令记录

    一.准备深度学习环境 首先,确保你的计算机上已经安装了Python.PyTorch以及CUDA等必要的深度学习框架和库.YOLOv5对Python版本和PyTorch版本有一定的要求,通常建议使用Py ...