Swift/Objective-C-使用Cocoapods創(chuàng)建/管理私有庫(kù)(初中級(jí)用法)

團(tuán)隊(duì)管理開發(fā),資源整合維護(hù)精置,或者其他情況计寇,需要建立私有庫(kù),不被別人訪問脂倦。
如果是團(tuán)隊(duì)管理開發(fā)私有庫(kù)番宁,需要釋放私有庫(kù)權(quán)限給團(tuán)隊(duì)成員。

廢話不多說(shuō)了赖阻,開始蝶押。

另外兩篇文章:
Swift/Objective-C-使用Cocoapods創(chuàng)建/管理公共庫(kù)
Swift/Objective-C-使用Cocoapods創(chuàng)建/管理公共庫(kù)(高級(jí)用法)

梳理創(chuàng)建流程:
  • 基礎(chǔ)
  • 開始前準(zhǔn)備工作;
  • 檢查庫(kù)名是否被占用火欧;
  • 在遠(yuǎn)程端創(chuàng)建一個(gè)私有(Private)的索引庫(kù)(版本庫(kù)棋电,Spec repo)和一個(gè)私有(Private)的代碼庫(kù)(pod)茎截,待用;
  • 將遠(yuǎn)程端私有索引庫(kù)添加(clone)到本地的~/.cocoapods/repos文件夾下赶盔,并查看結(jié)果企锌;
  • 創(chuàng)建本地工程(兩種方式);
  • 添加自己封裝的源代碼于未、資源文件到工程指定目錄下撕攒;
  • 配置工程中的.podspec文件;
  • 通過pod installpod update命令更新demo工程沉眶,并編譯運(yùn)行是否有錯(cuò)誤(每次更改信息后都需要更新編譯demo工程打却,保證添加的源代碼、資源文件無(wú)誤谎倔,若無(wú)demo工程可忽略此步驟)柳击;
  • 通過Pod命令驗(yàn)證本地.podspec文件(若有錯(cuò)誤,修改后再次驗(yàn)證片习,直到通過驗(yàn)證)捌肴;
  • 通過Git命令提交本地工程到遠(yuǎn)程端的私有代碼庫(kù),并且添加tag藕咏;
  • 通過Pod命令驗(yàn)證遠(yuǎn)程端.podspec文件(若有錯(cuò)誤状知,修改后再次驗(yàn)證,直到通過驗(yàn)證)孽查;
  • 提交.podsepc文件到私有索引庫(kù)饥悴,并更新到本地私有索引庫(kù)(至此完成私有庫(kù)的創(chuàng)建);
  • 檢驗(yàn)1:通過pod search 私有庫(kù)名命令搜索自己的私有庫(kù)盲再;
  • 檢驗(yàn)2:新建測(cè)試項(xiàng)目西设,在Podfile中引入自己的私有庫(kù)pod '私有庫(kù)',及引入時(shí)的注意事項(xiàng)答朋,然后再次檢查是否可引入贷揽,是否可用;
  • 中級(jí)
  • 現(xiàn)有私有庫(kù)的更新管理維護(hù)梦碗;
  • 本地索引庫(kù)管理的其他命令禽绪;


一、開始前的準(zhǔn)備
  1. GitHub或碼云或GitLab或其他存儲(chǔ)庫(kù)的賬號(hào)(我這里用的是GitLab)洪规;
  2. Sourcetree管理自己的私有庫(kù)(需要注冊(cè)Sourcetree賬號(hào))印屁,或者通過終端命令進(jìn)行管理(以終端命令為例);
二斩例、檢查你要?jiǎng)?chuàng)建的私有庫(kù)的庫(kù)名是否已經(jīng)被占用

為什么我們要先檢查一下自己創(chuàng)建的私有庫(kù)的庫(kù)名是否被占用呢雄人?因?yàn)槲抑皠?chuàng)建公共庫(kù)的時(shí)候,我的庫(kù)名在Cocoapods中已存在樱拴,在驗(yàn)證的時(shí)候沒提示我?guī)烀徽加媚埽阶詈笠徊教峤坏臅r(shí)候提交不到GitHub上洋满,說(shuō)我的庫(kù)名已被占用,所以只能重新來(lái)一遍了珍坊。另一方面牺勾,如果你的私有庫(kù)和公共庫(kù)有重名的,當(dāng)你在項(xiàng)目的Podfile文件pod你的私有庫(kù)時(shí)阵漏,當(dāng)pod找不到你的私有庫(kù)就會(huì)去公共庫(kù)搜索有沒有和這個(gè)庫(kù)名一樣的庫(kù)驻民,如果有就會(huì)下載這個(gè)同名的公共庫(kù)了,這樣pod的就不是自己想引入的私有庫(kù)了履怯,所以需要在創(chuàng)建私有代碼/索引庫(kù)前檢查一下自己創(chuàng)建的私有庫(kù)的庫(kù)名是否被占用回还。這里以私有索引庫(kù)名為例。

