1. 程式人生 > >Cocoapods詳解之---建立私有倉庫篇

Cocoapods詳解之---建立私有倉庫篇

一、概述

CocoaPods是iOS,Mac下優秀的第三方包管理工具,類似於java的maven,給我們專案管理帶來了極大的方便。個人或公司在開發過程中,會積累很多可以複用的程式碼包,有些我們不想開源,又想像開源庫一樣在CocoaPods中管理它們,那麼通過私有倉庫來管理就很必要。對於CocoaPods還不太熟悉的,建議參考一下唐巧的部落格或者直接到CocoaPods的官網看看:https://cocoapods.org/

二、概念

大家很容易把spec repository 和 code repository弄混,我一開始就在這裡掛起了好久。

1.code repository是程式碼倉庫,我們把包程式碼上傳到這個倉庫。

2.spec repository是配置倉庫,所有的配置按照包名、版本號分門別類的存放在這個倉庫。這個倉庫只用來存放spec檔案,不存放程式碼。

小結:以AFNetWorking為例,如果只建立AFNetWorking的code repository,而不將code repository中的.Podspec檔案上傳到spec repository的話,你在自己的工程引入AFN的時候壓根用不了。

三、步驟

建立私有的CocoaPods倉庫之前需要先製作CocoaPods依賴庫,所以步驟分兩步:

1.製作CocoaPods依賴庫,也就是程式碼庫。

2.建立私有 CocoaPods 倉庫。

小結:1.製作依賴庫也就是在自己的伺服器或者github等遠端第三方伺服器建立一個倉庫,用來儲存.podspec、LICENSE、README.md以及程式碼檔案和一些資原始檔。

          2.建立私有 CocoaPods 倉庫也就是在自己的伺服器或者github等遠端第三方伺服器建立一個倉庫,用來接受並存放.podspec檔案,來管理自己的私庫。

四、製作 CocoaPods 依賴庫

當我們使用了類似於AFNetWorking這樣的Pods 依賴庫以後, 你一定對建立自己的依賴庫很有興趣吧,現在我們就來嘗試一下,以一個簡單 caculatorMaker 為例自己建立一個 Pods 依賴庫。

1.建立並設定一個私有的code Repository。

       因為GitHub的私有倉庫是收費的,我還不是GitHub的付費使用者,所以我使用了其他Git服務,我使用的是gitlab(我們公司是基於內網的,當然你也可以基於外網),當然還有其他的可供選擇開源中國、CODING、Bitbucket以及CSDN Code.

2.clone 倉庫到本地

       為了方便向倉庫中刪減內容,需要將倉庫 clone 到本地,這裡有多種操作方式,可以選擇你喜歡的一種,但是為了方便這邊選擇使用命令列。首先需要切換到你想在本地儲存的目錄,然後再 clone ,假設你放在使用者的根目錄上:

cd ~

git clone http://njGitrepo/xxx/caculatemaker.git

完成後,我們進入到 ~/caculatemaker 目錄,這時候你看到是一個空資料夾,這由於我用的是gitlab建立的,沒有像github網頁那樣在建立code Repository的時候可以勾選建立LICENSE和README.md檔案。其實也不是什麼都沒有,實際上是有一個隱藏的 .git 檔案,後續我們的所有檔案都在這個目錄下進行。

注意:開啟隱藏目錄,可以使用命令,接著需要重啟一下 Finder, 可以按住 option + 右鍵 Finder 圖示選擇重啟。

//開啟隱藏的命令:

defaults write com.apple.finder AppleShowAllFiles -bool true

//關閉隱藏的命令:

defaults write com.apple.finder AppleShowAllFiles -bool false

3.向本地倉庫中新增建立 Pods 依賴庫所需的檔案

這個程式碼庫需要手動在外面建立好.podspec、LICENSE、README.md以及程式碼檔案和一些資原始檔並拖動到,當然你在其他的git服務上需要建立的基本都是這幾種檔案。

 1).每個 Pods 依賴庫必須有且僅有一個名稱和依賴庫名保持一致,字尾名為 .podspec 的描述檔案。這裡我們依賴庫的描述檔名稱應該為 caculatormaker.podspec。

 2).建立這個.podspec 的描述檔案有兩種途徑:

                  a.複製已有的 podspec 檔案然後修改對應的引數。

                  b.執行命令列建立。

 我們使用命令列:

pod spec create caculatormaker

我們發現這個是ruby檔案,裡面有很多東西是我們不需要的,我們可以用文字編輯器開啟並刪除我們不需要的內容。

Pod::Spec.new do |s|  

s.name            = 'caculatemaker'  

s.version          = '0.1.0'  

s.summary          = 'just test'  s.description      = <<-DESC                     

                                                                                 Testing Private Podspec.                        

                                                                                  DESC 

 s.homepage        = 'http://njgitrepo/wushuanghong/caculatemaker'  

# s.screenshots    = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' 

 s.license          = { :type => 'MIT', :file => 'LICENSE' }  

s.author          = { 'shuanghong.wu' => '[email protected]' } 

 s.source          = { :git => 'http://njGitrepo/wushuanghong/caculatemaker.git' ,:tag => s.version}  

