macOS 开发环境配置指北

在入门款 MBA M1 上搭建 macOS 12.7 的日常开发工作流记录

  ·  2 min read

前言 #

这是一份记录我在 MacBook Air M1(8G / 256G) 上搭建开发环境的随手笔记。已经是一台近 5 岁高龄的老笔记本了(虽然这样的老笔记本还有不少),考虑续航、温控和稳定性,我把系统锁定在 macOS 12.7(Monterey),避免频繁升级带来的兼容问题。整体目标是:确保基础开发功能齐全,终端体验顺手,同时维持系统的整洁与可维护性。

设备体验 #

  • MBA M1 的单风扇无风扇散热和出色续航非常适合日常开发、轻度虚拟化与远程工作。性能有限,而且还是低配版,但通过合理的软件选择可以获得流畅体验。
  • 为什么是 macOS 12.7:Monterey 在 Apple Silicon 上已经相当成熟,能兼容主流开发工具,虽然体验不到新系统新特性,但是功耗续航都十分可观。
  • 系统安装习惯:保持 APFS 单分区,关闭自动升级,只在安全更新或确定兼容性时手动触发。安装完成后第一时间登录 Apple ID 以同步 Keychain 和常用设置。

初始设置清单 #

  1. 系统更新系统设置 → 通用 → 软件更新,仅安装安全补丁,关闭“自动更新”。
  2. 基本偏好:触控板(轻点点击)、Dock(位置调整),这些都是按照个人习惯任意调整。

开发工具安装策略 #

1. Xcode Command Line Tools #

如果不用 switft 语言开发以及 Apple 相关开发需求的话,完整的 Xcode 就没必要进行安装了,直接安装相应的命令行工具即可。

xcode-select --install

安装完成后通过 xcode-select -p 确认路径是否正确。如果后续有需求安装了完整 Xcode,也可以重新指定 CLI 工具路径。

└─> xcode-select -p  
/Library/Developer/CommandLineTools

2. Homebrew 为核心包管理器 #

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

## 之后还要加入环境变量(仅供参考,具体看安装完成后的终端信息)
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/asada/.zprofile

eval "$(/opt/homebrew/bin/brew shellenv)"

基础软件包建议:

## 更新软件包
brew update
brew install git wget curl tree openssl coreutils gnupg

先前安装 openssl@3 的时候会在 make check 阶段发生错误,但我最近重新配置的时候发现又可以直接安装了,只适合提示警告。如果有遇到 make check 报错的情况,可以查看这个讨论进行解决:# openssl@3 fails to build. 思路是类似的。

至于其他还缺少的软件包,会在 homebrew 安装其他软件时自动补全。

安装 llvm 会非常耗时,大概会持续满载运行 2 - 3 个小时,属于不得不品鉴的一环 —— 当然也可以直接使用官方的预编译包,就是可能得重新配置一下链接上 homebrew,一些细节可以参考这篇博文

3. 编程语言管理 #

编译器与包管理器的选择很看个人喜好,我的习惯是尽量“能隔离就隔离”,保证项目之间互不污染,这部分就不过多赘述了。

Shell 与终端美化 #

1. 终端应用与主题 #

我依旧使用系统自带的 Terminal.app,挑一份对比度舒适的 Pro 主题做微调:调低透明度、启用自然暗色背景,再为不同 Profile 设定独立配色便于区分远程主机。

配色之外,真正决定体验的是 .zshrc 的结构,因为在 powershell 上非常喜欢那个Tokyo的主题,所以在 macOS 上也尝试用 oh-my-posh 渲染提示符:

# ~/.zshrc(节选)

## 基础环境
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:$PATH"
# Intel Mac 可改为:/usr/local/bin:/usr/local/sbin

## Oh My Zsh
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME=""  # 交给 oh-my-posh 管理提示符
plugins=(git zsh-autosuggestions fzf zsh-syntax-highlighting autojump thefuck zsh-history-substring-search)
source "$ZSH/oh-my-zsh.sh"

## 外部工具初始化
[[ -f "$(brew --prefix)/opt/fzf/shell/completion.zsh" ]] && source "$(brew --prefix)/opt/fzf/shell/completion.zsh"
[[ -f "$(brew --prefix)/opt/fzf/shell/key-bindings.zsh" ]] && source "$(brew --prefix)/opt/fzf/shell/key-bindings.zsh"
[[ -f "$(brew --prefix)/etc/profile.d/autojump.sh" ]] && source "$(brew --prefix)/etc/profile.d/autojump.sh"
command -v thefuck >/dev/null && eval "$(thefuck --alias)"
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down

## oh-my-posh(终端主题)
eval "$(oh-my-posh init zsh --config "$(brew --prefix oh-my-posh)/themes/tokyo.omp.json")"

2. 字体选择 #

终端提示符塞了很多小图标之后,直接选用带 Nerd 补丁的等宽字体最省心。我个人常驻的是 ComicShannsMono Nerd Font:造型有点俏皮,字宽也不是最规整,但习惯后看上去非常放松。若你更看重清晰度,JetBrainsMono Nerd FontMesloLGS NF 等会更稳。无论最终选哪一款,字号保持在 13–14pt、适度调大行距,再开启连字,就能在信息密度和可读性之间取得平衡。

网络代理与同步 #

1. 系统层代理 #

日常使用 Clash 作为系统代理,只需要订阅链接或者订阅文件就可以同步。可以安装插件并开启 TUN 模式,就可以接管系统的所有流量。不过还是十分担心我贫瘠的流量() 所以日常绝大部分情况都是手动挂个回环代理:

export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

结语 #

在入门款 MBA M1 上,macOS 12.7 的开发体验核心依旧是还是“轻量而稳定”,哪怕以及过去了将近五年。只要把系统维持在可控状态,靠 Homebrew 管好软件包,再配上一套顺手的终端与代理,就足以应付日常开发、记笔记,乃至上课通勤时的零碎工作。说到底,我始终把这台机器当成可靠的伙伴:它还在源源不断地帮我写代码、记生活,这份生产力与情感的价值得让我舍不得换新。既然已经相处出了默契,就继续好好维护它,直到它停止工作的那一刻吧。