$ pod search JYPrivateRepoTest0
[!] Unable to find a pod with name, author, summary, or description matching `JYPrivateRepoTest0`

如上信息叹洲,沒有搜索到與我的庫(kù)名相關(guān)信息柠硕,說(shuō)明該庫(kù)名沒有被占用,可以使用运提』热幔或者搜索到幾個(gè)或許多與你的庫(kù)名相似的庫(kù),你仔細(xì)瀏覽一下有沒有和你一樣的庫(kù)名民泵,若沒有則可以使用癣丧。
注意:要記住自己創(chuàng)建的私有庫(kù)名一定不要跟Github上的第三方庫(kù)重名,否則會(huì)搜不到栈妆。即便能搜索得到胁编,pod進(jìn)來(lái)的庫(kù)也不一定是你自己的私有庫(kù),有可能是Github上重名的公共第三方庫(kù)鳞尔,而不是自己的私有庫(kù)嬉橙。因?yàn)閜od集成時(shí)會(huì)先從Github上的公共第三方庫(kù)查找,然后才是私有庫(kù)中查找铅檩。

三憎夷、在遠(yuǎn)程端創(chuàng)建一個(gè)私有索引庫(kù)(版本庫(kù))和一個(gè)私有代碼庫(kù)(待用)

我這里是在GitLab上創(chuàng)建的私有索引庫(kù)和私有代碼庫(kù)莽鸿,根據(jù)自己的情況在相應(yīng)平臺(tái)創(chuàng)建你的私有索引庫(kù)和私有代碼庫(kù)昧旨。

  1. 創(chuàng)建一個(gè)私有索引庫(kù),庫(kù)名為JYPrivateRepoTest0祥得,如下圖所示:

    創(chuàng)建remote索引庫(kù).png
    注意:可見等級(jí) 選擇的是私有選項(xiàng)兔沃。如果在GitHub上創(chuàng)建,那選擇的是Private選項(xiàng)级及。

  2. 創(chuàng)建一個(gè)私有代碼庫(kù)乒疏,庫(kù)名為JYPrivateLibTest0,如下圖所示:

    創(chuàng)建remote代碼庫(kù).png

注意:如果你計(jì)劃在本地創(chuàng)建pod饮焦,你應(yīng)該具有對(duì)git地址push的訪問權(quán)怕吴。

四窍侧、添加(clone)遠(yuǎn)程端私有索引庫(kù)到本地
  1. 將遠(yuǎn)程端私有索引庫(kù)(Repo)添加到本地的~/.cocoapods/repos文件夾下,運(yùn)行命令如下:
/// pod repo add JYPrivateRepoTest0 [私有索引庫(kù)地址]
$ pod repo add JYPrivateRepoTest0 https://git.asd.net/pod/JYPrivateRepoTest0.git
Cloning spec repo `JYPrivateRepoTest0` from `https://git.asd.net/pod/JYPrivateRepoTest0.git`
  1. 查看~/.cocoapods/repos文件夾下clone的私有索引庫(kù)转绷,如下圖:

    添加的索引庫(kù).png

    注意:master文件夾是cocoapods創(chuàng)建的公共索引庫(kù)文件夾伟件,其中存放的是cocoapods中所有公共庫(kù)的各個(gè)版本的.podsepc文件。JYPrivateRepoTest0文件夾是自己創(chuàng)建的私有索引庫(kù)文件夾议经,存放的是自己的私有庫(kù)下各個(gè)版本的.podsepc文件斧账。

  2. 校驗(yàn)?zāi)惚镜靥砑拥乃接兴饕龓?kù)的安裝是否成功,并準(zhǔn)備好煞肾。命令如下:

$ cd ~/.cocoapods/repos/JYPrivateRepoTest0
$ pod repo lint
五咧织、創(chuàng)建本地私有代碼庫(kù)工程(兩種方式)
  • 通過終端Pod命令創(chuàng)建本地私有代碼庫(kù)模板工程(項(xiàng)目)
  1. 打開終端,cd 到存放工程的目標(biāo)目錄下
$ cd Desktop/PrivateRepository/
  1. 創(chuàng)建本地私有代碼庫(kù)(模板工程)到目標(biāo)目錄下籍救,命令如下:
/// pod lib create [工程名] --template-url=URL(自己的工程模板地址)  
/// 工程名:一般和遠(yuǎn)程端私有代碼庫(kù)名一致
/// 注意:要使用自己的私有代碼庫(kù)模板习绢,可以添加參數(shù)--template-url =URL,其中URL是包含兼容模板的git repo蝙昙。
$ pod lib create JYPrivateLibTest0

在創(chuàng)建過程中毯炮,需要配置幾個(gè)信息,如下:

Cloning `https://github.com/CocoaPods/pod-template.git` into `JYPrivateLibTest0`.
Configuring JYPrivateLibTest0 template.

------------------------------

To get you started we need to ask a few questions, this should only take a minute.

