公司发了 MacBook,你仍按 <kbd>Ctrl+S</kbd> 保存、在资源管理器里找解决方案—— muscle memory 比工具链更难迁。本文按「首日能编译、首周能提 PR、首月能跑 CI」三阶段给出可执行清单。
如果你刚拿到 MacBook,第一反应仍是去「开始菜单」找 Visual Studio,或者在资源管理器里双击 .sln——这说明最难迁的不是 SDK,而是肌肉记忆。本文面向 Visual Studio / Visual Studio Code 在 Windows 上泡了多年的 .NET、C++ 或全栈开发者,按「首日能编译、首周能提 PR、首月能跑 CI」三阶段,给出可复制的环境清单;文末说明何时把 iOS 构建 offload 到 云端 Mac。
首日两小时:让终端、Git 与 dotnet 先跑起来
别一上来就装完整 Xcode。按下面顺序,通常 120 分钟内 能恢复「打开解决方案 → F5 调试」的主路径。
1. Command Line Tools 与 Homebrew
xcode-select --install # 弹窗确认;仅需 Git、clang 时够用
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
Apple Silicon 上 Homebrew 前缀是 /opt/homebrew(Intel 为 /usr/local)。装完后用 brew doctor 确认无报错。
2. .NET SDK 与常用 CLI
brew install --cask dotnet-sdk
brew install git gh jq fzf ripgrep
dotnet --info # 确认 SDK 版本与 RID(osx-arm64)
团队若锁定 SDK 版本,在项目根加 global.json:
{
"sdk": {
"version": "8.0.400",
"rollForward": "latestFeature"
}
}
3. Git 身份与换行符
git config --global user.name "你的名字"
git config --global user.email "you@company.com"
git config --global core.autocrlf input # Mac 侧推荐 input,避免 Windows 同事收到整库换行 diff
踩坑记录: 从 Windows 克隆的仓库若出现「所有文件 modified」,九成是
core.autocrlf与.gitattributes不一致。首日先统一团队规范,比日后洗历史便宜。
IDE 怎么选:Rider、VS Code 还是保留 Windows?
微软已结束 Visual Studio for Mac 支持(2024-08)。现实选项如下:
| 工具 | 适合谁 | 迁移成本 | 备注 |
|---|---|---|---|
| JetBrains Rider | 原 Visual Studio 重度用户、ReSharper 党 | 低 | 解决方案结构、重构、NuGet、调试体验最接近 VS;付费 |
| VS Code + C# Dev Kit | 已习惯 VS Code、轻量仓库 | 很低 | 免费;大解决方案索引与重构弱于 Rider |
| VS Code + Cursor | AI 辅助编码为主 | 低 | 与 VS Code 扩展生态兼容;Agent 会频繁调终端 |
| 完整 Xcode | iOS / macOS / MAUI iOS 目标 | 中 | 仅在做 Apple 平台时必须;体积大、更新频 |
| Parallels / 远程 Windows | 遗留 WinForms、WPF、特定 VS 插件 | 高 | 应急可以,不建议当日常主力 |
建议决策:
- 纯 ASP.NET Core / API / 控制台 → Rider 或 VS Code 二选一即可。
- .NET MAUI 且要发 iOS → 本机 Rider + Xcode(或 VS Code + Xcode CLI);Android 模拟器在 Mac 上可直接跑。
- 团队统一 ReSharper 规则 → Rider .license 与公司 JetBrains 账号对齐。
键位与窗口管理:Ctrl 肌肉记忆如何三天切换
Mac 上 ⌘ 取代 Windows 的 Ctrl 承担「保存、复制、粘贴、撤销」。对照表建议打印贴在显示器边:
| 动作 | Windows (VS) | macOS |
|---|---|---|
| 保存 | Ctrl+S | ⌘+S |
| 撤销 | Ctrl+Z | ⌘+Z |
| 注释行 | Ctrl+K, Ctrl+C | ⌘+/(VS Code/Rider 可改) |
| 调试 | F5 | ⌘+↩ 或 F5(需勾选功能键) |
| 搜索全解决方案 | Ctrl+Shift+F | ⌘+Shift+F |
| 切换应用 | Alt+Tab | ⌘+Tab |
窗口管理 是第二痛点:建议安装 Rectangle(免费)或 Magnet,用 ⌃+⌥+方向键 实现 Win11「贴靠布局」。多显示器时,系统设置 → 显示器 → 独立显示器空间,避免全屏应用在屏幕间乱跳。
终端、Shell 与 Docker:从 PowerShell 到 zsh
推荐最小套件
brew install starship eza bat fd
# ~/.zshrc 片段
eval "$(starship init zsh)"
alias ls='eza --icons'
alias cat='bat'
- PowerShell 用户
- 可 `brew install powershell`,但团队脚本多为 bash/zsh;长期仍建议把个人 alias 迁到 zsh。
- Docker Desktop
- 与 Windows 版类似;Apple Silicon 注意镜像架构(
linux/arm64vsamd64)。数据库容器化后,连接字符串里的localhost在 Mac 上同样有效。 - 数据库 GUI
- Azure Data Studio、DBeaver、TablePlus 均有 macOS 版;SSMS 无原生 Mac,用 Azure Data Studio 替代。
.NET MAUI 与 iOS:本机开发、构建分流
MAUI 跨平台项目在 Mac 上的典型分工:
- Rider / VS Code:编辑共享 UI 与业务逻辑。
- 本机模拟器:调试 iOS/Android 界面(需 Xcode + Android Studio 模拟器)。
- Release Archive:
dotnet publish触发 Xcode 工具链;CI 上更稳的是固定 macOS 节点。
若你来自 仅 Windows 的 Visual Studio,第一次打 iOS 包会在签名、Provisioning Profile 上卡很久——这与 IDE 无关,是 Apple 流程。可参考 Apple Developer — Xcode 支持 核对 SDK 与 macOS 版本对应关系。
首周清单:团队协同时别漏项
| 类别 | 检查项 |
|---|---|
| 身份与密钥 | SSH key 加到 GitHub/GitLab;gh auth login 或公司 SSO |
| 包源 | nuget.config 指向内部 feed;dotnet nuget list source |
| 证书 | Apple 开发证书导出 .p12 或在 CI 用 Base64 secret |
| 环境变量 | direnv 或 .env 不入库;用 1Password / 公司 Vault |
| 格式化 | editorconfig + dotnet format 与 Windows 同事对齐 |
| 预提交 | husky / pre-commit 在 Mac 上同样可跑 |
Visual Studio 功能在 Mac 上的落点
| VS (Windows) 习惯 | Mac 等价做法 |
|---|---|
| 解决方案资源管理器 | Rider Solution 窗口 / VS Code Explorer |
| NuGet 包管理器 UI | Rider NuGet 工具窗口;或 CLI dotnet add package |
| 服务器资源管理器 / SQL | Azure Data Studio、Rider 数据库工具 |
| IIS Express | dotnet run Kestrel;Docker 反代 |
| WinForms 设计器 | 无原生 Mac 设计器 → Windows VM 或重写为 Web/MAUI |
| Test Explorer | Rider 测试窗口;dotnet test |
| 性能分析器 | dotnet-trace、Instruments(原生)、JetBrains dotTrace |
何时用云端 Mac,而不是继续堆本机配置
下面场景在 Visual Studio 迁 Mac 的团队里很常见:
- Windows 仍是公司标准桌面,仅移动组需要 macOS 构建 → 租独享 Mac,Windows 上 SSH 触发流水线。
- 多 Xcode 版本矩阵(同时维护 iOS 16/17/18 客户端)→ 本机装多个 Xcode 占磁盘;云端按节点拆分更干净。
- 短期客户项目,三个月后要交 iOS 包 → 日租/周租比买 Mac mini 回本快。
不确定时,在采购第二台「专门构建用 Mac」之前,用日租跑一轮真实仓库的 xcodebuild archive,再对比 36 个月 TCO。站内另有 GitHub Actions macOS Runner 节点成本 一文可对照。
收束:迁移的是工作流,不是某一个 IDE
Visual Studio 开发者转 Mac,首日 搞定 Homebrew、dotnet、Git 与 IDE 选型;首周 统一换行符、密钥与团队脚本;首月 把 iOS CI 与重编译从笔记本剥离到稳定 macOS 节点。工具会变(Rider、VS Code、Cursor),但「能编译、能调试、能交付」的节奏不应被打断。
若你正在配置 MAUI + iOS 流水线,本机保持轻量,把 Archive 交给云端 Mac——算力用在编译上,而不是闲置在抽屉里。
本机写代码,云端 Mac 跑 iOS 构建
Visual Studio 迁到 Mac 后,.NET 日常开发可在本机完成;MAUI / 原生 iOS 的 Archive 与 CI 更适合 offload 到独享云端 Mac mini。SSH 接入、按日/周/月计费,无需为偶尔构建再买第二台硬件。
不确定环境是否够用?先用日租跑一轮真实 `xcodebuild`,再决定本机要装多少 Xcode 组件。
延伸阅读
常见问题
Mac 上还有 Visual Studio 吗?
微软已停止 Visual Studio for Mac(2024 年 8 月结束支持)。.NET 开发者首选 JetBrains Rider 或 VS Code + C# Dev Kit;需要完整 Windows 工具链时可保留 Parallels/远程 Windows 机器,但不建议作为日常主力。
Ctrl 和 Cmd 怎么快速适应?
系统设置 → 键盘 → 勾选「将 F1、F2 等键用作标准功能键」按需调整;在 Rider/VS Code 里可安装 IntelliJ IDEA Keymap 或 Visual Studio Keymap 扩展。前三天刻意用外接键盘贴一张 Ctrl→⌘ 对照条,比背快捷键表更有效。
.NET 项目在 Mac 上能原样跑吗?
ASP.NET Core、控制台、类库通常 dotnet restore && dotnet run 即可。注意路径分隔符、换行符(core.autocrlf)和仅 Windows 的 API(如部分 WMI)。MAUI iOS 目标必须在 macOS + Xcode 环境构建,Android 可在 Mac 上完整开发。
必须装 Xcode 吗?
只做 .NET / Web / 后端:不必装完整 Xcode,装 Xcode Command Line Tools(xcode-select --install)即可满足 Git、编译原生依赖。要做 iOS 模拟器、Archive 或 Swift 混编,才需要完整 Xcode(体积 30GB+)。
终端用 iTerm 还是系统 Terminal?
二者皆可。习惯 PowerShell 的开发者推荐 iTerm2 + Homebrew zsh + starship,并配置 ls→eza、cat→bat 等别名。团队脚本若依赖 bash,在 shebang 写 #!/usr/bin/env bash 避免 zsh 语法差异。
什么时候该租云端 Mac 而不是本地配环境?
当你需要 7×24 iOS CI、多版本 Xcode 矩阵、或 Windows 主力机 + 偶尔签名上架时,本地 Mac 可能闲置或配置冲突。按需租用独享 Mac mini 跑 xcodebuild / 自建 Runner,本机继续用 Rider 写代码,比每人配一台构建机更省预算。