cocoapods系列教程---創(chuàng)建私有pods

cocoapods系列教程---安裝與使用
cocoapods系列教程---Podfile文件
cocoapods系列教程---Podfile.lock文件 和 Spec Repo
cocoapods系列教程---spec文件
cocoapods系列教程---原理篇
cocoapods系列教程---讓自己的開源框架支持cocoapods
cocoapods系列教程---模塊化設(shè)計(jì)
cocoapods系列教程---創(chuàng)建私有pods

參考:http://blog.wtlucky.com/blog/2015/02/26/create-private-podspec/
為什么要?jiǎng)?chuàng)建私有的pods ?,對(duì)于個(gè)人,比如我的某些代碼片段,工具類非常好用,但是我又不想公開,每次使用又要配置一遍,太麻煩,采用私有的可以完美解決上面的問題.對(duì)于公司,有些公司有多個(gè)項(xiàng)目,但是很多模塊其實(shí)是重復(fù)的;另外如果一個(gè)項(xiàng)目到后期會(huì)變得很大,稍微改動(dòng)一下,編譯時(shí)間都會(huì)很長,利用pod進(jìn)行拆分,每個(gè)人負(fù)責(zé)一個(gè)模塊,不僅加快了便以速度,而且方便維護(hù).缺點(diǎn)當(dāng)然也是有的,萬一哪天cocoapods死了,那就麻煩了.

創(chuàng)建私有pods與公有pods步驟基本一致,區(qū)別在于,私有pods的repo(存放spec文件的地方)是私有的,你的項(xiàng)目也是私有的,并且自己的電腦能夠訪問這兩個(gè)地址.下面是詳細(xì)步驟:

  1. 創(chuàng)建并設(shè)置一個(gè)私有的Spec Repo。
  2. 創(chuàng)建Pod的所需要的項(xiàng)目工程文件,并且有可訪問的項(xiàng)目版本控制地址(可以是在本地或者遠(yuǎn)程倉庫)
  3. 創(chuàng)建Pod所對(duì)應(yīng)的podspec文件。
  4. 本地測(cè)試配置好的podspec文件是否可用。
  5. 向私有的Spec Repo中提交podspec。
  6. 在個(gè)人項(xiàng)目中的Podfile中增加剛剛制作的好的Pod并使用。
  7. 更新維護(hù)podspec

我們需要?jiǎng)?chuàng)建一個(gè)類似于master的私有Spec Repo,創(chuàng)建一個(gè) Git倉庫,這個(gè)倉庫你可以創(chuàng)建私有的也可以創(chuàng)建公開的,不過既然私有的Spec Repo,還是創(chuàng)建私有的倉庫吧,需要注意的就是如果項(xiàng)目中有其他同事共同開發(fā)的話,你還要給他這個(gè)Git倉庫的權(quán)限。因?yàn)镚itHub的私有倉庫是收費(fèi)的,我還不是GitHub的付費(fèi)用戶,所以我使用oschina創(chuàng)建私有倉庫.創(chuàng)建完成后執(zhí)行:

pod repo add 倉庫名 倉庫地址

例如: 
pod repo add WTSpecs https://coding.net/wtlucky/WTSpecs.git

如果成功的話到~/.cocoapods/repos目錄下就可以看到WTSpecs這個(gè)目錄了。至此第一步創(chuàng)建私有Spec Repo完成.
驗(yàn)證是否成功:

cd ~/.cocoapods/repos/artsy-specs
$ pod repo lint .

成功會(huì)顯示:

All the specs passed validation.

PS:如果有其他合作人員共同使用這個(gè)私有Spec Repo的話在他有對(duì)應(yīng)Git倉庫的權(quán)限的前提下執(zhí)行相同的命令添加這個(gè)Spec Repo即可.

下一步,提供項(xiàng)目工程的可訪問的項(xiàng)目版本控制地址,這個(gè)倉庫應(yīng)該也是私有的,只有自己和同事能訪問.例如:

git add .
git commit -s -m "Initial Commit of Library"
git remote add origin git@coding.net:wtlucky/podTestLibrary.git  
git push origin master     

下一步,打上tag標(biāo)記,因?yàn)閜odspec根據(jù)tag來找到指定版本的

git tag -m "first release" 0.1.0
git push --tags     #推送tag到遠(yuǎn)端倉庫

下一步,在項(xiàng)目根目錄創(chuàng)建并編輯podspec文件

pod spec create PodTestLibrary

用Xcode打開編輯,格式如下:

