工作项目从 Intel 迁移 M1 过程

背景

公司的项目排除三方库的代码已经超过 270 万行,且项目编译时还加了些脚本。在 MacBook Pro 16-inch i7 2.6 的电脑上在不改代码的情况下 Run 一次就得两三分钟,改几行代码就是四五分钟,对工作来说非常浪费时间。公司有同事已经换成 M1,发现速度快很多,一般在 30 秒左右。于是决定换 M1 。
换用 M1 我不想开启 Rosetta,看资料说会有些性能损耗,虽然加上这部分损耗也比 Intel 快,不过我还是想用苹果标准的方案。

环境

  • MacBook Pro (13-inch, M1, 2020)
  • macOS Monterey 12.4
  • Xcode 13.4.1 13F100

过程

1. 安装 brew

官网 https://brew.sh/ 的安装命令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

2. 安装 cocoapods

brew install cocoapods

因 macOS Monterey 12.4 Ruby 环境的不同,使用官方 sudo gem install cocoapods 能安装成功,但有些项目 pod install 时会报错,所以使用 brew 安装。

pod install 报错问题
https://github.com/CocoaPods/CocoaPods/issues/10518

3. 安装 ccache

  • 项目较大,为提高平时增量编译的速度,我们用了 ccache。
  • 使用 brew 安装 brew install ccache
  • 安装后终端中可以正常执行 ccache ,但 Xcode 中却找不到 ccache 命令。原因是 Xcode 中的 $PATH 值与终端不同,终端会加载 .zshrc .zprofile 中配置的 $PATH,但 Xcode 只加载了几个系统基本的目录和 Xcode 的几个目录(具体可以在 Xcode 工程脚本中输出 $PATH 查看),所以找不到命令。
  • 解决:将 ccache 链接到 bin 目录,通过 brew 安装的 ccache 在 /opt/homebrew/bin/ccache,执行以下命令将 ccache 链接到 bin 目录以,让 Xcode 能访问到。
# 将 ccache 链接到 bin 目录
sudo ln -s /opt/homebrew/bin/ccache /usr/local/bin/ccache

4. 安装 python 2

  • 工程中好些脚本使用 python 编写,macOS 12.4 弃用了 python 2 只带了 python3 ,原来脚本中的 python 命令也就找不到了。
  • 从官网下载安装包 https://www.python.org/ftp/python/2.7.18/python-2.7.18-macosx10.9.pkg 安装。
  • 安装证书,执行 /Applications/Python\ 2.7/Install\ Certificates.command ,用于 python 中的网络请求。
  • 安装 opencc-python,我们脚本中有用到这个库。执行 pip install opencc-python 会失败,手动下载错误提示上方的组件包 https://files.pythonhosted.org/packages/2d/35/afa677ced911b672e0f099856a565514a670b505f94d1150c77ce0c73a7a/opencc-python-0.1.zip,解压后修改 setup.py 文件中的内容,将前两行代码注释掉,修改后:
# from distribute_setup import use_setuptools
# use_setuptools()
from setuptools import setup, find_packages
  • 修改后执行 python setup.py install 及可。

opencc-python 安装失败问题
https://blog.csdn.net/a3335581/article/details/82802820

5. 工程 Run 模拟器编译失败

  • 以上操作过,工程已经可以在设备上调试了,但 Run 模拟器一直报错,在 link 阶段提示 Undefined symbols for architecture x86_64,网上搜到大部分的解决方式是开启 Rosetta,试过开启后是可以解决,但前面已经说过原因,我不想开启。
  • 就我们工程的解决方法:所有 Target 的 Build Settings 中
    Architectures 改为默认值 $(ARCHS_STANDARD)
    Build Active Architecture Only 的 Debug 改为默认的 Yes
    Podfile 中增加配置
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
    end
  end
end

清除 Xcode、pod 缓存后 pod install,模拟器和设备上成功 Debug 起来。

Run 模拟器编译失败问题
https://juejin.cn/post/6989958874740555789

你可能感兴趣的:(工作项目从 Intel 迁移 M1 过程)