需求
由于公司項目需要姆怪,想把目前項目中,每個模塊作為相對獨立的組件澡绩,已達(dá)到合理分工的目的稽揭,同時,利用cocoapods實現(xiàn)組件化開發(fā)英古,可以很好的達(dá)到版本控制淀衣,提高編譯效率。
1)首先對現(xiàn)有模塊進(jìn)行拆分召调,分為:業(yè)務(wù)組件膨桥、基礎(chǔ)依賴組件、自定義UI組件唠叛、支付組件只嚣、啟動服務(wù)組件、登錄首頁組件等艺沼。
2)其次需要搭建私有的Spec庫册舞,用來管理每個組件的podspec文件。拆分的模塊作為私有Pod上傳至私有Spec倉庫障般、提交私有Pod和更新私有Pod.
具體操作流程如下
創(chuàng)建一個新的組件庫流程如下:
具體操作流程截圖啦
我現(xiàn)在想創(chuàng)建一個Launch組件庫调鲸,它的功能描述是:這個組件庫里面的功能主要是用于項目的啟動服務(wù)。
比如:第三方組件服務(wù)的注冊挽荡、推送服務(wù)的注冊藐石、bugly服務(wù)注冊、token失效回調(diào)注冊定拟、版本檢測升級于微、鍵盤啟動服務(wù)。
第一步 執(zhí)行pod lib create apple-app-launch 命令(這個名字自己起青自,能夠說明組件目的即可)
此時完成到這里面就已經(jīng)創(chuàng)建好一個組件庫了株依。
第二步
通過github,gitlab 或者其他代碼管理工具上建立空的cocoapods 的索引庫(索引庫就是普通的代碼倉庫)
已建立好的地址如下:
管理組件代碼的庫
https://code.sqbj.info/apple-ios/apple-app-launch.git
代碼管理倉庫 管理spec文件的私有倉庫
https://code.sqbj.info/apple-ios/apple-cocoapods-spec.git
私有 Spec 倉庫和 CocoaPods 官方結(jié)構(gòu)一致,用于存放各個開源庫的 spec 文件延窜。安裝 CocoaPods 是會將官方庫 clone 至本地恋腕,當(dāng)執(zhí)行 pod update 時更新此本地倉庫。
私有 Spec 倉庫需要在 git 托管平臺托管逆瑞,現(xiàn)有的免費(fèi)私有倉庫有 Coding吗坚、CSDN 以及自己搭建 Gitlab祈远,我用的是公司自己搭建的Gitlab為例。
第三步
打開剛剛創(chuàng)建好的項目商源。目錄接口如下
下面我們來修改一下.podspec文件
保存之后车份,我們的準(zhǔn)備工作就基本上完事了,下面要做的就是
1牡彻、驗證pod庫是否可用 pod lib lint
2扫沼、驗證遠(yuǎn)程庫 pod spec lint
2、添加遠(yuǎn)端倉庫和提交到遠(yuǎn)端的操作了庄吼。具體操作如下:
接下來講解一下每行代碼的含義
s.name:名稱缎除,pod search 搜索的關(guān)鍵詞,注意這里一定要和.podspec的名稱一樣,否則報錯
s.version:版本號
s.ios.deployment_target:支持的pod最低版本
s.summary: 簡介
s.homepage:項目主頁地址
s.license:許可證
s.author:作者
s.social_media_url:社交網(wǎng)址,這里我寫的微博默認(rèn)是Twitter,如果你寫Twitter的話,你的podspec發(fā)布成功后會@你
s.source:項目的地址
s.source_files:需要包含的源文件
s.resources: 資源文件
s.requires_arc: 是否支持ARC
s.dependency:依賴庫,不能依賴未發(fā)布的庫
s.dependency:依賴庫总寻,如有多個可以這樣寫
例如
s.dependency = 'AFNetworking'
> s.license= { :type => "MIT", :file => "LICENSE" }
> 這里建議大家這樣寫,如果寫別的會報警告,導(dǎo)致后面一直提交失敗.
* source_files:寫法及含義建議
大家寫第一種或者第二種
"YJSettingTableView/*"
"YJSettingTableView/YJSettingTableView/*.{h,m}"
"YJSettingTableView/**/*.h"
* “*” 表示匹配所有文件
* “*.{h,m}” 表示匹配所有以.h和.m結(jié)尾的文件
* “**” 表示匹配所有子目錄
* **s.source 常見寫法**
s.source = { :git => "https://github.com/coderYJ/YJSettingTableView.git", :commit => "68defea" }
s.source = { :git => "https://github.com/coderYJ/YJSettingTableView.git", :tag => 1.0.0 }
s.source = { :git => "https://github.com/coderYJ/YJSettingTableView.git", :tag => s.version }
* commit => "68defea" 表示將這個Pod版本與Git倉庫中某個commit綁定
* tag => 1.0.0 表示將這個Pod版本與Git倉庫中某個版本的comit綁定
* tag => s.version 表示將這個Pod版本與Git倉庫中相同版本的comit綁定
##### ③.創(chuàng)建LICENSE(許可證/授權(quán))文件,此文件必須要有
創(chuàng)建一個文件名字命名為LICENSE,內(nèi)容為:只需要把前面的版權(quán)改一下就行了,后面的都一樣
> Copyright (c) 2011-2016 YJSettingTableView Software Foundation (https://github.com/coderYJ/YJSettingTableView/)Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies of the Software, and to permit persons to whom the Software isfurnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included inall copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THEAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHERLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS INTHE SOFTWARE.
##### ④.上傳到Git
將包含配置好的 .podspec, LICENSE 的項目提交 Git
##### ⑤.打tag
> 因為cocoapods是依賴tag版本的,所以必須打tag,以后再次更新只需要把你的項目打一個tag然后修改.podspec文件中的版本接著提交到cocoapods官方就可以了,提交命令請看下面
執(zhí)行命令//
```為git打tag, 第一次需要在前面加一個vgit tag "v1.0.0"
//將tag推送到遠(yuǎn)程倉庫
git push --tags```
7.驗證.podspec文件
* 到此檢查一下你工程下面的文件, 你的項目, .podspec文件, LICENSE文件
* 驗證會先測試本地 .podspec 文件是否存在語法錯誤.文件目錄
然后執(zhí)行命令
// --verbose 如果驗證失敗會報錯誤信息
pod spec lint UIButton-Vertical.podspec --verbose
驗證過程中:
-> UIButton-Vertical
驗證成功后:UIButton-Vertical.podspec passed validation.
如圖
驗證失敗:[!] The spec did not pass validation, due to 1 error.
這個過程會出現(xiàn)很多錯誤,這里不一一列舉,大家按照錯誤信息自行修改,不過一般不會出現(xiàn)錯誤,只要你按照軍哥說的做,基本上是沒有問題的,因為軍哥走過的坑已經(jīng)告訴你們了
#### 4.本地測試podspec文件
我們可以創(chuàng)建一個新的項目器罐,在這個項目的Podfile文件中直接指定剛才創(chuàng)建編輯好的podspec文件,看是否可用渐行。 在Podfile中我們可以這樣編輯轰坊,有兩種方式
platform :ios, '7.0'
pod 'UIButton-Vertical', :path => '~/code/Cocoapods/podTest/UIButton-Vertical' #指定路徑
pod 'UIButton-Vertical', :podspec => '~/Desktop/lizhi0123Github/UIButton-Vertical/UIButton-Vertical.podspec' #指定podspec文件
然后執(zhí)行pod install命令安裝依賴,打開項目工程祟印,可以看到庫文件都被加載到Pods子項目中了肴沫,不過它們并沒有在Pods目錄下,而是跟測試項目一樣存在于Development Pods/PodTestLibrary中蕴忆,這是因為我們是在本地測試颤芬,而沒有把podspec文件添加到Spec Repo中的緣故。
在項目中編寫代碼套鹅,測試庫文件無誤后就可以開始下一步了站蝠,提交podspec到Spec Repo中。
#### 5.向Spec Repo提交podspec
向Spec Repo提交podspec需要完成兩點一個是podspec必須通過驗證無誤卓鹿,在一個就是刪掉無用的注釋(這個不是必須的菱魔,為了規(guī)范還是刪掉吧)。 向我們的私有Spec Repo提交podspec只需要一個命令
$ pod repo push Specs-Repo UIButton-Vertical.podspec #前面是本地Repo名字 后面是podspec名字
完成之后這個組件庫就添加到我們的私有Spec Repo中了减牺,可以進(jìn)入到~/.cocoapods/repos/Specs-Repo目錄下查看
> ├── LICENSE
> ├── UIButton-Vertical
> │ └── 0.1.0
> │ └── UIButton-Vertical.podspec
> └── README.md
再去看我們的Spec Repo遠(yuǎn)端倉庫豌习,也有了一次提交存谎,這個podspec也已經(jīng)被Push上去了拔疚。
至此,我們的這個組件庫就已經(jīng)制作添加完成了既荚,使用pod search命令就可以查到我們自己的庫了
$ pod search UIButton-Vertical
-> UIButton-Vertical (0.1.0)
Just Testing.
pod
'UIButton-Vertical'
,
'~> 0.1.0'
- Homepage: https:
//coding.net/u/wtlucky/p/podTestLibrary
- Source: https:
//coding.net/wtlucky/podTestLibrary.git
- Versions: 0.1.0 [WTSpecs repo]
這里說的是添加到私有的Repo稚失,如果要添加到Cocoapods的官方庫了,可以使用trunk工具恰聘,具體可以查看[官方文檔](http://guides.cocoapods.org/making/getting-setup-with-trunk.html)句各。
#### 6. 使用制作好的Pod
在完成這一系列步驟之后吸占,我們就可以在正式項目中使用這個私有的Pod了只需要在項目的Podfile里增加以下一行代碼即可
每次提交組件庫的podspec文件具體操作流程
Pod 提交
打tag
git tag
git tag -m "獲取用戶的租戶的應(yīng)用是否存在(pass)" 0.2.20
git push origin --tags
172-11-0-189:smart-app-fmp hnbl008$
cd .. 退到上一個目錄
##把庫文件smart-app-fmp.podspec添加到 Specs-Repo 私有庫中 這個過程非常久,也非常重要哦
pod repo push scbu smart-app-fmp.podspec --allow-warnings --verbose --use-libraries
第四步
使用組件庫
1.新建一個項目凿宾,在podfire文件中指定資源地址:
https://code.sqbj.info/apple-ios/apple-cocoapods-spec.git
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
source 'https://code.sqbj.info/apple-ios/apple-cocoapods-spec.git'
target 'apple-app-shell'do
pod 'apple-app-launch'
end
必須寫source要不然search的時候找不到cocoapods里的庫
然后執(zhí)行pod update
矾屯,更新庫依賴,然后打開項目可以看到初厚,我們自己的庫文件已經(jīng)出現(xiàn)在Pods子項目中的Pods子目錄下了件蚕。
pod update 更新所有的庫,然后再執(zhí)行 pod search 時 就會顯示 你自己建的庫产禾。
更新 Pod
如果在開發(fā)過程中發(fā)現(xiàn)某基礎(chǔ)組件存在 bug 需要更新 Pod排作,具體操作步驟如下:
1、修改 podspec 文件中的 s.version;
2亚情、修復(fù) bug 并對項目打 tag妄痪,tag 名稱和 s.version 一直并 push 到遠(yuǎn)程倉庫。
3楞件、驗證 podspec 文件的有效性衫生;
4、推送 podspec 文件到遠(yuǎn)程倉庫履因;
5障簿、執(zhí)行 pod search apple-app-launch 驗證結(jié)果;