Pod::Spec.new do |s|
  #名稱
  s.name             = "PodTestLibrary" 
  #版本號(hào)  
  s.version          = "0.1.0"
  #簡短介紹,下面是詳細(xì)介紹             
  s.summary          = "Just Testing." 
      
  s.description      = <<-DESC
                       #這里寫詳細(xì)介紹
                       DESC
  #主頁,這里要填寫可以訪問到的地址,不然驗(yàn)證不通過,填個(gè)百度也行                     
  s.homepage         = "https://coding.net/u/wtlucky/p/podTestLibrary"  
   
  #截圖,如果沒有可以注釋掉這一行(前面加 # 注釋)                        
  s.screenshots     = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
  #開源協(xié)議,一般MIT           
  s.license          = 'MIT'
  #作者信息,后面是郵箱地址              
  s.author           = { "wtlucky" => "wtlucky@foxmail.com" }
  #項(xiàng)目地址,這里不支持ssh的地址,驗(yàn)證不通過,只支持HTTP和HTTPS,最好使用HTTPS                   
  s.source           = { :git => "https://coding.net/wtlucky/podTestLibrary.git", :tag => "0.1.0" }
  #多媒體介紹地址     
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'                       
  #支持的平臺(tái)及版本
  s.platform     = :ios, '7.0'
  #是否使用ARC,如果指定具體文件,則具體的問題使用ARC           
  s.requires_arc = true                   
  #代碼源文件地址,**/*表示Classes目錄及其子目錄下所有文件,如果有多個(gè)目錄下則用逗號(hào)分開,如果需要在項(xiàng)目中分組顯示,這里也要做相應(yīng)的設(shè)置 
  s.source_files = 'Pod/Classes/**/*'  
  #資源文件地址,建議直接用bundle,路徑為相對(duì)路徑,下同
  s.resource_bundles = {
    'PodTestLibrary' => ['Pod/Assets/*.png']
  }                                       

  #公開頭文件地址
  s.public_header_files = 'Pod/Classes/**/*.h'
  #所需的framework,多個(gè)用逗號(hào)隔開   
  s.frameworks = 'UIKit'
  #所需的依賴庫,多個(gè)用逗號(hào)隔開,z代表libz.tdb,前綴lib和后綴tdb可省略
  spec.librarys               = 'z'
  #依賴關(guān)系,該項(xiàng)目所依賴的其他庫,如果有多個(gè)需要填寫多個(gè)s.dependency                  
  s.dependency 'AFNetworking', '~> 2.3'
     
end

下一步,保存文件,需要驗(yàn)證一下這個(gè)文件是否可用,如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中,不過xcode的WARNING是可以存在的,驗(yàn)證需要執(zhí)行一下命令:

pod spec lint PodTestLibrary.podspec

如果驗(yàn)證通過會(huì)顯示:

PodTestLibrary passed validation.

驗(yàn)證通過表明這個(gè)podspec文件是合格的,不一定說明這個(gè)Pod是可以用的,我們需要在本地做一下驗(yàn)證.

下一步,本地驗(yàn)證:
我們可以創(chuàng)建一個(gè)新的項(xiàng)目,在這個(gè)項(xiàng)目的Podfile文件中直接指定剛才創(chuàng)建編輯好的podspec文件,看是否可用。 在Podfile中我們可以這樣編輯,有兩種方式:

platform :ios, '7.0'

pod 'PodTestLibrary', :path => '~/code/Cocoapods/podTest/PodTestLibrary'      # 指定路徑
pod 'PodTestLibrary', :podspec => '~/code/Cocoapods/podTest/PodTestLibrary/PodTestLibrary.podspec'  # 指定podspec文件

然后執(zhí)行pod install命令安裝依賴,打開項(xiàng)目工程,可以看到庫文件都被加載到Pods子項(xiàng)目中了,不過它們并沒有在Pods目錄下,而是跟測(cè)試項(xiàng)目一樣存在于Development Pods/PodTestLibrary中,這是因?yàn)槲覀兪窃诒镜販y(cè)試,而沒有把podspec文件添加到Spec Repo中的緣故。

下一步,向私有倉庫提交podspec

向Spec Repo提交podspec需要確認(rèn)podspec必須通過驗(yàn)證無誤,然后提交:

pod repo push WTSpecs PodTestLibrary.podspec

完成之后這個(gè)組件庫就添加到我們的私有Spec Repo中了,可以進(jìn)入到~/.cocoapods/repos/WTSpecs目錄下查看:

.
├── LICENSE
├── PodTestLibrary
│   └── 0.1.0
│       └── PodTestLibrary.podspec
└── README.md

再去看我們的Spec Repo遠(yuǎn)端倉庫,也有了一次提交,這個(gè)podspec也已經(jīng)被Push上去了,至此,我們的這個(gè)組件庫就已經(jīng)制作添加完成了,使用pod search命令就可以查到我們自己的庫了.如果過搜不到,看文章最后.

在完成這一系列步驟之后,我們就可以在正式項(xiàng)目中使用這個(gè)私有的Pod了

platform :ios, '7.0'

target "test" do
    
    pod 'PodTestLibrary','~>0.1.0', source: 'https://coding.net/wtlucky/podTestLibrary.git'

end

到此完成.

這里有個(gè)偏方:可以將spec文件保存到本機(jī)的~/.cocoapods/master/目錄中僅供自己使用,比較適合一個(gè)人.

多人開發(fā)

如果需要多個(gè)人維護(hù)一個(gè)庫,每個(gè)人都應(yīng)該有權(quán)限push提交;第一個(gè)push的人可以被認(rèn)為是管理員,可以再添加管理員,這樣管理員就有權(quán)限push了

pod trunk add-owner 郵箱地址

移除某個(gè)管理員

pod trunk remove-owner 郵箱地址

常見問題

  • search命令搜索不到,更新一下倉庫就可以了
  • 刪除指定版本,刪除后需要更新,否則還能搜到
  • pattern did not match any file這個(gè)錯(cuò)誤是因?yàn)闆]有匹配到文件,很有可能是你的修改沒有提交到git遠(yuǎn)程倉庫
  • 明明已經(jīng)提交了到pod倉庫了,還是提示Unable to find a pod with name, author, summary, or descriptionmatching,解決辦法
rm ~/Library/Caches/CocoaPods/search_index.json  

  • 本地驗(yàn)證通過了,也提交了podspec,也能search到,但是pod install的時(shí)候出現(xiàn)下面的提示
Unable to find a specification for
    pod 'SGExtension','~>1.0.1', source: 'https://git.oschina.net/iOSSingeri/SGPodRepo.git'

需在podfile文件最上面加上私有pods倉庫地址:

source 'https://github.com/CocoaPods/Specs.git'  # 官方庫
source 'https://git.coding.net/wtlucky/WTSpecs.git'   # 私有庫

  • 更新指定倉庫
pod repo update SGPodRepo

cocoapods參考文獻(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容