You got a MacBook but still hit <kbd>Ctrl+S</kbd> and hunt for solutions in File Explorer—muscle memory is harder to migrate than SDKs. This guide follows compile on day one, PR in week one, CI in month one.
If you just got a MacBook and your first instinct is still to hunt for Visual Studio in a "Start menu" or double-click a .sln in File Explorer—that tells you the hardest thing to migrate isn't the SDK, it's muscle memory. This article is for .NET, C++, or full-stack developers who spent years on Visual Studio or Visual Studio Code on Windows. It walks through a reproducible environment checklist in three phases—"compile on day one, open a PR in week one, run CI in month one"—and closes with when to offload iOS builds to a cloud Mac.
First two hours: get terminal, Git, and dotnet running
Don't install the full Xcode suite right away. Follow the order below and you can usually restore the main path of open solution → F5 debug within 120 minutes.
1. Command Line Tools and Homebrew
xcode-select --install # Confirm in the dialog; enough when you only need Git and 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)"
On Apple Silicon, Homebrew's prefix is /opt/homebrew (Intel uses /usr/local). After install, run brew doctor to confirm there are no errors.
2. .NET SDK and common CLIs
brew install --cask dotnet-sdk
brew install git gh jq fzf ripgrep
dotnet --info # Confirm SDK version and RID (osx-arm64)
If your team pins an SDK version, add global.json at the project root:
{
"sdk": {
"version": "8.0.400",
"rollForward": "latestFeature"
}
}
3. Git identity and line endings
git config --global user.name "Your Name"
git config --global user.email "you@company.com"
git config --global core.autocrlf input # input recommended on Mac; avoids whole-repo line-ending diffs for Windows teammates
Gotcha: If a repo cloned from Windows shows "all files modified," nine times out of ten it's
core.autocrlfand.gitattributesout of sync. Align team conventions on day one—cheaper than rewriting history later.
Choosing an IDE: Rider, VS Code, or keep Windows?
Microsoft ended support for Visual Studio for Mac (August 2024). Realistic options today:
| Tool | Best for | Migration cost | Notes |
|---|---|---|---|
| JetBrains Rider | Heavy Visual Studio users, ReSharper fans | Low | Solution structure, refactoring, NuGet, debugging closest to VS; paid |
| VS Code + C# Dev Kit | Already on VS Code, lighter repos | Very low | Free; indexing and refactoring weaker than Rider on large solutions |
| VS Code + Cursor | AI-assisted coding first | Low | Compatible with VS Code extension ecosystem; Agent will hit the terminal often |
| Full Xcode | iOS / macOS / MAUI iOS targets | Medium | Required only for Apple platforms; large download, frequent updates |
| Parallels / remote Windows | Legacy WinForms, WPF, specific VS plugins | High | Fine for emergencies, not a daily driver |
Decision guide:
- Pure ASP.NET Core / API / console → Rider or VS Code, pick one.
- .NET MAUI with iOS shipping → local Rider + Xcode (or VS Code + Xcode CLI); Android emulator runs fine on Mac.
- Team standardizes on ReSharper rules → align Rider license with company JetBrains account.
Keymaps and window management: switching Ctrl muscle memory in three days
On Mac, ⌘ replaces Windows Ctrl for save, copy, paste, and undo. Print this cheat sheet and tape it beside your monitor:
| Action | Windows (VS) | macOS |
|---|---|---|
| Save | Ctrl+S | ⌘+S |
| Undo | Ctrl+Z | ⌘+Z |
| Comment line | Ctrl+K, Ctrl+C | ⌘+/ (customizable in VS Code/Rider) |
| Debug | F5 | ⌘+↩ or F5 (enable function keys) |
| Search solution | Ctrl+Shift+F | ⌘+Shift+F |
| Switch apps | Alt+Tab | ⌘+Tab |
Window management is the second pain point: install Rectangle (free) or Magnet, and use ⌃+⌥+arrow keys for Win11-style snap layouts. On multiple monitors, go to System Settings → Displays → Displays have separate Spaces so fullscreen apps don't jump between screens.
Terminal, shell, and Docker: from PowerShell to zsh
Recommended minimal kit
brew install starship eza bat fd
# ~/.zshrc snippet
eval "$(starship init zsh)"
alias ls='eza --icons'
alias cat='bat'
- PowerShell users
- You can `brew install powershell`, but team scripts are usually bash/zsh; long term, migrate personal aliases to zsh.
- Docker Desktop
- Similar to the Windows edition; on Apple Silicon watch image architecture (
linux/arm64vsamd64). After containerizing databases,localhostin connection strings works the same on Mac. - Database GUIs
- Azure Data Studio, DBeaver, and TablePlus all have macOS builds; SSMS has no native Mac client—use Azure Data Studio instead.
.NET MAUI and iOS: local dev, split builds
Typical division of labor for cross-platform MAUI projects on Mac:
- Rider / VS Code: edit shared UI and business logic.
- Local simulators: debug iOS/Android UI (requires Xcode + Android Studio emulator).
- Release archive:
dotnet publishtriggers the Xcode toolchain; a fixed macOS node is more reliable on CI.
If you're coming from Windows-only Visual Studio, your first iOS package will stall on signing and provisioning profiles for a while—that's Apple workflow, not IDE choice. See Apple Developer — Xcode support to match SDK and macOS versions.
Week-one checklist: don't miss these with the team
| Category | Check |
|---|---|
| Identity & keys | SSH key on GitHub/GitLab; gh auth login or company SSO |
| Package feeds | nuget.config points to internal feed; dotnet nuget list source |
| Certificates | Export Apple dev cert as .p12 or use Base64 secret in CI |
| Environment variables | direnv or .env not in repo; use 1Password / company vault |
| Formatting | editorconfig + dotnet format aligned with Windows teammates |
| Pre-commit | husky / pre-commit runs fine on Mac too |
Where Visual Studio habits land on Mac
| VS (Windows) habit | Mac equivalent |
|---|---|
| Solution Explorer | Rider Solution window / VS Code Explorer |
| NuGet Package Manager UI | Rider NuGet tool window; or CLI dotnet add package |
| Server Explorer / SQL | Azure Data Studio, Rider database tools |
| IIS Express | dotnet run Kestrel; Docker reverse proxy |
| WinForms designer | No native Mac designer → Windows VM or rewrite as Web/MAUI |
| Test Explorer | Rider test window; dotnet test |
| Profiler | dotnet-trace, Instruments (native), JetBrains dotTrace |
When to use a cloud Mac instead of piling on local config
These scenarios come up often in teams moving from Visual Studio to Mac:
- Windows remains the company standard desktop, only mobile needs macOS builds → rent a dedicated Mac, trigger pipelines over SSH from Windows.
- Multiple Xcode version matrix (maintaining iOS 16/17/18 clients at once) → several Xcodes eat disk locally; splitting nodes in the cloud is cleaner.
- Short client project, iOS deliverable in three months → daily/weekly rent beats buying a Mac mini for payback.
When unsure, before buying a second "build-only Mac," run a real repo's xcodebuild archive on a daily rental and compare 36-month TCO. We also have GitHub Actions macOS Runner node cost for reference.
Bottom line: migrate the workflow, not a single IDE
For Visual Studio developers moving to Mac: day one—Homebrew, dotnet, Git, and IDE choice; week one—line endings, keys, and team scripts; month one—peel iOS CI and heavy compiles off the laptop onto stable macOS nodes. Tools change (Rider, VS Code, Cursor), but the rhythm of build, debug, ship shouldn't break.
If you're wiring MAUI + iOS pipelines, keep the local machine light and hand archives to a cloud Mac—put compute into compiles, not idle hardware in a drawer.
Code locally, build iOS on cloud Mac
After moving from Visual Studio, daily .NET work stays on your MacBook; MAUI / native iOS Archive and CI fit better on a dedicated cloud Mac mini. SSH access, daily/weekly/monthly billing—no second machine for occasional builds.
Not sure your setup is enough? Run a real `xcodebuild` on a daily rental before deciding how much Xcode to install locally.
Further Reading
FAQ
Is Visual Studio still available on Mac?
Microsoft ended Visual Studio for Mac (support ended August 2024). .NET developers should use JetBrains Rider or VS Code + C# Dev Kit; keep Parallels or a remote Windows box only for legacy Windows-only toolchains—not as a daily driver.
How do I adapt to Ctrl vs Cmd quickly?
System Settings → Keyboard → adjust function keys as needed; install IntelliJ IDEA Keymap or Visual Studio Keymap in Rider/VS Code. For the first three days, tape a Ctrl→⌘ cheat sheet to your external keyboard—it beats memorizing tables cold.
Can .NET projects run on Mac as-is?
ASP.NET Core, console, and class libraries usually work with dotnet restore && dotnet run. Watch path separators, line endings (core.autocrlf), and Windows-only APIs (e.g. some WMI). MAUI iOS targets must build on macOS + Xcode; Android can be fully developed on Mac.
Do I need full Xcode?
For .NET / web / backend only: no full Xcode—Xcode Command Line Tools (xcode-select --install) cover Git and native deps. You need full Xcode (30GB+) for iOS Simulator, Archive, or Swift interop.
iTerm or Terminal?
Either works. PowerShell veterans often prefer iTerm2 + Homebrew zsh + starship with aliases like ls→eza, cat→bat. If team scripts assume bash, use #!/usr/bin/env bash in shebangs to avoid zsh syntax surprises.
When should I rent a cloud Mac instead of local setup?
When you need 24/7 iOS CI, multiple Xcode versions, or a Windows primary machine with occasional signing. Rent a dedicated Mac mini for xcodebuild / self-hosted runners while coding locally in Rider—cheaper than a build Mac per developer.