我有一台 2017 年版本的 Macbook Pro,儲存裝置的規格是 256GB SSD。原先以為就開發而言 256GB 已經很足夠了,平常僅用來存放技術文件、程式碼、電子書,除了開發工具以外安裝應用程式的需求也不多,而其他娛樂或是相片等檔案也大多存於外接硬碟中。然而隨著作業系統與開發工具的日益肥大、第三方函式庫或是套件管理器的各式各樣安裝方式(CocoaPods、Carthage、Homebrew、RubyGems、Bundler),在儲存裝置中總會留下或多或少的暫存、垃圾檔案。不知不覺當中,才發現 256GB 中可用的容量所剩無幾,甚至面臨每次要更新 macOS、或是 Xcode 版本時系統都會跳出可用空間不足的窘境。
專注力應該用在工作,而不是分心處理資源匱乏的問題。
《匱乏經濟學》一書中提到,人的認知頻寬(mental bandwidth)是有限的,資源(時間、空間、金錢等等)上的匱乏會盤據在人的心頭,從而產生隧道效應(tunneling),造成我們只能將注意力放在眼前讓自己焦慮的事情,而無法聚焦精神在其他重要但較不迫切的事物上。
工程師的專注力是非常寶貴的資源,和產出能力息息相關,如果因為儲存空間的不足導致必須時常費心去清除零碎檔案釋放空間,對工程師本人和產品本身都是極大的損失。所幸網路上找得到許多清除垃圾檔案的方法,在這邊我就重點擷取幾個對 iOS 工程師而言比較有感的方式。
使用系統工具管理儲存空間
macOS Sierra 和以上版本,可使用
系統工具來管理儲存裝置上的空間。開啟的方式有兩種:
- 在「蘋果」()選單中選擇「關於這台 Mac」,然後按一下「儲存空間」。接著按下「管理」按鈕。
- 打開此路徑:「/應用程式/工具程式/系統資訊.app」(或是“/Applications/Utilities/System Information.app”),在 App 選單中選取「視窗>儲存空間管理」
接著可以使用該工具將檔案存到 iCloud 中、最佳化儲存空間、清除垃圾桶、或是依照檔案大小來清理不必要的檔案。
清除 Xcode 暫存或過期檔案
以下路徑的檔案可斟酌刪除,但後果請自負。
- ~/Library/Developer/Xcode/DerivedData
- ~/Library/Developer/Xcode/Archives
- ~/Library/Developer/Xcode/iOS DeviceSupport
- ~/Library/Developer/CoreSimulator/Devices
- ~/Library/Caches/com.apple.dt.Xcode
DerivedData 和 Archives 應該不需要多說什麼,開發者都知道。iOS DeviceSupport 最好只清除新版 Xcode 不再支援的版本,也就是舊版 Xcode 殘留下來的版本。
CoreSimulator/Devices 點進去只看到一堆 UUID,這個目錄該如何清呢?請參照
這篇,可以選擇在終端機應用程式中透過
xcrun simctl list devices 指令,一個一個對照之後清除用不到的,或者直接使用指令
xcrun simctl delete unavailable 一次清除。
Xcode Caches 顧名思義,清除應該是安全的。
清除 iOS 裝置備份檔案
- ~/Library/Application Support/MobileSync/Backup
該路徑是 iOS 裝置透過 iTunes 在你電腦上的備份,可以參照官方的
這篇文章決定是否刪除。
清除各個瀏覽器的暫存檔
Safari
- 點選 App 選單的 Safari >偏好設定。
- 在出現的視窗中點選進階。
- 勾選在選單列中顯示「開發」選單。
- 點選 App 選單的開發>清除快取資料。
- 以上步驟等同於直接清除 ~/Library/Caches/com.apple.Safari/Cache.db
Chrome
- 選取右上角的三點按鈕>設定。
- 選取最下方的進階,展開後選取清除瀏覽資料。
- 只留下快取圖片和檔案的勾選,其他皆取消選取,然後選擇時間範圍後點選清除資料。
- 以上步驟等同於直接清除 ~/Library/Caches/Google/Chrome/ 以及 ~/Library/Application Support/Google/Chrome/Default/Application Cache/
Firefox
- 點選右上角漢堡圖示>偏好設定。
- 點選左側欄的隱私權與安全性,找到 Cookie 與網站資料,點選旁邊的清除資料。
- 僅保留勾選網頁快取內容,然後點選清除。
清除 CocoaPods 的快取
可直接在終端機程式中輸入
rm -rf ~/Library/Caches/CocoaPods 或是
pod cache clean --all 來清除
CocoaPods 的快取。
清除 Carthage 的快取
參考
這篇,在終端機程式中輸入
rm -rf ~/Library/Caches/org.carthage.CarthageKit 清除。
清除 Homebrew 老舊版本
參考
官方文件,透過
brew cleanup -n 指令預覽哪些 formula 會被刪除,再透過
brew cleanup 指令刪除之。
清除 RubyGems 老舊版本
參考
這篇或是
官方文件,透過
gem cleanup --dryrun 指令預覽哪些 gems 會被刪除,再透過
gem cleanup 指令刪除之。
透過 Bundler 清除特定專案的 gems
參考
這篇或是
官方文件(連結為1.17版),透過
bundle clean --dry-run 指令預覽哪些 gems 會被刪除,再透過
bundle clean 刪除之。
附註:Bundler 在安裝 gem 時,除非有使用 bundle install --path ... 來指定安裝路徑,不然預設會裝在跟 RubyGems 設定一樣的位置,也就是 gem install ... 安裝的位置。這時候用 gem list 指令也會列出透過 Bundler 安裝的 gem。bundle clean 只會處理透過 --path 安裝的 gem,如果你很確定想要把系統預設路徑下專案未用到的 gem 都刪除,可以使用 bundle clean --force 指令——但如果你有其他專案有用到這些 gem 的話,這將會是一個危險的動作。此外,如果你有使用 --path 來安裝,bundle install 或 bundle update 就會自動做清除的動作,所以通常 bundle clean 並不是那麼必要。
由於每個人使用的開發工具不同,在這裡也僅能分享一些筆者有用到的部分,但基本精神是相同的。希望透過這篇的整理可以讓大家不用再煩惱於儲存空間的不足,把專注力集中在開發程式上吧!謝謝收看。
我是 Lefty,一位低調的 iOS 開發者。
我的 Medium:https://medium.com/@lefty.
我的 vocus:https://vocus.cc/user/@lefty