If this is your first time we recommend running through with the guide: 
 - https://guides.cocoapods.org/making/using-pod-lib-create.html
 ( hold cmd and double click links to open in a browser. )


# 私有庫(kù)應(yīng)用的平臺(tái)
What platform do you want to use?? [ iOS / macOS ]  
 > iOS

# 私有庫(kù)使用的編程語(yǔ)言
What language do you want to use?? [ Swift / ObjC ]  
 > Swift

# 是否需要在私有代碼庫(kù)工程中生成一個(gè)demo應(yīng)用程序(項(xiàng)目)耸黑,需要或不需要根據(jù)自己喜好選擇(建議選擇Yes桃煎,因?yàn)檫@樣你可以隨時(shí)查看你創(chuàng)建的庫(kù)是否正確可用)
Would you like to include a demo application with your library? [ Yes / No ]  
 > Yes

# 是否需要使用測(cè)試框架,根據(jù)自己情況選擇大刊,我這里不需要
Which testing frameworks will you use? [ Quick / None ]  
 > None

# 是否需要做基于視圖的測(cè)試为迈,根據(jù)自己情況選擇,我這里不需要
Would you like to do view based testing? [ Yes / No ]  
 > No

Running pod install on your new library.

Analyzing dependencies
Fetching podspec for `JYPrivateLibTest0` from `../`
Downloading dependencies
Installing JYPrivateLibTest0 (0.1.0)
Generating Pods project
Integrating client project

[!] Please close any current Xcode sessions and use `JYPrivateLibTest0.xcworkspace` for this project from now on.
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.

[!] Automatically assigning platform `ios` with version `9.3` on target `JYPrivateLibTest0_Example` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.

 Ace! you're ready to go!
 We will start you off by opening your project in Xcode
  open 'JYPrivateLibTest0/Example/JYPrivateLibTest0.xcworkspace'

To learn more about the template see `https://github.com/CocoaPods/pod-template.git`.
To learn more about creating a new pod, see `http://guides.cocoapods.org/making/making-a-cocoapod`.

關(guān)于以上配置問題的解釋請(qǐng)參見Cocoapods - Using Pod Lib Create
注意:若是Objective-C平臺(tái)會(huì)有不同的問題需要配置缺菌,這里以Swift為例葫辐。

至此本地私有代碼庫(kù)模板工程創(chuàng)建完成。
若選擇了創(chuàng)建demo工程伴郁,本地私有代碼庫(kù)模板工程創(chuàng)建完成后耿战,會(huì)自動(dòng)打開demo工程。
pod lib create 工程名命令焊傅,會(huì)自動(dòng)創(chuàng)建.podspec文件剂陡、README.md文件和LICENSE開源協(xié)議文件等。

  1. 終端cd 到PrivateRepository目錄下狐胎,運(yùn)行tree命令查看本地私有代碼庫(kù)模板工程目錄結(jié)構(gòu)鸭栖,如下:
$ tree JYPrivateLibTest0 -L 2
JYPrivateLibTest0
├── Example                                 # demo工程文件夾
│   ├── JYPrivateLibTest0
│   ├── JYPrivateLibTest0.xcodeproj
│   ├── JYPrivateLibTest0.xcworkspace
│   ├── Podfile                             # demo的依賴描述文件
│   ├── Podfile.lock
│   ├── Pods                                # demo依賴的第三方庫(kù)文件夾
│   └── Tests
├── JYPrivateLibTest0                       # 存放源代碼和資源文件的文件夾
│   ├── Assets                              # 存放資源文件的文件夾
│   └── Classes                             # 存放源文件的文件夾
├── JYPrivateLibTest0.podspec               # 庫(kù)的配置文件
├── LICENSE                                 # 開源協(xié)議,默認(rèn)MIT
├── README.md                                             
└── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj

10 directories, 5 files

可通過brew 安裝 tree握巢,命令: $ brew install tree

文件夾目錄結(jié)構(gòu)晕鹊,Example文件夾下是demo工程,JYPrivateLibTest0文件夾下是存放私有代碼庫(kù)源代碼文件、資源文件等溅话,如下圖:

工程文件夾目錄結(jié)構(gòu).png

Xcode打開的demo工程目錄晓锻,如下圖:
demo工程目錄.png
  • 將遠(yuǎn)程端的私有代碼庫(kù)clone到本地目標(biāo)目錄下,然后添加幾個(gè)必要的文件
  1. 通過Sourcetree軟件或者終端Git命令飞几,將遠(yuǎn)程端的私有代碼庫(kù)clone到本地目標(biāo)目錄下带射,此步驟不過多描述,git命令參考循狰。

  2. cd 到你clone的私有代碼庫(kù)工程目錄下窟社,在目錄下添加.podspec文件到工程中,命令如下:

