背景
公司的项目排除三方库的代码已经超过 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
网友评论