一定要看到花开-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最后都词穷了。我也不知道该不该继续问下去。
这是我最终成功安装的步骤
bash
# Winning script!
brew install [email protected]
export PATH="$(brew --prefix)/opt/[email protected]/bin:$PATH"
export LDFLAGS="-L$(brew --prefix)/opt/[email protected]/lib"
export CPPFLAGS="-I$(brew --prefix)/opt/[email protected]/include"
export PKG_CONFIG_PATH="$(brew --prefix)/opt/[email protected]/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/[email protected]
# 最终我选择了用brew直接安装ruby
brew install ruby
安装成功后设置ruby的path,ruby -v验证下版本正确,ruby就搞定了
bash
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。。。。。。)
bash
# 卸载所有 CocoaPods 相关 gem
gem uninstall cocoapods cocoapods-core cocoapods-downloader
# 删除残留的可执行文件
sudo rm -f /usr/local/bin/pod
bash
# 确认当前 Ruby 路径
which ruby # 应输出 /usr/local/opt/ruby/bin/ruby(Homebrew 安装路径)
# 安装 CocoaPods
gem install cocoapods
# 验证安装路径
gem env | grep "EXECUTABLE DIRECTORY" # 应指向 Homebrew 的 Ruby gem 目录
bash
# 将 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
验证,结束
bash
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,用系统自带的终端就一点问题都没有。现在就直接用中断起服务得了。