s.ios.deployment_target = '8.0'

s.source_files  = "Classes", "Classes/**/*.{h,m}", "caculator/**/*.{h,m}"

end

          3).README.md

           使用 github 的人應該都熟悉這個檔案,它使一個成功的 github 倉庫必不可少的一部分,使用 markdown 對倉庫進行詳細說明。

          4).LICENSE 檔案

          CocoaPods 強制要求所有的 Pods 依賴庫都必須有 license 檔案,否則驗證不會通過。 license 檔案有很多中,詳情可以參考 tldrlegal。前面我們已經選擇建立了一個 MIT 型別的 license。

4.提交修改到code Repository

經過前面步驟,我們已將在本地的 git 倉庫添加了不少檔案,現在我們只要將他們提交到 gitlab上就可以。在此之前我們需要對剛才新增的 pod 進行一下驗證:

pod lib lint

如果你剛才沒有給caculatormaker.podspec的s.source指定tag,就有可能有warn警告,執行下面的命令:

pod lib lint --allow-warnings

驗證成功之後,我們只要把程式碼提交到 gitlab 倉庫,就可以了,參考命令:

git add -A && git commit -m "add pod files"

git push origin master

如果以上的操作都沒有問題的話,gitlab上應該可以看到類似下面的內容:

到現在為止,我們的 CocoaPods 依賴庫就已經準備好了,但是現在你還不能在你的工程中使用它。如果你想成為一個真正可用的依賴庫,還需要最後一步操作:將剛才生產的 podspec 檔案提交到 自己建立的私有Spec Repository上,那麼繼續下面的第五步。

五、建立私有 CocoaPods 倉庫

1.建立並設定一個私有的Spec Repository。

跟第四步中的建立code Repository一樣,我們建立Spec Repository也是基於gitlab的,當讓你也可以用其他上面我提到的方式。

如圖所示,我們在github上建立一個空的倉庫,命名為wshSpecs,這個倉庫是用來存放我們自己所有的私有庫的spec檔案,就如同官方的https://github.com/CocoaPods/Specs是用來存放所有官方的specs檔案一樣。

終端執行命令:

pod repo add wshSpecs http://njGitrepo/wushuanghong/wshSpecs.git

注意:上面的命令的解釋如下:

pod repo add REPO_NAME SOURCE_URL

其中的 REPO_NAME 是我們要新增的私有repo的名稱(這裡我們待會填的是:wshSpecs),後面是倉庫的 gitlab 地址。這裡做的其實是建立的工作,也就是在~/.cocoapods/repo目錄下添加了一個以你的私有repo為名的資料夾,但是並沒有新增spec檔案。

這裡用的是https地址,當然你也可以用git地址,不過這樣有可能失敗。如果失敗,很大因素是你githubssh在本地沒有配置好,配置方法可以看這裡:Generating SSH keys,成功後可以看得到.cocoapods目錄如下圖所示:

至此,我們已經在本地得到我們自己的私有倉庫 wshSpecs ,這是一個空的倉庫。

注意:這裡我需要介紹一下上面的master資料夾裡面到底是什麼東西:

            a. 進入到這個目錄

                在Finger前往資料夾中輸入  ~/.cocoapods, 顯示的內容就是上圖的介面。

            b.點開master資料夾下面的spec目錄,其下存放的就是所有提交到 CocoaPods 的開源庫的 podspec 檔案的集       合。

其結構如下圖所示:

其組成方式:

specName -- version -- specName.podspec

( master 裡現在是 specName.podspec.json,這個 .json 檔案就是 podspec 檔案加了個字尾。我們可以採用 pod ipc spec 這個命令來將 spec 檔案轉換成 .json)

那這個資料夾是如何來得呢?其實,這個資料夾是在你安裝了 CocoaPods 後,第一次執行 pod install 時, CocoaPods 通過命令 pod setup 來建立的(這條命令會自動執行)。

2.新增 剛才第四步建立的 caculatormaker.podspec 到你的 Spec Repository。

在前面驗證通過的基礎上,我們接著執行命令:

pod repo push wshSpecs caculatormaker.podspec

按照平時使用 CocoaPods 的習慣,我們新增依賴庫之前會先搜尋一下庫,讓我們執行一下命令:

pod search caculatormaker

3.在個人專案中的Podfile中增加剛剛製作的好的Pod並使用。

讓我們建立一個普通的工程,命名為 TestPodDemo,然後在終端 cd 到其目錄路徑下,新增一個 Podfile 檔案:

pod init

建立後修改 Podfile 檔案內容如下:

source 'https://github.com/CocoaPods/Specs.git'        #官方倉庫地址

source ‘http://njGitrepo/wushuanghong/wshSpecs.git’        #私有倉庫地址

use_frameworks!

target 'TestPodDemo' do

pod ‘caculatemaker’

end

執行:

pod install

這樣一來我們就可以使用這個私有庫了!

4.更新維護podspec。

當我們的程式碼變動時,首先需要更新code Repository中的.podspec 檔案的版本,然後push到 Spec Repository。

六、參考資料