/// 以下三種方式都可以創(chuàng)建.podspec文件绪钥,選擇其中一種創(chuàng)建即可
/// pod spec create [文件名(與工程名一致)]  
$ pod spec create JYPrivateLibTest0   
或者  
/// touch [文件名.podspec]  
$ touch JYPrivateLibTest0.podspec  
或者  
/// vim [文件名.podspec]  
$ vim JYPrivateLibTest0.podspec
  1. 添加README.md文件和LICENSE開源協(xié)議文件灿里,可以從別的項(xiàng)目中copy過來(lái),然后修改修改程腹。如果你在第三步創(chuàng)建私有代碼庫(kù)的時(shí)候匣吊,選擇創(chuàng)建了這兩個(gè)文件,那這步請(qǐng)?zhí)^寸潦。
    注意:LICENSE開源協(xié)議文件必須要有色鸳,因?yàn)镃ocoapods不允許沒有LICENSE開源協(xié)議文件的庫(kù)到Cocoapods上。
六见转、添加自己封裝的源代碼命雀、資源文件到工程目錄下
  1. 在Xcode打開的demo工程目錄下的pod中,找到ReplaceMe.swift文件斩箫,右擊Show in Finder吏砂,查看源文件存放的真正目錄位置。Classes文件夾存放源代碼文件乘客,Assets文件夾存放資源文件狐血。

  2. 將自己封裝的源代碼文件、資源文件易核,分別放到Classes和Assets文件夾下即可匈织。將無(wú)用的ReplaceMe.swift文件刪除。
    添加后的目錄牡直,如下圖:

    添加自己的源文件.png
    注意:如果你不想用系統(tǒng)自動(dòng)幫你創(chuàng)建的Classes和Assets文件夾缀匕,那么你可以直接刪掉,根據(jù)自己喜好重新創(chuàng)建/存放相關(guān)內(nèi)容井氢。切記不要忘記修改.podspec文件中相應(yīng)的路徑配置弦追,否則會(huì)由于路徑問題岳链,驗(yàn)證的時(shí)候找不到對(duì)應(yīng)的文件而驗(yàn)證失敗花竞。

七、配置工程中的.podspec文件

.podspec文件描述了Pod庫(kù)的一個(gè)版本。一個(gè)索引庫(kù)约急,隨著時(shí)間的推移零远,將有許多的版本。它包括關(guān)于應(yīng)該從何處獲取源厌蔽、使用什么文件牵辣、應(yīng)用構(gòu)建設(shè)置以及其他通用元數(shù)據(jù)(如其名稱、版本和描述)的詳細(xì)信息奴饮。
Specs Repo是GitHub上的存儲(chǔ)庫(kù)纬向,其中包含所有可用pods的列表。每個(gè)庫(kù)都有一個(gè)單獨(dú)的文件夾戴卜,其中包含該pod可用版本的子文件夾逾条。

  1. 在Xcode打開的demo工程中,找到Podspec Metadata文件夾下的工程名.podspec文件投剥。如果沒有demo工程师脂,可以直接打開工程文件夾,然后找到.podspec文件江锨,然后右鍵選擇打開方式->文本編輯/Xcode吃警,或者終端vim編輯等。

  2. 我的配置如下:

Pod::Spec.new do |s|
  s.name             = 'JYPrivateLibTest0' #工程名稱
  s.version          = '1.0.0' # 版本號(hào)
  s.summary          = '這是一個(gè)私有測(cè)試庫(kù)啄育!' # 簡(jiǎn)短介紹
  s.homepage         = 'https://git.asd.net/pod/JYPrivateLibTest0' # 主頁(yè),這里要填寫可以訪問到的地址酌心,不然驗(yàn)證不通過
  s.license          = { :type => 'MIT', :file => 'LICENSE' } # 開源協(xié)議
  s.author           = { 'JYanshao' => '你的郵箱地址' } # 作者信息
  s.source           = { :git => 'https://git.asd.net/pod/JYPrivateLibTest0.git', :tag => s.version.to_s } # 遠(yuǎn)程端私有代碼庫(kù)地址,這里不支持ssh的地址挑豌,驗(yàn)證不通過谒府,只支持HTTP和HTTPS,最好使用HTTPS
  s.ios.deployment_target = '8.0' # 支持的平臺(tái)及版本
  s.requires_arc = true # 是否使用ARC浮毯,如果指定具體文件完疫,則具體的文件使用ARC
  s.source_files = 'JYPrivateLibTest0/Classes/**/*' # 源代碼文件路徑,**/*表示Classes目錄及其子目錄下所有文件债蓝,如果有多個(gè)目錄下則用逗號(hào)分開壳鹤,如果需要在項(xiàng)目中分組顯示,這里也要做相應(yīng)的設(shè)置
  s.swift_version = '4.0' # 項(xiàng)目中使用的Swift版本饰迹,多個(gè)用“,”隔開
end

.podspec文件中的配置參數(shù)說(shuō)明芳誓,請(qǐng)參見Cocoapods-Podspec語(yǔ)法參考 或者 使用Cocoapods創(chuàng)建/管理公共庫(kù)

