【整理】CocoaPods打包私有庫實踐 | 最新版

我這篇和別人最大的區別,可能除了算是比較新的實踐,還有就是對應的語言是Swift。ios

爲何須要打包私有庫?

公司項目採用分支的方式進行「效率開發」,鑑於部分項目的基礎功能一致,數據服務也保持了一致,因此在一開始這樣的方式倒也沒什麼問題。But!!!隨着項目的持續進行,各個客戶定製類的要求差別化嚴重,採用分支的弊端逐漸顯現:git

  1. Base項目存在Bug,致使分支項目所有須要逐一修改,工做重複。(隨着項目的增長,後期維護難度指數上升)
  2. 功能管理不可控,Base項目中常常有部份內容在分支項目中不須要。
  3. Base項目經過判斷語句,將iPad和iPhone項目合二爲一,存在一些項目早期不須要iPad端。(貌似後期App上架想加或想去除另外一端會比較麻煩)
  4. 當有部分基礎功能須要升級,就如同改代碼同樣須要到處分支進行更改。
  5. 雖然公司開發人員很少,流程也沒有很完善,可是當本身嘗試Jenkins作CI時,發現分支的方式對於一些配置很是不友好。
  6. ……

基於以上種種狀況,便思考着如何改進,第一反應就是重構代碼,從新組織架構項目。可是,當看了bangcasalimboy等等大佬們組件化的思路以後有點懵懵的。最終,只能着手於從項目中抽出公共庫或者業務庫的思路着手,所以動手目標指向Cocoapods打包私有庫。swift

計劃是將一些基礎公共功能抽離出來,方便之後全部類型的項目均可以使用,我司目前除了上文提到的Base項目並無維護使用的庫😂。當前者完成,主要也是打通打包私有庫這個流程以後,便着手抽取項目的業務功能模塊做爲庫來使用。存在的問題是,還不太清楚是直接把邏輯抽離出來,仍是連着UI一塊兒(應該不太好)。最終就能作到經過這些私有庫快速搭建項目,針對目前的項目也許仍是須要一個Base項目進行一些基礎配置(由於會用到一個第三方庫)。瀏覽器

CocoaPods 打包進行時

默認打包前已經在電腦上配置好cocoaPodsGit環境,不然後續步驟在一開始就無法進行。關於Git環境配置網上一搜不少,至於cocoaPods環境配置正好本身以前寫過一篇算是目前比較新的文檔記錄。ruby

第一步,建立本地pod倉庫

經過Pod命令能夠建立一個本地倉庫,會自帶一些基礎配置,只須要把本身的代碼放在正確的位置便可完成私有庫封裝代碼部分的內容。bash

pod lib create YourPodName
複製代碼

命令行執行完以上命令,會出現幾個選項,根據本身的狀況去作選擇便可。提供本身的配置以下:架構

What platform do you want to use?? [ iOS / macOS ]
 > iOS

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

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

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

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

Running pod install on your new library.
複製代碼

目前網上能查到的資料,好多都還有一項選擇是統一配置類名前綴,不過目前我這個版本已經沒有該選項。當上面執行完成以後會自動打開Example工程示例,接下來就能夠進行具體的代碼編寫或者直接替換到對應位置。app

第二步,修改Pod內容

打開建立的Pod庫所在文件夾,在根目錄位置有着 YourNamePod.podspecREADME.md兩個文件,分別打開進行對應的修改。組件化

YourNamePod.podspec 文件修改

鑑因而在建立私有庫,本機的Git命令綁定的是GitHub,因此切記要修改文件裏的git對應的地址到本地Gitd庫地址!!!post

Pod::Spec.new do |s|
  s.name             = 'YourNamePod'
  s.version          = '0.0.2'   // 必定記得修改version!!!必定要和Git的Tag是相同!!!
  s.summary          = '改爲本身的summary
 
  s.description      = <<-DESC
  修改成本身庫的描述內容
                       DESC

  s.homepage         = '修改成本身本地Git庫的地址' // 注意,這裏的地址是本地庫在瀏覽器上面的URL
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }  // 默認MIT許可
  s.author           = { '用戶名' => '用戶帳號' }
  s.source           = { :git => '修改成本身本地Git庫的地址', :tag => s.version.to_s } // 此處的地址,是從Git庫copy過來的,以 .git 結尾。 

  s.ios.deployment_target = '9.0'

  s.source_files = 'Pod/Classes/**/*'  // 原生的地址是 'YourNamePod/Classes/**/*', 可是這個地址在後面 的 pod repo push 中會出現問題,根據一個開源的庫,修改了地址。注意,Pod 文件夾仍然是在根目錄。
  s.swift_version = '5.0'  // 親測,須要加上swift版本
 
end
複製代碼
README.md文件修改

README文件其實不用修改也無所謂,只是想着方便之後其餘人瞭解這個庫的使用,本身寫了一些說明罷了。反正,若是有須要就看着加內容,或者看看自動生成的內容裏是否有什麼信息時須要刪除的。

