CocoaPods 遠(yuǎn)程私有庫(kù)

前言

隨著iOS APP越來(lái)越復(fù)雜,功能越來(lái)越多,對(duì)于iOS項(xiàng)目的工程化要求也越來(lái)越高了,對(duì)于復(fù)雜的APP一般都需要對(duì)項(xiàng)目進(jìn)行模塊化管理,由此引出了iOS組件化開(kāi)發(fā)。
iOS組件化開(kāi)發(fā)很重要的一個(gè)技術(shù)點(diǎn):CocoaPods私有庫(kù)的搭建。
私有庫(kù)由兩部分構(gòu)成項(xiàng)目工程倉(cāng)庫(kù)和索引倉(cāng)庫(kù)。

文章較長(zhǎng),先列一下操作步驟

一、創(chuàng)建一個(gè)私有的索引庫(kù)(spec repo)的遠(yuǎn)程庫(kù)。
二、創(chuàng)建一個(gè)私有的存放項(xiàng)目工程的遠(yuǎn)程庫(kù)。
三、創(chuàng)建索引庫(kù)(spec repo)。
四、創(chuàng)建項(xiàng)目工程,并上傳到遠(yuǎn)程私有倉(cāng)庫(kù)。
五、向私有的索引庫(kù)(spec repo)遠(yuǎn)程庫(kù)提交索引(podspec)。
六、使用自己創(chuàng)建的私有庫(kù)。
七、版本更新。
八、.podspec文件說(shuō)明。

詳細(xì)步驟

(注:github創(chuàng)建私有項(xiàng)目是收費(fèi)的,所以這里選擇免費(fèi)的“碼云”)
一、創(chuàng)建一個(gè)私有的索引庫(kù)(spec repo)的遠(yuǎn)程庫(kù)。

1.創(chuàng)建索引遠(yuǎn)程庫(kù)存放本地索引。


image.png
二、創(chuàng)建一個(gè)私有的存放項(xiàng)目工程的遠(yuǎn)程庫(kù)。
image.png
三、創(chuàng)建索引庫(kù)(spec repo)。

前往文件夾 ~/.cocoapods/repos,打開(kāi)終端,在終端切換到當(dāng)前目錄下,然后進(jìn)行pod repo add操作,在終端輸入:

pod repo add CZSpec https://gitee.com/__/czspec.git

注:https://gitee.com/__/czspec.git是剛創(chuàng)建好的索引庫(kù)(spec Repo)的私有遠(yuǎn)程庫(kù)地址。

image.png

pod repo add操作后會(huì)clone遠(yuǎn)程索引庫(kù)到 ~/.cocoapods/repos文件夾下
image.png

四、創(chuàng)建項(xiàng)目工程,并上傳到遠(yuǎn)程私有倉(cāng)庫(kù)。

創(chuàng)建本地pod所需的項(xiàng)目工程文件,在終端,cd切換到某個(gè)目錄下,這里我選擇的是桌面上文件夾Test目錄下的,然后執(zhí)行

pod lib create CZProject
image.png

超時(shí)了多執(zhí)行幾次命令就好了

pod lib create CZProject
image.png
image.png

然后進(jìn)入到CZProject里面找到Classes中的"ReplaceMe.m"文件刪除,然后將自己所需要的文件放到這里目錄下


image.png

接下來(lái)最重要的一步,也是很容易忽略的一步,不然提交后檢查會(huì)出現(xiàn)很多問(wèn)題。
具體步驟:

(1)cd 到Example文件下,然后pod install下,更新Example項(xiàng)目的pod。


image.png

(2)打開(kāi)example中的項(xiàng)目,找到項(xiàng)目中的podspec文件,更改spec。


image.png

修改完成后,cd 到CZProject目錄下,然后驗(yàn)證本地podspec文件有效性,終端命令如下
pod lib lint CZProject.podspec
image.png

報(bào)了個(gè)警告提示用--allow-warnings 忽略,再次執(zhí)行命令

pod lib lint CZProject.podspec --allow-warnings

本地項(xiàng)目上傳到遠(yuǎn)程倉(cāng)庫(kù)中,將本地項(xiàng)目與遠(yuǎn)程倉(cāng)庫(kù)相關(guān)聯(lián),使用終端命令:

git remote add origin 遠(yuǎn)程倉(cāng)庫(kù)地址

然后將本地項(xiàng)目推送到遠(yuǎn)端

git push origin master
image.png

push到遠(yuǎn)程的時(shí)候出現(xiàn)這種問(wèn)題,然后先pull ,出現(xiàn)下面問(wèn)題(即拒絕合并不相關(guān)的歷史,確實(shí)本地新加的內(nèi)容還從未和線上連接過(guò))



之后輸入如下命令(即告訴允許合并不相關(guān)的歷史內(nèi)容):

git pull origin master --allow-unrelated-histories
image.png

解決沖突后上傳到遠(yuǎn)程倉(cāng)庫(kù)


image.png

這樣遠(yuǎn)程倉(cāng)庫(kù)就有我們本地的項(xiàng)目了


image.png

image.png
五、向私有的索引庫(kù)(spec repo)遠(yuǎn)程庫(kù)提交索引(podspec)。