八、更新demo工程啊鸭,并編譯運(yùn)行demo锹淌,是否成功

終端運(yùn)行$ cd Example/命令,到Example文件夾目錄下赠制,然后運(yùn)行pod installpod update命令更新demo工程赂摆,并在Xcode中編譯運(yùn)行demo,看是否有錯(cuò)誤,有錯(cuò)誤及時(shí)修改烟号,保證能運(yùn)行成功绊谭。有錯(cuò)誤存在會(huì)驗(yàn)證不通過。(若無(wú)demo工程可忽略此步驟)

注意:每次更改私有代碼庫(kù)工程中的相關(guān)信息后汪拥,都需要更新編譯demo工程达传,保證無(wú)誤。

九迫筑、通過Pod命令驗(yàn)證本地.podspec文件

該驗(yàn)證過程不會(huì)訪問網(wǎng)絡(luò)宪赶,且僅僅是一個(gè)驗(yàn)證不會(huì)添加文件到某文件夾下。

  • 終端下脯燃,運(yùn)行pod驗(yàn)證命令逊朽,如下:
$ pod lib lint 
或者 
$ pod lib lint --allow-warnings  /// --allow-warnings參數(shù):允許忽略警告

 -> JYPrivateLibTest0 (1.0.0)
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description
    - NOTE  | [iOS] xcodebuild:  warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App')

JYPrivateLibTest0 passed validation.

顯示JYPrivateLibTest0 passed validation.表示通過驗(yàn)證。
注意:若驗(yàn)證過程中有錯(cuò)誤曲伊,驗(yàn)證失敗叽讳,修改后再次驗(yàn)證,直到通過驗(yàn)證坟募。

  • 在驗(yàn)證過程中遇到的錯(cuò)誤:
  1. 錯(cuò)誤信息如下:
$ pod lib lint

[!] Unable to find a podspec in the working directory

原因:我所在的目錄不是JYPrivateLibTest0工程目錄下岛蚤,而是Example目錄下,驗(yàn)證時(shí)找不到要驗(yàn)證的.podspec文件懈糯,所以導(dǎo)致錯(cuò)誤涤妒。應(yīng)該cd到JYPrivateLibTest0工程目錄下,然后進(jìn)行命令驗(yàn)證赚哗。

  1. 錯(cuò)誤信息如下:
$ pod lib lint

 -> JYPrivateLibTest0 (1.0.0)
    - WARN  | [iOS] swift: The validator used Swift 3.2 by default because no Swift version was specified. To specify a Swift version during validation, add the `swift_version` attribute in your podspec. Note that usage of the `--swift-version` parameter or a `.swift-version` file is now deprecated.
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description
    - NOTE  | [iOS] xcodebuild:  warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App')
    - NOTE  | xcodebuild:  warning: Swift 3 mode has been deprecated and will be removed in a later version of Xcode. Please migrate "App" to Swift 4.2 using "Convert > To Current Swift Syntax…" in the Edit menu. (in target 'App')
    - NOTE  | xcodebuild:  warning: Swift 3 mode has been deprecated and will be removed in a later version of Xcode. Please migrate "JYPrivateLibTest0" to Swift 4.2 using "Convert > To Current Swift Syntax…" in the Edit menu. (in target 'JYPrivateLibTest0')

[!] JYPrivateLibTest0 did not pass validation, due to 1 warning (but you can use `--allow-warnings` to ignore it).
You can use the `--no-clean` option to inspect any issue.

仔細(xì)閱讀這條警告(WARN)她紫,大致意思是:你沒有指定使用的swift版本,驗(yàn)證器默認(rèn)使用的是swift 3.2屿储,可能會(huì)出現(xiàn)問題贿讹,希望你在驗(yàn)證期間指定Swift版本,請(qǐng)?jiān)趐odspec中添加“swift_version”屬性够掠。注意“--swift-version”參數(shù)或創(chuàng)建.swift-version隱藏文件的用法現(xiàn)在被棄用民褂。
解決方案:在.podspec文件中添加s. swift_version = '4.0'即可。

  1. 錯(cuò)誤信息如下:
    問題.png
    解決方案:打開Xcode疯潭,找到Preferences -> Locations -> Command Line Tools赊堪,選擇一個(gè)Xcode版本即可,然后再驗(yàn)證竖哩。如下圖:
    解決辦法.png
十哭廉、通過Git命令,提交本地工程到遠(yuǎn)程端的私有代碼庫(kù)相叁,并且添加tag
$ git add .  或者  $ git add -A
$ git status  # 顯示代碼狀態(tài)
$ git commit -m 'Commit the private library for the first time'
$ git remote add origin https://git.asd.net/pod/JYPrivateLibTest0.git
$ git push -u origin master  # 執(zhí)行成功遵绰,結(jié)果如下
Counting objects: 77, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (69/69), done.
Writing objects: 100% (77/77), 28.84 KiB | 3.60 MiB/s, done.
Total 77 (delta 17), reused 0 (delta 0)
To https://git.asd.net/pod/JYPrivateLibTest0.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

