如何建立一個屬於自己的 CocoaPods

References:

  1. Creating Your First CocoaPod
  2. How to Create a CocoaPod in Swift

前言

由於最近太廢,所以就來完成以前沒有完成的事(明明就是自己太懶)

之前在開發的時候,常常有很多常用的 Code,比如各種 extension,或者網路架構的東西,每次新開一個專案就又要複製貼上,或者從 github 上 clone 下來再搬過去,都很麻煩。於是我就想,可不可以用 pod install 就解決了呢?

順便推一下我的網路架構:https://github.com/yoxisem544/NetworkRequestKit

步驟

1. 建立一個新的 Pod

一開始我們要先建立一個新的 pod template,幫助我們建立我們的 pod。

首先在你的 terminal 輸入(記得切換路徑)

$ pod lib create YourPodName

接著他就會問你:

What language do you want to use?? [ Swift / ObjC ]

Would you like to include a demo application with your library? [ Yes / No ]

Which testing frameworks will you use? [ Quick / None ]

Would you like to do view based testing? [ Yes / No ]

這邊隨意囉~自己設定啦,回答完後就建立完成了!

2. Pod 詳細資訊

比較重要的有以下幾點

  1. .podspec:定義這個 pod 的詳細資訊,包含 pod 名稱、版本、作者、詳細資訊等等,這都會關係到上架的資訊,不可以亂打。
  2. README:介紹這個 pod 的功能。

接著打開 Example 資料夾中的 YourPodName.xcworkspace,我們要修改一下這個 pod 的資訊。

先定一下名字、版本號、簡短資訊

Pod::Spec.new do |s|
s.name = 'YourPodNameThatDisplayedOnCocoaPods.org'
s.version = '1.0.0'
s.summary = 'short description.

description 則可以輸入更完整的資訊。

homepage, author, license 是自動生成的,他會預設幫你生成 github 的頁面,因為 cocoapods 相依於 github(當然也可以放在不同的地方,例如:BitBucket)。

ios.deployment_target = 9.0

以上如果有任何使用超過 ios 9 or 10 的 api,要記得定義一下這個參數。

s.source_files = 'YourPodName/Classes/'

注意路徑要設定好,預設路徑會在 /Classes 後面加上一些奇怪的路徑。

如果有使用其他的 dependencies 的話,記得也是要在這裡定義。譬如我在我的專案用了 SwiftyJSON, Alamofire, PromiseKit,就在後面定義且註明最小需要版本

s.dependency 'Alamofire', '~> 4.0.0'
s.dependency 'PromiseKit', '~> 4.0.0'
s.dependency 'SwiftyJSON', '~> 3.0.0'

3. 把 Code 丟進去

看到同樣專案的下方有個 Development Pods 資料夾,點開找到你專案名稱下面有個 Classes 資料夾(自己定路徑義的就不要管這個了),把你的 code 丟進去吧。

4. 開個 github repo

上 github 建立一個 repo(建議名字一樣,不如就要改 .podspec 的 source 了),接著把你的 pod 丟上 github。

5. 加上版本號

還記得我們前面定義的版本號嗎?cocoapods 會依據你的 tag 來尋找應該安裝的版本號,譬如我今天的版本是 2.1.1,那麼我的 branch 上就要有 2.1.1 這個 tag,不然就會有問題。

首先先為自己的最後完成的 pod 加上 tag,並且 push 上 github。

$ git tag 1.0.0
$ git push origin 1.0.0

6. 驗證 Pod

在 github 上有了 1.0.0 的 pod 之後,我們要叫 cocoapods 幫我們驗證我們的 pod 能不能 release。

$ pod spec lint YourPodName.podspec

如果你的 pod 會有一些 warning 並且你選擇忽略他,可以在後面加上

$ pod spec lint YourPodName.podspec --allow-warnings

7. 註冊 Cocoapods

第一次上架的人才需要做這件事

需要驗證過 email 才可以在 cocoapods 上發佈你的 pod。

$ pod trunk register email@domain.com 'Your Name'

接著他就會叫你驗證 email。

8. 發佈到 Cocoapods

$ pod trunk push YourPodName.podspec

打完收工,接著你就可以在 Cocoapods 上找到你的 pod 囉。

Error look up

CocoaPods Trunk cannot push update: “You need to register a session first.”

解決 pod spec lint 一直不抓取 github 新的 commit 問題:

因為 pod 會 cache 一些資料在 local,以致有時候 pod spec lint 時不會抓取最新 commit,可以使用 pod cache clean [POD_NAME] 來清理就會正常了

https://github.com/CocoaPods/CocoaPods/issues/393

https://guides.cocoapods.org/terminal/commands.html#pod_cache_clean