相信大家對(duì)cocoaPods都很了解,大家也經(jīng)常使用cocoaPods,那么我們經(jīng)常使用的AFN、SDwebImage 等等,他們是怎么公開(kāi)出來(lái)的呢?這樣做有什么好處呢?我們可不可以自己公開(kāi)一個(gè)庫(kù)呢?下面就說(shuō)一下我們建立自己的公開(kāi)和私有庫(kù)。
為什么要使用Cocoapods來(lái)管理第三方庫(kù)呢?
- 傳統(tǒng)使用第三方庫(kù)的劣勢(shì)
1、使用一個(gè)第三方SDK,需要在工程里面添加一堆配置,少添加一步配置就會(huì)報(bào)一大堆錯(cuò)誤。這個(gè)時(shí)候?yàn)榱伺挪樯倭四囊粋€(gè)步驟,只能從頭開(kāi)始重做一遍,太浪費(fèi)時(shí)間和精力。有些配置還不好配置,就更使人煩躁郁悶了。
2、如果使用的第三方SDK有比較重要的更新,想使用最新的SDK只能到官方下載最新的SDK,重新導(dǎo)入到自己的項(xiàng)目工程中。
3、如果公司有多個(gè)項(xiàng)目,每一個(gè)工程都這樣配置一遍,這是多么痛苦的領(lǐng)悟呀。 - 使用Cocoapods管理第三方庫(kù)的優(yōu)勢(shì)
1、我們可以避免上訴的問(wèn)題,使用方便。
2、方便我們自己管理,只需要更新版本就行了,以前的庫(kù)還可以保留讓他人使用。
如何創(chuàng)建自己的共有庫(kù)
1、注冊(cè)Trunk
trunk需要CocoaPods 0.33版本以上,用pod --version
命令查看版本

- 如果版本低,需要升級(jí):
sudo gen install cocoapods
pod setup
- 查看自己是否注冊(cè)過(guò)Trunk
pod trunk me

- 注冊(cè)
// 加上--verbose可以輸出詳細(xì)debug信息,方便出錯(cuò)時(shí)查看。
pod trunk register zhangyqyx@163.com "zhangyqyx" --verbose
"zhangyqyx" 里面代表你的用戶(hù)名,最好起一個(gè)好的名字
zhangyqyx@163.com 代表你的郵箱
注冊(cè)完成之后會(huì)給你的郵箱發(fā)個(gè)郵件,進(jìn)入郵箱郵件里面有個(gè)鏈接,需要點(diǎn)擊確認(rèn)一下
- 注冊(cè)成功后可以再查看一下個(gè)人信息
pod trunk me
查看注冊(cè)信息
2、創(chuàng)建一個(gè)項(xiàng)目
1、github上創(chuàng)建一個(gè)項(xiàng)目

2、將項(xiàng)目克隆下來(lái),并添加公開(kāi)庫(kù)文件