/// 添加tag標(biāo)記
$ git tag  # 查看所有版本號(hào)
$ git tag -m 'First release' '1.0.0'   或者   $ git tag 1.0.0   或者   $ git tag -a '1.0.0' -m 'First release'
$ git push --tags   或者   $ git push --tag  # 執(zhí)行成功辽幌,結(jié)果如下
Counting objects: 1, done.
Writing objects: 100% (1/1), 161 bytes | 161.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To https://git.asd.net/pod/JYPrivateLibTest0.git
 * [new tag]         1.0.0 -> 1.0.0

上傳完代碼后,別忘了為這次提交添加tag街立,否則下一步驗(yàn)證會(huì)有問題舶衬,找不到相應(yīng)版本的.podspec文件埠通。
注意:添加的tag版本號(hào)必須和.podspec文件中的s.version = '1.0.0'版本號(hào)一致赎离。

Git教程
版本號(hào)-語(yǔ)義化版本控制規(guī)范

十一、通過Pod命令驗(yàn)證遠(yuǎn)程端私有代碼庫(kù)的.podspec文件

該驗(yàn)證過程檢查的是遠(yuǎn)程端的repo和相關(guān)tag標(biāo)記端辱,需要網(wǎng)絡(luò)梁剔。
終端運(yùn)行命令如下:

$ pod spec lint   或者 $ pod spec lint --allow-warnings 

 -> JYPrivateLibTest0 (1.0.0)
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description
    - NOTE  | [iOS] xcodebuild:  warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App')

Analyzed 1 podspec.

JYPrivateLibTest0.podspec passed validation.

JYPrivateLibTest0.podspec passed validation.:通過驗(yàn)證。

pod spec lint命令舞蔽,是用來(lái)驗(yàn)證.podspec文件及其他信息的規(guī)范荣病。
注意:您的podspec應(yīng)該在沒有任何錯(cuò)誤或警告的情況下通過。若驗(yàn)證過程中有錯(cuò)誤渗柿,驗(yàn)證失敗个盆,修改后再次驗(yàn)證,直到通過驗(yàn)證朵栖。

  • 在驗(yàn)證過程中遇到的錯(cuò)誤:
  1. 錯(cuò)誤信息如下:
$ pod spec lint

 -> JYPrivateLibTest0 (1.0.0)
    - ERROR | [iOS] unknown: Encountered an unknown error ([!] /usr/bin/git clone https://git.asd.net/pod/JYPrivateLibTest0.git /var/folders/qt/d9rd9h7n2m3cb9014qph7xkm0000gn/T/d20190225-68380-po85y6 --template= --single-branch --depth 1 --branch 1.0.0

Cloning into '/var/folders/qt/d9rd9h7n2m3cb9014qph7xkm0000gn/T/d20190225-68380-po85y6'...
warning: Could not find remote branch 1.0.0 to clone.
fatal: Remote branch 1.0.0 not found in upstream origin
) during validation.

Analyzed 1 podspec.

[!] The spec did not pass validation, due to 1 error.

該問題是由于我還沒有把代碼提交到遠(yuǎn)程端的私有代碼庫(kù)颊亮,還有沒有給代碼庫(kù)添加tag,就驗(yàn)證了陨溅,所以在驗(yàn)證的時(shí)候找不到對(duì)應(yīng)版本下的.podspec文件终惑。
解決方案:1)將本地工程提交到遠(yuǎn)程端私有代碼庫(kù);2)給代碼庫(kù)添加tag门扇。

十二雹有、保存.podsepc文件并提交到遠(yuǎn)程端私有索引庫(kù)

將.podspec文件提交到遠(yuǎn)程端私有索引庫(kù),運(yùn)行命令如下:

$ pod repo push JYPrivateRepoTest0 JYPrivateLibTest0.podspec

Validating spec  # 1. 驗(yàn)證規(guī)范
 -> JYPrivateLibTest0 (1.0.0)
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description
    - NOTE  | [iOS] xcodebuild:  warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App')

Updating the `JYPrivateRepoTest0' repo  # 2. 更新repo

Your configuration specifies to merge with the ref 'refs/heads/master'
from the remote, but no such ref was fetched.

Adding the spec to the `JYPrivateRepoTest0' repo  # 3. 添加到本地repo

 - [Add] JYPrivateLibTest0 (1.0.0)

