了解 Cocoapods 觀念,解決安裝挑戰!

關鍵步驟 ☑️ Xcode Preferences Command line Tool

陳冠名|Michelle Chen Chen
Adream4ever
6 min readJan 28, 2022

--

滿心期待要完成 TDD 測試專案,選擇用 Cocoapods 安裝 Quick, Nimble 套件, 而不是 Xcode 內建的 XCTest,因為想複習套件安裝流程,結果…超挫折的,花了兩天多的時間才能順利準備測試專案,以下會分享本次 Debug 的經驗跟思路整理:

開啟終端機,安裝 Cocoapods 指令

輸入指令後,遇到下圖之錯誤訊息

You might have to install separate package for the ruby development environment, ruby-dev or ruby-devel for example.

看到這段訊息的時候,開始思考 Cocoapods & Ruby 的關聯性:

也了解 CocoaPods 是用 Ruby 實現的,要想使用它首先需要有 Ruby 的環境。幸運的是 OS X 系統默認已經可以運行 Ruby 了。但是有時候 Ruby 版本過低是無法正常支持 CocoaPods 的使用,所以需要先安裝更新升級 RVM 和 Ruby。

檢視電腦軟體當下的環境&版本狀態

macOS :Monterey 12.0.1
Xcode :13.1
Cocoapods:1.5.2
Ruby:macOS 內建

RVM & Ruby

進一步了解 RVM & Ruby 的觀念介紹,看了以下教學分析文章後,選擇使用 RVM 來管理 Ruby 版本。

RVM info

確認 RVM 有安裝成功,但 Ruby 仍是 macOS 內建?!
先來升級 macOS & Xcode 好了!

注意升級後, Command Line Tools 一定要勾選!

Xcode / Preferences / Command Line Tools

Xcode 升級 13.2 ✅ Command Line Tools!

打開 Xcode 軟體,點擊左上方的 Xcode 選單中的 Preferences,選擇 Locations ,看到 Command Line Tools 後,點擊你要使用的 Xcode 版本,再回到終端機輸入指令,繼續進行 Cocoapods 安裝流程。

關鍵卡點

如果沒勾選 Command Line Tools,就會一直無法進行 Cocoapods 套件安裝的工作,然後就會一直誤以為 Ruby 環境安裝有問題,在這個迴圈裡不斷地鬼打牆啊~

更新後的軟體環境&版本狀態

macOS :Monterey 12.2
Xcode :13.2
Cocoapods:1.11.2
Ruby:2.7.2

ruby 升級前&後的指令對比

建立描述套件清單的 Podfile

將套件加到 Xcode 專案前,要先在 Xcode 專案資料夾下加入 Podfile 檔,它將用來描述我們想安裝的套件清單。

產生 Podfile 檔的方法如下:

  • 在 terminal 裡利用指令 cd 切換到專案的資料夾下。

先在 terminal 輸入 cd 和空白,點選 Xcode 專案的藍色 icon,將它拖曳到 terminal。

再刪除最後附檔名為 xcodeproj 的檔名,在此我們刪除 BankTDD.xcodeproj。

在終端機輸入 pod init 後,會產生 Podfile;再輸入 pod install 指令,就會讀取 Podfile ,並且建立專案所需的相關檔案。

  1. Pods 資料夾
  2. Podfile.lock
  3. projectname.xcworkspace 檔案

加入測試套件 Quick, Nimble

將測試套件加入 Xcode 專案內的 Podfile 檔案

本次安裝心得

先前使用的是舊版 Cocoapods,透過這次更新 Cocoapods 版本,除了踩坑之外,也學習了以下三項概念,希望能幫助大家更快釐清相關知識脈絡:

1️⃣ Ruby 的環境設定概念

2️⃣ 了解 RVM, GEM, Bundler 概念

3️⃣ 開發工具的環境版本控制(bundle exec pod install)

在軟體環境建置時,真的要特別紀錄每個軟體、套件的版本,不然在 debug 的過程其實會蠻慌亂的!

在公司內共同開發專案的時候,若團隊成員們使用的套件版本不ㄧ致,可能會導致專案無法順利符合預期。

--

--

陳冠名|Michelle Chen Chen
Adream4ever

Brave Together App 產品負責人,現職物聯網科技領域的 iOS Developer,歡迎交流~!