具體代碼放哪裏

具體代碼固然得本身實現,可是放什麼地方倒是有講究的,在上文有提過 s.source_files 對應的默認路徑須要更改。本身庫的代碼就是要放在這個文件路徑之下。若是按照個人步驟創建,則應該是在 Pod -> Classes 文件夾之中。

當打開示例項目進行測試驗證時,首先須要 pod install,而後正常打開項目。此時在 Xcode 中左側面板 Pods下找到本身的 Pod 文件,再次確認下代碼是否是都在,不在就 add 進來。接下來就是在示例工程中去進行各類嘗試,每次對Pod文件裏的代碼進行了修改我都會從新 pod install一次,而後 clean -> build。

第三步,Git部分

一開始說了須要本地有Git環境,如今就要用到了,在次以前先在本地的Git庫中新建一個倉庫(我司是用Gogs進行搭建)。注意!!!倉庫名字與建立的 Pod 庫名一致,不一致會不會有問題,我不知道,反正我沒試過。記得!!!倉庫不要設置成私有庫,設置成爲私有庫在後面會出現問題,我找到的解決方案就是設置爲public。

接下來,就是打開命令行 cd 到 Pod 庫文件夾的根目錄,進行如下命令的執行:

git add . // 跟蹤全部改動過的文件
git commit -m"提交內容"
git remote add origin <git庫url> // 具體的url時沒有 <> 
git push -u origin master 

git tag 0.0.1 // 須要與 .podspec 文件中的 s.version 對應
git push --tags 
複製代碼

在這裏須要注意的是,git 命令的執行,本身習慣了客戶端,當使用命令行好像有些步驟問題。本身踩到的坑以下:

  • 若是在第一次 push 以前對 Pod庫文件夾裏的內容進行了修改,貌似 push 的內容是最初沒修改前的。
  • 當屢次 add -> commit -> push 以後,可能會出現 git ! [rejected] master -> master (fetch first) 這樣的問題,解決方法是執行:
git pull origin master
git push origin master // 若是執行以後仍是沒有便可成功,那麼執行下面的內容
git commit -m"xxx"
git push
複製代碼

正常來講,應該就進行下一步的操做,若是在Git過程當中遇到了坑,建議仔細看錯誤提示進行修改。

第四步,Pod 部分

Pod 部分的坑遇到很多,可是若是前面的步驟若是都有注意到細節,該修改的都修改了,那麼下面的命令行執行起來應該是很順暢。命令行 cd 至 Pod 庫文件夾根目錄,而後往下看⬇️:

pod repo // 檢查 pod 庫
pod repo add YourNamePod <Git-Url> // 添加到本地cocoapods中
pod lib lint // 檢測本身的 Pod 庫配置 
pod repo push YourNamePod YourNamePod.podspec // push 庫配置
// 成功以後
pod search YourNamePod // 可以搜到就能夠用起來了,這裏可能有個小坑,那就是儘可能在取名時取個惟一值,能夠在Github上先搜一搜。私有庫可能沒啥影響,可是若是是公共的同名應該會有坑。
複製代碼

若是上述 lib lint 出現了紅色warning提示,能夠嘗試在命令後面加上 --allow warnings。 至於其餘的一些相關錯誤,根據信息提示搜一下基本都有解決方案,另外會在文末附上幾個參考連接。

在其餘項目使用的時候,podfile 文件裏須要加上 source 路徑,不然無法使用到私有庫。

source "git-url.git"  // 此處換成本身本地庫的 url
use_frameworks!

target 'TestPod' do
 
 pod 'YourNamePod', '~> 0.0.2'

end 
複製代碼
第五步,最後就是維護!!!

到第四步成功結束,只是階段性的勝利,之因此打包私有庫除了方便使用還有就是後期維護更新!!!

後期功能更新或平常維護步驟以下:

  1. 修改 .podspec文件裏的 version
  2. git 對應的操做:更新 push ,以及 tag 對應 version
  3. pod lib lint / pod lib lint allow--warnings
  4. pod repo push YourNamePod YourNamePod.podspec

至此,我所瞭解的一個閉環流程就結束了,但願以上內容有所幫助。

關於打包 CocoaPods 庫Tips

  1. 對外提供的接口須要明確的聲明 public ,不然即使可以 import *** 也沒法使用接口方法/屬性。
  2. 關於封裝 MLog 日誌時須要用到#if MLOG這樣的預處理宏操做,可是不知道爲啥在 Example 工程中作的配置(Pods 中 Targets 對應的地方作的配置)每次pod install 就本身清空了。若是有大佬清楚怎麼設置,感謝不吝指教。

精選參考文檔,並感謝!

  1. 私有庫構建流程
  2. 問題彙總
  3. 私有庫提升團隊的總體效率實踐

個人渣渣專欄還有點其餘方面的整理,不適合大神,49年入國軍的童鞋卻是能夠去瞄一下。至於訂閱,能保證的就是,我必定會更新下去😂。

相關文章
相關標籤/搜索