會想要寫這篇文章,是因為筆者之前因為系統不穩定,反覆重新安裝作業系統好幾次。又因為Time Machine 不知道為甚麼損壞無法使用,安裝過程間必須將原本有在使用的App程式一個一個裝回去,尋找、下載、安裝、登入帳號取得授權,這些重複性的動作做好幾次就覺得很煩。再加上App的來源不只有Mac App Store,沒有上架的程式還要一個一個去原開發者網站下載,一整個就是重複性機械操作。系統塵埃落定以後,就動念想研究是否有更快捷的方法。

使用Homebrew-cask 安裝App

Homebrew 是以Ruby開發,在Mac OS X 平台上的套件管理工具。一些好用的Unix及Linux 工具透過Homebrew被移植到Mac OS X 平台。Homebrew 底下的一個子專案 Homebrew-Cask , 則提供了透過指令下載、安裝App的功能。所有沒有在Mac App Store上架的Apps,只要有人建立Casks,提交完整的下載網址以及安裝流程,就可以透過Homebrew-Cask管理

PS: 以下的介紹都需要在Mac OS X Terminal 終端機程式操作。

安裝Homebrew

如果還沒安裝Homebrew,可以依照其官網說明進行安裝

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Homebrew-cask 基本指令

現在Homebrew 一安裝便會預設安裝Homebrew-cask的樣子,而想下載安裝特定App,便可以直接輸入指令,以沒有在Mac App Store上架的Google Chrome為例:

brew cask install google-chrome

brewinstall

一些基本的指令如下:

brew cask list //列出所有已安裝的Cask

brew cask uninstall APP //移除App

brew cask search Name //搜尋包含Name的套件,在不確定套件全名時使用

brew cask --help //看更多指令說明

安裝Homebrew-cask-upgrade管理Casks的更新

使用Homebrew-Cask很方便,但是其對於每個Casks安裝的App版本更新管理有點力不從心。安裝App時Homebrew-casks雖然會記錄下載的版本號,後續可以指令讓Homebrew-casks 檢查每個App的版本是否過舊。

但是大多App其實都有內建自動更新機制,當App自行更新後,其版本變更目前的Homebrew-casks無法追蹤到,於是就會出現App已經更新過一次,結果Homebrew-casks因為記錄到的仍然是比較舊的版本號,所以下指令更新時仍然會再重新下載一次。

如果想以Homebrew-Cask 統一管理追蹤所有已安裝Apps的更新,這一點顯然有些困擾。作者自己的想法是、要嘛只用每個Apps個別內建的自動更新,要嘛統一使用Homebrew-Casks管理。

如果要使用Homebrew-Cask 統一管理的話,建議再安裝一個Homebrew 的套件 - brew-cask-upgrade

在終端機Terminal 依序輸入:

brew tap buo/cask-upgrade. //安裝 brew-cask-upgrade

brew cu //檢查所有Casks的更新

brew cu -a //檢查所有Casks的更新,不論是否內建有自動更新

筆者自己的環境實際輸出如下圖:

brew-cask-upgrade

如果有找到更新,在經過使用者確認後,便會調用 Homebrew-Cask 程序依序下載更新的Apps檔案替換。

使用 mas-cli 管理 Mac App Store Apps

前面介紹的 Homebrew-Cask 雖然好用,但是有很多人的 Apps 都在 MAS (Mac App Store) 上面下載的,無法一併使用其管理,這時候就會想問有沒有方便的指令行工具可以管理,上網搜尋還真的有,mas-cli

brew install mas //安裝 mas-cli

不過可能受限於 MAS 的關係,用法沒有很直接

mas list //列出目前 MAS 已經安裝的Apps

//Example

716854513 Intensify (1.2.3)
969978718 Noiseless (1.3.2)
539883307 LINE (5.5.1)
425264550 Blackmagic Disk Speed Test (3.1)
1063663640 Better Rename 10 (10.23)

mas search [App Name] //搜尋特定Apps

mas-cli 回傳的結果前面都會有一串編號,而安裝特定Apps時也必須輸入該編號

//Example 安裝 Intensify 716854513

mas install 716854513

另外如果要更新所有 MAS 的 Apps,

mas upgrade

要注意的是,依據筆者個人使用的經驗,mas-cli 感覺上無法自行發起檢查更新的動作,他是 MAS 本身有檢查到更新後,mas-upgrade 才會去更新。同時 mas-cli 也無法處理系統更新如 10.13.2 -> 10.13.3, Sierra -> High Sierra

使用 Homebrew Bundle 建立已安裝套件及 Apps 的清單

前面提過,筆者是因為不停重灌重新安裝 Apps 太麻煩,所以想要尋找省時的方法將原先的 Apps 安裝回去。前面提到的工具 Homebrew-Cask, mas-cli 都可以分別輸出清單,但是如果我想統合清單並下次重灌時安裝回去呢呢? Homebrew Bundle 看來是個解決方案。

Homebrew Bundle 在 安裝 Homebrew 時就預設安裝了,

brew bundle dump //會在個人家目錄底下輸出 Brewfile

筆者目前的 Brewfile輸出如下

tap "buo/cask-upgrade"
tap "homebrew/core"
tap "homebrew/bundle"
tap "caskroom/drivers"
tap "caskroom/cask"
cask "java"
brew "duck"
brew "git"
brew "mas"
brew "node"
brew "python3"
brew "tldr"
cask "alfred"
cask "betterzip"
cask "caprine"
cask "cleanmymac"
cask "dash"
cask "db-browser-for-sqlite"
cask "dropbox"
cask "evernote"
cask "firefox"
cask "flume"
cask "forklift"
cask "google-chrome"
cask "iina"
cask "imageoptim"
cask "keyboard-maestro"
cask "mamp"
cask "parallels"
cask "spotify"
cask "sublime-text"
cask "tormessenger"
cask "xld"
cask "xmind-zen"
mas "1Password", id: 443987910
mas "Affinity Designer", id: 824171161
mas "Affinity Photo", id: 824183456
mas "Amphetamine", id: 937984704
mas "Better Rename 10", id: 1063663640
mas "Blackmagic Disk Speed Test", id: 425264550
mas "Expressions", id: 913158085
mas "Focus", id: 777233759
mas "Folx GO+", id: 823528286
mas "GIF Brewery 3", id: 1081413713
mas "iMovie", id: 408981434
mas "Intensify", id: 716854513
mas "Kaomoji Lover", id: 914708191
mas "Keynote", id: 409183694
mas "LINE", id: 539883307
mas "MWeb", id: 954188948
mas "Noiseless", id: 969978718
mas "Numbers", id: 409203825
mas "Pages", id: 409201541
mas "Pixave", id: 924891282
mas "Pocket", id: 568494494
mas "Polarr Photo Editor Pro", id: 1058273036
mas "Reeder", id: 880001334
mas "Things3", id: 904280696
mas "Tweetbot", id: 557168941
mas "Unclutter", id: 577085396
mas "Unsplash Wallpapers", id: 1284863847

可以看到,裡頭記錄了 Homebrew 的套件,也記錄了 Homebrew-Cask, mas-cli 安裝的 Apps 。

如果下次要根據 Brewfile 安裝,只要將先前備份的 Brewfile 放在個人家目錄底下,然後在終端機內輸入:

brew bundle

就可以將先前安裝過的所有 Apps 及套件裝回來了!

  1. 本文用到的所有套件連結如下:

  2. 可能有讀者好奇為什麼筆者終端機的輸出畫面為什麼是黑底白字?其實我只是有修改 Mac OS X 終端機的主題設定檔為 pro 而已
    Terminal-pro