前言
現(xiàn)在大部分的開(kāi)發(fā)者都是用Cocopods來(lái)管理第三方庫(kù)边败,Cocoapods為庫(kù)的管理提供了便利。在項(xiàng)目的發(fā)展當(dāng)中會(huì)出現(xiàn)很多公共組件,如果只是單純拷貝代碼蔬将,維護(hù)起來(lái)會(huì)變得非常麻煩斋扰,因此制作私有庫(kù)將給組件管理帶來(lái)極大遍歷渡八,而Cocoapods也提供了這樣的功能啃洋。
文章分為兩部分,第一部分是私有庫(kù)的制作屎鳍,第二部分介紹開(kāi)源自己的庫(kù)宏娄,將自己的庫(kù)發(fā)布到Cocoapods公共倉(cāng)庫(kù)。
新建倉(cāng)庫(kù)
Cocoapods使用podspec來(lái)管理庫(kù)的信息逮壁,因此需要一個(gè)倉(cāng)庫(kù)來(lái)管理這些podspec文件孵坚。如果要?jiǎng)?chuàng)建私有庫(kù)就需要一個(gè)一個(gè)自己的倉(cāng)庫(kù)來(lái)存儲(chǔ)podspec文件,如果開(kāi)源就可以上傳到Cocoapods公有的倉(cāng)庫(kù)窥淆。因此卖宠,創(chuàng)建私有庫(kù)之前我們先創(chuàng)建私有的spec repo。
創(chuàng)建私有Spec Repo
創(chuàng)建spec的git倉(cāng)庫(kù)
http://192.168.1.100:3000/AndrewShen/MySpecRepo.git
添加創(chuàng)建的
Spec Repo
使用命令行添加倉(cāng)庫(kù)到本地repo,會(huì)自動(dòng)建立git的鏈接
# pod repo add REPO_NAME SOURCE_URL
$ pod repo add MySpecRepo http://192.168.1.100:3000/AndrewShen/MySpecRepo.git
將會(huì)執(zhí)行:
Cloning spec repo `MySpecRepo` from `http://192.168.1.100:3000/AndrewShen/MySpecRepo.git`
執(zhí)行成功后可以執(zhí)行pod repo
查看已有的repo
新建pod
從零開(kāi)始創(chuàng)建pod
- 如果需要從頭開(kāi)始寫(xiě)項(xiàng)目忧饭,開(kāi)發(fā)組件扛伍,那可以通過(guò)
pod lib create
來(lái)創(chuàng)建工程
我們執(zhí)行
```Ruby
#pod lib create LIBNAME
pod lib create podDemo
```
之后會(huì)問(wèn)你四個(gè)問(wèn)題,問(wèn)完后自動(dòng)執(zhí)行`pod install`并生成依賴:
1. 使用什么語(yǔ)言
2. 是否需要一個(gè)例子工程
3. 選擇一個(gè)測(cè)試框架
4. 是否基于View測(cè)試
5. 類的前綴
如果執(zhí)行`pod install`失敗词裤,則刪掉PodFile里的test target就行了刺洒。
- 創(chuàng)建成功后我們可以看到目錄結(jié)構(gòu),我們的pod會(huì)存在于Example項(xiàng)目的Pods的
Development Pods
目錄下吼砂。
```
podDemo
├── Example
│ ├── Podfile
│ ├── Podfile.lock
│ ├── Pods
│ ├── Tests
│ ├── podDemo
│ ├── podDemo.xcodeproj
│ └── podDemo.xcworkspace
├── LICENSE
├── README.md
├── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj
├── podDemo
│ ├── Assets
│ └── Classes
└── podDemo.podspec
```
3.向pod文件夾(此處為podDemo)中加入資源文件(Assets
中)和庫(kù)文件(Classes
中)逆航,
在example文件夾下執(zhí)行
pod update
更新工程pod。成功后Development Pods
目錄下我們的pod文件便會(huì)更新渔肩。只要更新了pod文件夾下內(nèi)容或者更改了podspec文件都需要執(zhí)行pod update
通過(guò)Cocoapods創(chuàng)建的項(xiàng)目會(huì)在本地的git管理下纸泡,我們需要將其添加到遠(yuǎn)程倉(cāng)庫(kù)。
```ruby
git add .
git commit -m "Initial"
git remote add origin http://git.celebi.com/AndrewShen/podDemo.git #添加遠(yuǎn)端倉(cāng)庫(kù)
git push origin master #提交到遠(yuǎn)端倉(cāng)庫(kù)
```
- 由于
podspec
文件pod源需要tag
號(hào)赖瞒,因此我們需要為項(xiàng)目打上tag
.
```ruby
git tag -a 0.0.1 -m "tag release 0.0.1" #打tag
git push --tags #提交tag
```
- 編輯
podspec文件
```Ruby
Pod::Spec.new do |s|
s.name = 'podDemo' #pod名稱
s.version = '0.1.0' #pod版本
s.summary = '測(cè)試pod簡(jiǎn)介.' #簡(jiǎn)介女揭,需要更改,不然會(huì)報(bào)警告
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = <<-DESC #詳細(xì)介紹栏饮,要比簡(jiǎn)介長(zhǎng)
測(cè)試pod的詳細(xì)介紹
DESC
s.homepage = 'http://192.168.1.100:3000/AndrewShen/podDemo' # 項(xiàng)目主頁(yè)
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' } #協(xié)議
s.author = { 'AndrewShen' => 'andrewshen@minture.com' } # 開(kāi)發(fā)者信息
s.source = { :git => 'http://git.celebi.com/AndrewShen/podDemo.git', :tag => s.version.to_s } #倉(cāng)庫(kù)地址
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '7.0' # 最低版本
s.source_files = 'podDemo/Classes/**/*' # 庫(kù)文件
# s.resource_bundles = { #資源目錄
# 'podDemo' => ['podDemo/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
s.frameworks = 'UIKit', 'MapKit' #依賴的framework
# s.dependency 'AFNetworking', '~> 2.3' # 依賴的第三方庫(kù)
```
- 編輯后使用
pod lib lint
驗(yàn)證podspec文件是否可用
吧兔。如果有Error
和Warning
是無(wú)法添加到spec repo
中的。但是Warning
可以存在袍嬉,可以使用選項(xiàng)--allow-warnings
忽略警告境蔼。
```
pod lib lint
```
如果顯示為以下則說(shuō)明創(chuàng)建成功
```Ruby
-> podDemo (0.1.0)
podDemo passed validation.
```
從組件項(xiàng)目中創(chuàng)建pod
如果已經(jīng)有組件項(xiàng)目/Demo則只需要?jiǎng)?chuàng)建podspec文件。
- 執(zhí)行命令創(chuàng)建podspec文件:
pod spec create ADSSegmentedButton https://github.com/Andrewmika/ADSSegmentedButton.git
創(chuàng)建完成后打開(kāi)我們創(chuàng)建的podspec文件伺通,進(jìn)行編輯箍土。
驗(yàn)證文件是否可用
執(zhí)行命令`pod lib lint`
如果顯示為以下則說(shuō)明創(chuàng)建成功
```Ruby
-> ADSSegmentedButton (0.0.1)
ADSSegmentedButton passed validation.
```
pod本地測(cè)試
配置好podspec
文件后可以在本地測(cè)試pod是否可用,然后發(fā)布到服務(wù)器上.
在Podfile
中指定pod
罐监,可以指定路徑或者文件
platform :ios, '7.0'
pod 'PODNAME', :path => '項(xiàng)目路徑' # 指定路徑
pod 'PODNAME', :podspec => 'podspec文件路徑' # 指定podspec文件
由于還未將pod
提交到spec repo
中吴藻,因此pod install
后的庫(kù)文件仍然在Development Pods
目錄下
pod私有庫(kù)發(fā)布
pod
發(fā)布只需要在podspec文件下執(zhí)行一行命令,此命令會(huì)自動(dòng)將文件push到git倉(cāng)庫(kù)中:
#pod repo push REPONAME [NAME.podspec]
pod repo push MySpecRepo podDemo.podspec
如果想要看詳情可以加上選項(xiàng)--verbose
弓柱。一般報(bào)錯(cuò)就是tag
沒(méi)打好沟堡,提取不到tag代碼侧但,無(wú)法驗(yàn)證podspec也就無(wú)法push。
發(fā)布到CocoaPods
注冊(cè)帳號(hào)
#pod trunk register YOUREMAIL 'NAME' --description='DESCRIPTION'
pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'
將用戶名航罗,郵箱換成自己的禀横,給設(shè)備添加描述信息。由于CocoaPods沒(méi)有用戶名密碼粥血,使用的是驗(yàn)證令牌柏锄,所以換一臺(tái)電腦的話還需要執(zhí)行以上命令。
執(zhí)行成功后會(huì)提示以下信息,點(diǎn)擊連接完成注冊(cè)复亏。
[!] Please verify the session by clicking the link in the verification email that has been sent to 『your email』
完成后可以執(zhí)行命令pod trunk me
查看自己賬戶信息趾娃。
發(fā)布pod
發(fā)布到公有庫(kù)也只需要一行命令:
pod trunk push [NAME.podspec]
之后也會(huì)驗(yàn)證podspec,通過(guò)后上傳。提交到公有庫(kù)速度比較慢蜓耻,需要耐心等待。