Pushing the `JYPrivateRepoTest0' repo  # 4. 提交到遠(yuǎn)程端的私有索引庫(kù)

pod repo push [REPO] [NAME.podspec]此命令的執(zhí)行經(jīng)歷了四個(gè)步驟:

  • 驗(yàn)證spec文件及其他信息的規(guī)范
  • 更新本地的repo索引庫(kù)
  • 添加工程中的spec文件到本地的私有索引庫(kù)中(會(huì)自動(dòng)創(chuàng)建工程文件夾和版本文件夾)
  • 提交spec文件到遠(yuǎn)程端的私有索引庫(kù)中

至此就完成了私有庫(kù)的創(chuàng)建臼寄。

十三霸奕、檢驗(yàn)1:通過pod search 私有庫(kù)名命令,搜索自己的私有庫(kù)

完成了私有庫(kù)的創(chuàng)建吉拳。那么搜索一下我們的私有庫(kù)吧铅祸,運(yùn)行

$ pod search JYPrivateLibTest0

搜索結(jié)果如下:

-> JYPrivateLibTest0 (1.0.0)
   這是一個(gè)私有測(cè)試庫(kù)!
   pod 'JYPrivateLibTest0', '~> 1.0.0'
   - Homepage: https://git.asd.net/pod/JYPrivateLibTest0
   - Source:   https://git.asd.net/pod/JYPrivateLibTest0.git
   - Versions: 1.0.0 [JYPrivateRepoTest0 repo]
(END)
十四合武、檢驗(yàn)2:新建測(cè)試項(xiàng)目临梗,pod '私有庫(kù)',再次檢查是否可引入稼跳,是否可用盟庞,及注意事項(xiàng)

新建一個(gè)工程,在Podfile文件中pod我們的私有庫(kù)汤善,pod 'JYPrivateLibTest0'
注意:1)引入私有庫(kù)的時(shí)候什猖,除了pod 'JYPrivateLibTest0' 外還需要通過source引入私有庫(kù)對(duì)應(yīng)的索引庫(kù)地址票彪,如:source 'https://git.asd.net/pod/JYPrivateRepoTest0.git' # 自己的私有索引庫(kù)地址
2)若你的私有庫(kù)還依賴了第三方公共庫(kù)或者自己的其他私有庫(kù)不狮,第三方公共庫(kù)或者自己的其他私有庫(kù)對(duì)應(yīng)的索引庫(kù)地址也需要引入降铸。

具體用法如下:

# Uncomment the next line to define a global platform for your project
platform :ios, '8.0'
use_frameworks!

# 引入自己的私有庫(kù)/第三方庫(kù) 對(duì)應(yīng)的索引庫(kù)地址
source 'https://git.asd.net/pod/JYPrivateRepoTest0.git' # 自己的私有索引庫(kù)地址
source 'https://github.com/CocoaPods/Specs.git' # 公共索引庫(kù)地址

target 'test2' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks

  # Pods for test2

  target 'test2Tests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'test2UITests' do
    inherit! :search_paths
    # Pods for testing
  end

pod 'JYPrivateLibTest0'

end

注意:source 后邊是索引庫(kù)(版本庫(kù))的地址,而不是代碼庫(kù)的地址摇零。

若不引入索引庫(kù)地址推掸,在pod install時(shí)會(huì)報(bào)找不到你的私有庫(kù)的錯(cuò)誤,或者其他錯(cuò)誤驻仅。

執(zhí)行 pod install 命令時(shí)谅畅,會(huì)拉取遠(yuǎn)程 Podflie 中 source 標(biāo)記的版本庫(kù)到本地的 repos 文件夾中宋光,然后在 版本庫(kù) 中搜索我們pod ' JYPrivateLibTest0' 的 JYPrivateLibTest0.podspec 文件弧轧。根據(jù) JYPrivateLibTest0.podspec 文件中描述的源碼地址下載并整合到項(xiàng)目中站宗。


中級(jí)

十五臼婆、對(duì)私有庫(kù)的更新和管理
  • 修改已有模塊/添加新模塊枷踏,并更新私有代碼庫(kù)闹获,這里以添加新模塊為例硫惕。
  1. 將新模塊添加到Classes文件夾蛇受,如下圖所示:
    增加新模塊到工程中.png
  2. 修改.podspec配置文件雹顺,升級(jí)版本號(hào)丹墨、添加新模塊文件路徑,其他信息不需要修改无拗。
    修改內(nèi)容如下:

s.version = '1.0.1'  # 升級(jí)版本號(hào)
s.source_files = 'JYPrivateLibTest0/Classes/**/*', 'JYPrivateLibTest0/Classes/Constant/*'  # 指定新模塊地址带到,我的新模塊和已有模塊目錄結(jié)構(gòu)及文件類型一樣,所以可以使用'JYPrivateLibTest0/Classes/**/*'英染,不需要重新指定路徑揽惹。這里只是個(gè)例子,看自己的情況是否需要添加相應(yīng)的文件的路徑四康。
  1. cd 到demo工程目錄下搪搏,運(yùn)行$ pod install命令更新demo工程,然后編譯運(yùn)行demo闪金,看有沒有錯(cuò)誤疯溺,有錯(cuò)誤則修改。

  2. 運(yùn)行$ pod lib lint命令驗(yàn)證本地工程中的.podspec文件哎垦,若有錯(cuò)誤修改后再驗(yàn)證囱嫩,直到?jīng)]有問題。

  3. 上傳本地工程到遠(yuǎn)程端的私有代碼庫(kù)漏设,命令參考上面的第十步墨闲,這里不再累述。

  • 錯(cuò)誤:在設(shè)置tag標(biāo)記的時(shí)候郑口,由于忘記寫“-m”參數(shù)鸳碧,造成如下錯(cuò)誤如下:
$ git tag '添加Constant模塊盾鳞,可根據(jù)路徑單獨(dú)pod' '1.0.1'
fatal: Failed to resolve '1.0.1' as a valid ref.
  1. 運(yùn)行$ pod spec lint命令驗(yàn)證遠(yuǎn)程端私有代碼庫(kù)中的.podspec文件,若有錯(cuò)誤修改后再驗(yàn)證瞻离,直到?jīng)]有問題腾仅。

  2. 將新版本對(duì)應(yīng)的.podspec文件,提交到遠(yuǎn)程端私有索引庫(kù)和本地私有索引庫(kù)的套利。
    至此完成私有庫(kù)新模塊的添加推励,修改私有庫(kù)步驟亦如此。

  3. 檢驗(yàn)1:搜索剛更改的私有庫(kù)日裙,搜索結(jié)果如下:

-> JYPrivateLibTest0 (1.0.1)
   這是一個(gè)私有測(cè)試庫(kù)吹艇!
   pod 'JYPrivateLibTest0', '~> 1.0.1'
   - Homepage: https://git.asd.net/pod/JYPrivateLibTest0
   - Source:   https://git.asd.net/pod/JYPrivateLibTest0.git
   - Versions: 1.0.1, 1.0.0 [JYPrivateRepoTest0 repo]
   - Subspecs:
     - JYPrivateLibTest0/Constant (1.0.1)
(END)
  1. 檢驗(yàn)2:更新實(shí)際項(xiàng)目中的pod惰蜜,并測(cè)試使用昂拂。
十六、其他本地索引庫(kù)管理命令
  1. 刪除本地的一個(gè)私有索引庫(kù)抛猖,命令如下:
$ pod repo remove JYPrivateRepoTest0
  1. 把刪除的索引庫(kù)再加回來(lái)格侯,命令如下:
$ pod repo add JYPrivateRepoTest0 https://git.asd.net/pod/JYPrivateRepoTest0.git
  1. 如果我們要?jiǎng)h除私有Spec Repo下的某一個(gè)podspec怎么操作呢?此時(shí)無(wú)需借助Cocoapods财著,只需要cd到~/.cocoapods/repos/JYPrivateRepoTest0目錄下联四,刪掉庫(kù)目錄,然后再將Git的變動(dòng)push到遠(yuǎn)端倉(cāng)庫(kù)即可撑教。
/// 刪除庫(kù)目錄命令
cd ~/.cocoapods/repos/JYPrivateRepoTest0
rm -rf JYPrivateLibTest0

以上若有不妥請(qǐng)指正朝墩。

Swift/Objective-C-使用Cocoapods創(chuàng)建/管理公共庫(kù)(高級(jí)用法)






參考文章

使用Cocoapods創(chuàng)建/管理公共庫(kù)
iOS,制作屬于自己cocoapods,(framework,bundle)
iOS開發(fā)之Cocoapods的使用與私有pod的制作
Build with CocoaPods

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市伟姐,隨后出現(xiàn)的幾起案子收苏,更是在濱河造成了極大的恐慌,老刑警劉巖愤兵,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹿霸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡秆乳,警方通過查閱死者的電腦和手機(jī)懦鼠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)屹堰,“玉大人肛冶,你說(shuō)我怎么就攤上這事〕都” “怎么了睦袖?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)忧陪。 經(jīng)常有香客問我扣泊,道長(zhǎng)近范,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任延蟹,我火速辦了婚禮评矩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阱飘。我一直安慰自己斥杜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布沥匈。 她就那樣靜靜地躺著蔗喂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪高帖。 梳的紋絲不亂的頭發(fā)上缰儿,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音散址,去河邊找鬼乖阵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛预麸,可吹牛的內(nèi)容都是我干的瞪浸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼吏祸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼对蒲!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起贡翘,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蹈矮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后床估,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體含滴,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年丐巫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谈况。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡递胧,死狀恐怖碑韵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缎脾,我是刑警寧澤祝闻,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站遗菠,受9級(jí)特大地震影響联喘,放射性物質(zhì)發(fā)生泄漏华蜒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一豁遭、第九天 我趴在偏房一處隱蔽的房頂上張望叭喜。 院中可真熱鬧,春花似錦蓖谢、人聲如沸捂蕴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)啥辨。三九已至,卻和暖如春盯腌,著一層夾襖步出監(jiān)牢的瞬間溉知,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工腊嗡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留着倾,地道東北人拾酝。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓燕少,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蒿囤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子客们,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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