首先需要給CZProject 打標(biāo)簽,打的標(biāo)簽值要與podspec文件中的版本號(hào)一致


image.png
image.png

然后進(jìn)行.podspec文件本地和遠(yuǎn)程有效性的驗(yàn)證,終端命令如下:

pod spec lint CZProject.podspec
image.png

同樣報(bào)了個(gè)警告,再次執(zhí)行命令,忽略警告

pod spec lint CZProject.podspec --allow-warnings

注意:
如果私有庫(kù)中依賴私有庫(kù),則驗(yàn)證podspec文件的時(shí)候需要加上–sources參數(shù),否則會(huì)出現(xiàn)找不到你依賴的私有庫(kù),示例:

pod spec lint yourProjectName.podspec -- sources='git@xxx.xxx.xxx.xxx:/yourProjectName.git,https://github.com/CocoaPods/Specs 

向私有的索引庫(kù)(spec Repo)遠(yuǎn)程倉(cāng)庫(kù)中提交podspec
使用命令把私有庫(kù)添加到私有遠(yuǎn)程庫(kù)中。

 pod repo push CZSpec CZProject.podspec --verbose --allow-warnings 
image.png

前往文件夾 ~/.cocoapods/repos去查看CZSpec目錄下的文件如下:

image.png

之后,可以通過(guò)終端命令查看第三方框架倉(cāng)庫(kù)源,命令如下:

pod repo
image.png

到此,創(chuàng)建私有庫(kù)成功了。

六、使用自己創(chuàng)建的私有庫(kù)。

創(chuàng)建一個(gè)新的工程,在podfile 使用source 指定:


image.png

然后跳轉(zhuǎn)到項(xiàng)目目錄,執(zhí)行終端命令pod install,之后就可以使用了。


image.png

image.png
七、版本更新。

找到工程庫(kù)打開(kāi)CZProject.xcworkspace

1.修改.podspec文件中的版本號(hào)
        s.version          = '0.1.1' //修改0.1.1版本,不能是之前的版本,要不提交不成功

2.項(xiàng)目上傳到遠(yuǎn)程倉(cāng)庫(kù)

        $ git add . 

        $ git commit -m “XX”  

        $ git push

3.打tag并上傳

        $ git tag '0.1.1'  

        $ git push --tags

 4.驗(yàn)證pod并提交到pod

         $ pod spec lint CZProject.podspec --allow-warnings    //遠(yuǎn)程本地pod驗(yàn)證

         $  pod repo push CZSpec CZProject.podspec --verbose --allow-warnings    //提交pod  CZSpec 是之前生成的本地庫(kù)名 CZProject.podspec 工程索引文件

八、.podspec文件說(shuō)明。
Pod::Spec.new do |s|
# 項(xiàng)目的名稱
  s.name             = 'CZProject'
# 項(xiàng)目的版本號(hào),通過(guò)項(xiàng)目git的tag標(biāo)簽進(jìn)行對(duì)應(yīng),這里的標(biāo)簽代表的版本
  s.version          = '0.1.0'
# 項(xiàng)目簡(jiǎn)單的描述信息
  s.summary          = 'A short description of CZProject.'
# 項(xiàng)目的詳細(xì)描述信息,注意,這里的文字的長(zhǎng)度,一定要比上面的s.summary長(zhǎng),不然會(huì)認(rèn)為格式不合格
  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC
# 項(xiàng)目的網(wǎng)頁(yè)主頁(yè)信息,這里可以直接寫自己的遠(yuǎn)程倉(cāng)庫(kù)的主頁(yè)的地址
  s.homepage         = 'https://www.baidu.com'
# 截圖
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
# 開(kāi)源協(xié)議
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
# 作者信息
  s.author           = { 'chaozai' => '164125801@qq.com' }
# 項(xiàng)目地址,這里不支持ssh的地址,驗(yàn)證不通過(guò),只支持HTTP和HTTPS,最好使用HTTPS
  s.source           = { :git => 'https://gitee.com/___/czproject', :tag => s.version.to_s }
# 多媒體介紹地址
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
# 支持的平臺(tái)及版本
  s.ios.deployment_target = '9.0'
# 代碼源文件地址,**/*表示Classes目錄及其子目錄下所有文件,如果有多個(gè)目錄下則用逗號(hào)分開(kāi),如果需要在項(xiàng)目中分組顯示,這里也要做相應(yīng)的設(shè)置
  s.source_files = 'CZProject/Classes/**/*'
# 資源文件地址
  # s.resource_bundles = {
  #   'CZProject' => ['CZProject/Assets/*.png']
  # }
# 公開(kāi)頭文件地址
  # s.public_header_files = 'Pod/Classes/**/*.h'
# 所需的framework,多個(gè)用逗號(hào)隔開(kāi)
  # s.frameworks = 'UIKit', 'MapKit'
# 依賴關(guān)系,該項(xiàng)目所依賴的其他,當(dāng)在加載的時(shí)候也會(huì)一塊把相關(guān)的依賴的庫(kù)加載下來(lái),如果有多個(gè)需要填寫多個(gè)
  # s.dependency 'AFNetworking', '~> 2.3'
end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容