3、創(chuàng)建.podspec
1、cd 到你的項(xiàng)目下
// 注 ZYRunTimeCoT 這個(gè)是你框架的名稱(chēng)
2、pod spec create ZYRunTimeCoT
4、編輯.podspec文件
Pod::Spec.new do |s|
s.name = "ZYRunTimeCoT"
s.version = "0.0.1"
s.ios.deployment_target = '8.0'
s.summary = "簡(jiǎn)介"
s.homepage = "https://github.com/zhangyqyx/ZYRunTimeCoT"
s.social_media_url = 'https://www.baidu.com'
s.license = "MIT"
# s.license = { :type => "MIT", :file => "FILE_LICENSE" }
s.author = { "zyq" => "zhangyqyx@163.com" }
s.source = { :git => 'https://github.com/zhangyqyx/ZYRunTimeCoT.git', :tag => s.version}
s.requires_arc = true
s.source_files = 'runtime/*'
#s.public_header_files = 'runtime/TFRuntimeManager.h'
end
接下來(lái)講解一下每行代碼的含義
s.name:名稱(chēng),pod search 搜索的關(guān)鍵詞,注意這里一定要和.podspec的名稱(chēng)一樣,否則報(bào)錯(cuò)
s.version:版本號(hào)
s.ios.deployment_target:支持的pod最低版本
s.summary: 簡(jiǎn)介
s.homepage:項(xiàng)目主頁(yè)地址
s.social_media_url:社交網(wǎng)址,這里我寫(xiě)的微博默認(rèn)是百度,如果你寫(xiě)的是你自己的博客的話(huà),你的podspec發(fā)布成功后會(huì)@你
s.license:許可證
s.author:作者
s.source:項(xiàng)目的地址
s.requires_arc: 是否支持ARC
s.source_files:需要包含的源文件
s.public_header_files:公開(kāi)的頭文件
//其他
s.resources: 資源文件
s.dependency:依賴(lài)庫(kù),不能依賴(lài)未發(fā)布的庫(kù),可以寫(xiě)多個(gè)依賴(lài)庫(kù)
常見(jiàn)的寫(xiě)法:
1、dependency:寫(xiě)法
s.dependency = 'AFNetworking' , 'SDWebImage'
2、source_files: 寫(xiě)法
'runtime/*'
'runtime/runtime/*.{h,m}'
'runtime/**/*.h'
'*'表示匹配所有文件
'*.{h,m}' 表示匹配所有以.h和.m結(jié)尾的文件
'**' 表示匹配所有子目錄
3、source: 常見(jiàn)寫(xiě)法
s.source = { :git => "https://github.com/zhangyqyx/ZYRunTimeCoT.git", :commit => "68defea" }
s.source = { :git => "https://github.com/zhangyqyx/ZYRunTimeCoT.git", :commit => "68defea", :tag => 1.0.0 }
s.source = { :git => "https://github.com/zhangyqyx/ZYRunTimeCoT.git", :tag => s.version }
- commit => "68defea" 表示將這個(gè)Pod版本與Git倉(cāng)庫(kù)中某個(gè)commit綁定
- tag => 1.0.0 表示將這個(gè)Pod版本與Git倉(cāng)庫(kù)中某個(gè)版本的comit綁定
- tag => s.version 表示將這個(gè)Pod版本與Git倉(cāng)庫(kù)中相同版本的comit綁定
5、如果前面沒(méi)有選擇創(chuàng)建這個(gè)LICENSE文件, 創(chuàng)建LICENSE(許可證/授權(quán))文件,此文件必須要有
創(chuàng)建一個(gè)文件名字命名為L(zhǎng)ICENSE,內(nèi)容為:只需要把前面的版權(quán)改一下就行了,后面的都一樣
Copyright (c) 2013-2015 ZYRunTimeCoT (https://github.com/zhangyqyx/ZYRunTimeCoT)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, 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 IN
THE SOFTWARE.
6、上傳到Git
將包含配置好的 .podspec, LICENSE 的項(xiàng)目提交 Git
7、打tag
//為git打tag, 第一次需要在前面加一個(gè)v
git tag "v0.0.1" // 如果出現(xiàn)錯(cuò)誤,試一下不加v的情況
//將tag推送到遠(yuǎn)程倉(cāng)庫(kù)
git push --tags
如果我們的tag打錯(cuò)了,沒(méi)有用的話(huà),我們應(yīng)該怎么刪除呢?
1、查看tags
git tag 就會(huì)羅列出我們所有的tags
2、刪除本地tags
git tag -d + 分支名稱(chēng)就會(huì)刪除本地的分支
3、刪除遠(yuǎn)程分支
git push origin :refs/tags/分支名稱(chēng) 就刪除了遠(yuǎn)程分支
如圖

8、驗(yàn)證.podspec文件
// --verbose 如果驗(yàn)證失敗會(huì)報(bào)錯(cuò)誤信息
pod spec lint ZYRunTimeCoT.podspec --verbose
如果出現(xiàn)這種警告性的問(wèn)題,我們可以直接忽略

pod lib lint --allow-warnings
出現(xiàn)這種情況就說(shuō)明我們通過(guò)了驗(yàn)證

如果出現(xiàn)這種情況,可能是你的那個(gè)版本找不到這個(gè)文件,

你可以嘗試 s.source 添加一句 :commit => "68defea" 68defea是你的版本號(hào),如圖

9 、發(fā)布
發(fā)布時(shí)會(huì)驗(yàn)證 Pod 的有效性,如果你在手動(dòng)驗(yàn)證 Pod 時(shí)使用了 --use-libraries 或 --allow-warnings 等修飾符,那么發(fā)布的時(shí)候也應(yīng)該使用相同的字段修飾,否則出現(xiàn)相同的報(bào)錯(cuò)。
// --use-libraries --allow-warnings
pod trunk push ZYRunTimeCoT.podspec
出現(xiàn)這種情況就說(shuō)明你發(fā)布成功了,等待人家審核就行了

10、驗(yàn)證倉(cāng)庫(kù)
pod search ZYRunTimeCoT.
你可能會(huì)出現(xiàn)這種情況

解決 ,刪除文件路徑,重新生成
rm ~/Library/Caches/CocoaPods/search_index.json
pod setup
如果還是不行,估計(jì)是在你的項(xiàng)目還在審核中,你可以通過(guò)其他輔助手段去驗(yàn)證;
1、執(zhí)行 pod trunk me 命令,看看有沒(méi)有你的庫(kù)

2、在CocoaPod管理所有第三方庫(kù)(CocoaPod管理的庫(kù))中所搜一下(這個(gè)也有延時(shí),如果搜索到就出現(xiàn)這樣的結(jié)果,展示的是上一個(gè)集成庫(kù)的搜索結(jié)果)

共有庫(kù)的創(chuàng)建這里就結(jié)束了。
創(chuàng)建私有庫(kù)
1、創(chuàng)建一個(gè)私有的項(xiàng)目(可以是公司自己的git管理工具、也可以是碼云上的),創(chuàng)建方法同公共庫(kù)的第二步
2、創(chuàng)建.podspec
方法同公共庫(kù)創(chuàng)建的第三步
3、編輯.podspec文件
方法同公共庫(kù)創(chuàng)建的第四步
4、上傳到Git
方法同公共庫(kù)創(chuàng)建的第六步
5、打tag
方法同公共庫(kù)創(chuàng)建的第七步
6、驗(yàn)證.podspec文件
方法同公共庫(kù)創(chuàng)建的第八步
7、添加一個(gè)私有庫(kù)并和項(xiàng)目地址做綁定
pod repo add ZYRunTimeCoT https://github.com/zhangyqyx/ZYRunTimeCoT.git
8、向私有的庫(kù)里添加podspec文件
pod repo push ZYRunTimeCoT ZYRunTimeCoT.podspec
9、新建一個(gè)項(xiàng)目進(jìn)行驗(yàn)證
xcode新建項(xiàng)目 在podfile中添加
pod 'ZYRunTimeCoT', '~> 0.0.1'
如果提示 'unable to find a specification for'
需要在podfile文件中添加源地址
source 'https://github.com/zhangyqyx/ZYRunTimeCoT.git'
如圖所示

如果對(duì)私有庫(kù)的創(chuàng)建還有問(wèn)題,大家可以看一下這篇文章 :http://www.itdecent.cn/p/0a4fbb94ef9f?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=weixin-friends
大概就這些了,希望大家能提出寶貴的意見(jiàn),可以給我留言,也可以發(fā)郵件到我的郵箱:namezyqyx@163.com
謝謝大家,如果你有更好的想法或文章請(qǐng)告知,不勝感激。
