macOS是许多开发者最爱用的操作系统(这其中就包括了我自己)。本文将介绍macOS系统上的基础开发环境搭建。
前言
如果你不使用macOS,很显然,这篇文章不是为你准备的。
就我自己而言,我觉得macOS应该是最适合开发者使用的操作系统了。因为它不仅时尚,功能强大,而且包含了完整的UNIX体验。每次使用Windows的命令行,都让我厌恶至极。更不要说,M1芯片的功耗要远胜Windows及Intel了(每当提到Windows + Intel这对组合,我的脑海中就不由的出现了呜呜的风扇声)。
本文不打算对比桌面操作系统的优劣性,也不打算写成一个万能通用的macOS开发者环境搭建百科全书(因为我不认为自己有这个能力)。
这篇文章的目的,仅仅是给最基础的开发者阅读,介绍几个最常用开发工具的安装方法。节省大家新拿到一台Mac,或者重装系统的时间,仅此而已。
如果你是更换新的Mac,使用Time Machine备份和恢复可能是最节省时间的方法。但是,对于有“洁癖”的人来说,不想继续背负旧电脑上各种隐藏的垃圾文件,重新设置一台电脑以保证干净整洁可能也是一个不错的选择。
考虑到国内的特殊环境,很多工具的官方服务器我们都无法正常访问。因此本文还隐含了一个目标就是:同时给出在国内网络下能够完成的开发环境构建方法。
本文写于2021年底,随着时间的流逝,有些内容可能会过期。考虑到一些国内镜像的稳定性,这个过期的速度可能会更快。另外一方面,随着我自己开发环境的变更,我所觉得的“最常用开发工具”的集合也会发生变化。
所以,这篇文章可能会是一次写完,后面不定期更新的文章。
测试环境
本文测试所用的是最新的macOS系统:macOS Monterey 12.0.1
。使用别的版本可能会存在一些差异。
但事实上,Apple的产品以及整个开源社区的版本兼容性做的还是相当好的。只要是最近的几个版本,几乎不会出现什么差异。
zsh
首先我们来说开发者最常用的工具:命令行工具。
单就Terminal这一点而言,Windows就足以让我厌恶至极了:反人类的斜杠,反人类的C盘和D盘,反人类命令参数格式…庆幸的是,从我使用Mac这十多年以来,Windows的命令行还是一样的丑陋和难用。
自2019年以来,从macOS 10.15 Catalina版本开始,Mac已经将命令行工具从bash切换到zsh。因此,本文仅仅讲解zsh的基本配置。
关于zsh的介绍可以自行查询维基百科:zsh。
之所以Apple将Mac的shell从bash换成zsh,主要是license的原因。
关于zsh好在哪,可以看一下知乎:为什么说 zsh 是 shell 中的极品?。
事实上,bash并没有从Mac上消失。不过既然已经有了更好的工具,而且Apple已经帮我们设为默认,那我们也不必过于守旧。有更好的工具,花点时间适应,从长远来看,肯定是值得的。
如果你已经决定了使用zsh,那么就一定不要错过Oh My Zsh。这是一个非常强大的扩展工具。它包含了非常多的主题以及插件。
通过下面这条命令就可以安装它:
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
如果你的网络访问不了github的服务器,可以考虑国内的版本:
步骤一、在命令行切换到一个临时目录(例如:下载目录),下载码云版本的镜像包:
cd ~/Downloads
wget https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh
如果你还没有安装
wget
,可以先跳到下面Homebrew章节,先安装Homebrew,然后通过brew install wget
安装。
步骤二、替换脚本中原始链接为码云版本:
将
REPO=${REPO:-ohmyzsh/ohmyzsh}
REMOTE=${REMOTE:-https://github.com/${REPO}.git}
替换为:
REPO=${REPO:-mirrors/oh-my-zsh}
REMOTE=${REMOTE:-https://gitee.com/${REPO}.git}
步骤三、给予install.sh
可执行权限,然后运行它:
chmod a+x install.sh
ZSH= sh install.sh
步骤四、安装完成之后便可以删除install.sh
了。
oh-my-zsh会被安装在~/.oh-my-zsh
目录下。一旦安装好之后我们就可以继续折腾了。
oh-my-zsh包含了非常多的主题,你可以通过下面命令找到它们:
ls ~/.oh-my-zsh/themes
Githuh上的这个网页提供了预览。
通过修改~/.zshrc
中的ZSH_THEM
就可以更换主题了,例如:ZSH_THEME=robbyrussell
。
不仅仅是美观,oh-my-zsh还包含了很多实用功能,即:几百个插件。这些插件可以简化命令的使用。由于范围太广,请根据自己的需要使能。
除了自带的几百个插件,还有这两个自定义插件尤其值得推荐:Oh my zsh with autosuggestions & syntax-highlighting
如果你不想安装oh-my-zsh,有兴趣自己配置zsh,可以从这篇文章开始:Scripting OS X: Moving to zsh。
安装Xcode
当我们需要做C/C++项目时(例如:当我们需要clang
、gcc
、git
这些命令),Xcode就是一个几乎必须的工具了。
Apple为开发者提供了两个选择:
- Xcode Command Line Tools:一个比较小的软件包,你可以通过
xcode-select –install
命令安装它。 - Xcode App:一个完整IDE,同时包含了命令行工具。你可以通过Mac App Store安装它。
当然,你还可以通过开发者网站手动下载和安装它们:https://developer.apple.com/download/all/。
对于大部分人来说,如果你不是Apple平台的开发者,通常体积更小的Xcode Command Line Tools更适合你。
为Xcode瘦身
作为本文的读者,如何安装Xcode我想不需要做过多的说明了。
如果你已经安装Xcode App,那Xcode Command Line Tools就没有存在的必要了,它位于这个路径:/Library/Developer/CommandLineTools
。你可以考虑将其删除:
sudo rm -rf /Library/Developer/CommandLineTools
在你删除了这个目录之后,你可能发现gcc
无法使用了。
这说明你的gcc
绑定的就是Command Line Tools目录下的。
不过不要紧,接下来你可以通过下面这个命令切换gcc
绑定到Xcode App目录下:
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
你可以通过gcc --version
确认绑定的结果:
gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 13.0.0 (clang-1300.0.29.3)
Target: x86_64-apple-darwin21.1.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
删除Command Line Tools这还不够,Xcode单单一个应用就占用了几十个G的空间,很显然,这里面有很多内容不是我们所有人都需要的。
首先在Finder中右键选择“查看显示选项”,然后勾选“计算所有大小”:
然后通过下面这条命令打开Xcode所在的目录:
open /Applications/Xcode.app/Contents
这下可以直观的看到Xcode每个目录占用的空间了:
Platforms
下的各平台子目录占用太多空间了。如果你不做TV和Watch开发,这些目录就对你没太大用处了。
如果你删除了上面这两个目录,下次升级安装Xcode之后,它们可能还会回来。那只能再删一次了。好在Xcode的版本更新频度很低,基本上是和macOS以及iOS版本节奏一致的。
除了Xcode App中包含的内容,以下两个目录你可能也想把它们删除掉:
具体这两个目录的作用,可以点击链接查看。
Homebrew
接下来是一个强烈推荐的工具:Homebrew。
Homebrew是一个包管理工具,它支持Mac和Linux。用它我们可以方便的安装各种其他工具。
除了Homebrew,Mac上还有一个独占的包管理工具:MacPorts。
官网安装
Homebrew的官网是:https://brew.sh。通过下面的命令可以一键安装它:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
当然,国内的网络环境可能无法正常访问上面的服务器。并且,就算你运气好安装上了,今后通过brew
安装新的包时,还要再再次连接国外的服务器,这常常慢到让人无法接受。
所以更推荐下面这种方法:通过国内的源安装。
国内清华镜像安装
Homebrew在国内有不止一种源。
我个人通常使用清华的镜像源,速度比较快,也比较稳定。你可以访问这里获取相关信息:Homebrew / Linuxbrew 镜像使用帮助。这个文档中包含了详细的步骤,我就不拷贝粘贴了。
请确保将以下三个环境变量添加到你的shell环境中(例如,~/.zshrc
或者是~/.bashrc
中):
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"
export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles"
这是确保今后使用国内源安装和更新的关键(这决定了使用的速度,因此也是使用体验的关键)。
你可以通过brew config
确认配置是否生效:
brew config
HOMEBREW_VERSION: 3.3.4
ORIGIN: https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
HEAD: 819eea5669807c1cf29e0d29985fc765ad7a9597
Last commit: 5 days ago
Core tap ORIGIN: https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git
Core tap HEAD: 4567f25b438ff644424f934d339f06688514e67b
Core tap last commit: 12 hours ago
Core tap branch: master
HOMEBREW_PREFIX: /usr/local
HOMEBREW_BOTTLE_DOMAIN: https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles
HOMEBREW_BREW_GIT_REMOTE: https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
HOMEBREW_CASK_OPTS: []
HOMEBREW_CORE_GIT_REMOTE: https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git
HOMEBREW_MAKE_JOBS: 16
Homebrew Ruby: 2.6.8 => /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby
CPU: 16-core 64-bit skylake
Clang: 13.0.0 build 1300
Git: 2.30.1 => /Applications/Xcode.app/Contents/Developer/usr/bin/git
Curl: 7.77.0 => /usr/bin/curl
macOS: 12.0.1-x86_64
CLT: 11.0.0.33.16
Xcode: 13.1
Node.js
有了Homebrew之后,安装其他工具就非常的方便了。下面这条命令便直接安装了node
和npm
。
brew install node
npm是JavaScript的包管理工具。很自然的,它的默认软件包源(npm称之为registry)也在国外,所以我们要继续使用国内的源代替。
国内源
同样的,npm国内也有好几个不同的镜像源。
我个人通常使用的taobao的镜像。你可以下面这条命令切换镜像源:
npm config set registry https://registry.npmmirror.com/
我通常是直接修改~/.npmrc
文件来设置源:
cat ~/.npmrc
registry=https://registry.npmmirror.com
你可以通过npm config list
来确认源配置环境:
npm config list
; "builtin" config from /usr/local/lib/node_modules/npm/npmrc
prefix = "/usr/local"
; "user" config from /Users/paul/.npmrc
registry = "https://registry.npmmirror.com/"
; node bin location = /usr/local/Cellar/node/17.0.1/bin/node
; cwd = /Users/paul
; HOME = /Users/paul
; Run `npm config ls -l` to show all defaults.
Python
Mac自带了Python 2.7。但它其实已经于2020年退休了。
作为一个严肃的开发者,如果不是处理遗留项目,你更应该选择Python 3。
如果你安装了最新版本的Xcode,它已经自带了Python 3。如果你没有,那你可以到Python的官网上下载自行安装:Python Releases for macOS。
当然,如果你安装了Homebrew,更好的方法是通过它来安装:
brew install python3
Python通过pip
来安装软件包。Python 3 对应的是pip3
。为了彻底使用Python 3代替Python 2,请将下面两个别名加到的shell配置文件中(例如:.zshrc
或者.bashrc
):
alias python="python3"
alias pip="pip3"
Vim
在命令行环境下,我们常常要编辑文本文件,这个时候我通常会使用Vim,其命令是vi
。
如果你还没有听说过或者用过Vim,那么你一定还是个新人,赶紧了解一下吧:为什么不少程序员极度推崇 Vim 和 Emacs,却对 IDE 嗤之以鼻?
Mac自带了Vim,你通常不需要安装它。
开源世界的玩法是:官方版本只包含了基础功能,更多的功能是通过扩展和插件来完成的。所以如果你用Vim比较多,那么下面两个工具可能让你根据得心应手:
- The Ultimate vimrc:包含了Vim的配置。
- Maximum Awesome:包含了Vim的插件。
如果你无法访问github,我已经将这两个包放在这里:vimrc-master.zip、maximum-awesome-master.zip。这种方法你获取到的可能不是最新版的软件包,但好在这些工具都非常稳定,更新频率很低。
获取The Ultimate vimrc之后你可以通过下面的命令选择安装基础版,还是完全版。首先将它移动到需要的目录,然后安装:
mv vimrc-master ~/.vim_runtime
sh ~/.vim_runtime/install_basic_vimrc.sh
sh ~/.vim_runtime/install_awesome_vimrc.sh
安装Maximum Awesome的方法也很简单,切换的相应目录执行rake
即可:
这一步需要连接github服务器,目前还没找到国内代替的方法。
cd ~/Downloads/maximum-awesome-master
rake
这一步会自动安装一系列的软件:
paul:/Users/paul/Downloads/maximum-awesome-master$ rake
-- Homebrew --------------------------------------------------------------------
-- the_silver_searcher ---------------------------------------------------------
-- iterm2 ----------------------------------------------------------------------
-- ctags -----------------------------------------------------------------------
-- reattach-to-user-namespace --------------------------------------------------
-- tmux ------------------------------------------------------------------------
-- MacVim ----------------------------------------------------------------------
Please add ~/bin to your PATH, e.g. run this command:
echo 'export PATH="~/bin:$PATH"' >> ~/.bashrc
The exact command and file will vary by your shell and configuration.
You may need to restart your shell.
-- symlink ---------------------------------------------------------------------
-- vundle ----------------------------------------------------------------------
~/bin/vim -c "PluginInstall!" -c "q" -c "q"
-- iterm2 colorschemes ---------------------------------------------------------
2021-11-23 13:58:27.444 defaults[22234:673936]
The domain/default pair of (com.googlecode.iterm2, Custom Color Presets) does not exist
open -a /Applications/iTerm.app /Users/paul/Downloads/maximum-awesome-master/iterm2-colors-solarized/Solarized Dark.itermcolors
open -a /Applications/iTerm.app /Users/paul/Downloads/maximum-awesome-master/iterm2-colors-solarized/Solarized Light.itermcolors
-- iterm2 profiles -------------------------------------------------------------
Your turn!
Go and manually set up Solarized Light and Dark profiles in iTerm2.
(You can do this in 'Preferences' -> 'Profiles' by adding a new profile,
then clicking the 'Colors' tab, 'Load Presets...' and choosing a Solarized option.)
Also be sure to set Terminal Type to 'xterm-256color' in the 'Terminal' tab.
Enjoy!
其中还包含了好多个Vim插件:
这样配置之后,你的Vim就会用起来更加顺手了。