cocoapods系列教程---安裝與使用
cocoapods系列教程---Podfile文件
cocoapods系列教程---Podfile.lock文件 和 Spec Repo
cocoapods系列教程---spec文件
cocoapods系列教程---原理篇
cocoapods系列教程---讓自己的開源框架支持cocoapods
cocoapods系列教程---模塊化設(shè)計(jì)
cocoapods系列教程---創(chuàng)建私有pods
參考:http://studentdeng.github.io/blog/2013/09/13/cocoapods-tutorial/
提交代碼到代碼托管平臺
既然是開源,要求代碼任何人都能夠訪問,這里選擇github,當(dāng)然也可以用其他平臺如oschina等,項(xiàng)目必須是公開項(xiàng)目.比如我的這個(gè):https://github.com/iOSSinger/SGExtension.git
創(chuàng)建spec文件
將代碼克隆到本地,如果本地已經(jīng)存在,直接跳過這一步.
-
創(chuàng)建.podspec文件,切換到項(xiàng)目根目錄,創(chuàng)建spec文件:
//切換到項(xiàng)目根目錄 cd SGExtenion //創(chuàng)建spec文件 pod spec create SGExtension
用xcode打開
SGExtension.podspec
,里面有英文注釋,我這里直接給簡單模板,其實(shí)就是去掉了注釋,詳細(xì)的設(shè)置看這里
Pod::Spec.new do |spec|
spec.name = 'SGExtension'
spec.version = '1.0.2'
spec.ios.deployment_target = '8.0'
spec.license = 'MIT'
spec.homepage = 'https://github.com/iOSSinger'
spec.author = { "iOSSinger" => "747616044@qq.com" }
spec.summary = '各種工具的合集'
spec.source = { :git => 'https://github.com/iOSSinger/SGExtension.git', :tag => spec.version }
spec.source_files = "SGExtension/**/{*.h,*.m}"
spec.resources = "SGExtension/source.bundle"
spec.frameworks = 'UIKit'
spec.library = 'z'
spec.requires_arc = true
end
解釋下每行的意思:
spec.name
名字即碗,pod search 搜索的關(guān)鍵詞,注意這里一定要和.podspec的名稱一樣,否則報(bào)錯(cuò)spec.version
版本號spec.ios.deployment_target
支持的ios最低版本spec.license
許可證,一般MIT,這里提醒一下,根目錄下必須要有LICENSE這個(gè)文件,可以直接把我項(xiàng)目中的copy一份,改下作者名字即可.一般github創(chuàng)建倉庫的時(shí)候可以選擇許可為MIT,會(huì)自動(dòng)幫你生成該文件.spec.homepage
項(xiàng)目主頁地址,要求必須能訪問spec.author
作者信息spec.summary
項(xiàng)目簡介spec.source
項(xiàng)目的地址,填上項(xiàng)目的github地址,tag => spec.version
表示git項(xiàng)目的tag值與上面的spec的版本一致,這里是1.0.2
.-
spec.source_files
項(xiàng)目源文件,主要是.h和.m文件,- *表示匹配所有文件
- {.h,.m} 表示匹配所有以.h和.m結(jié)尾的文件
- ** 表示匹配所有子目錄,以及遞歸子目錄
spec.resources
項(xiàng)目所需的資源文件,比如圖片spec.frameworks
項(xiàng)目的依賴框架,比如UIKit,不需要后綴名spec.library
項(xiàng)目依賴的庫文件(這個(gè)是系統(tǒng)的庫文件),不需要后綴名,比如sqlite,libz等.以lib開頭的
需要省略掉lib
這三個(gè)字母.例如:libz
需要簡寫為z
否則報(bào)錯(cuò).spec.requires_arc
是否是arc,一般true
如果你的項(xiàng)目依賴了別的pod項(xiàng)目,可以這樣寫:
spec.dependency = 'AFNetworking'
提交代碼,并打上tag
//提交代碼
git push
//打tag
git tag 1.0.2
//將tag推送到遠(yuǎn)端
git push origin --tags
附上目錄:
驗(yàn)證podspec文件
pod spec lint SGExtemnsion.podspec
這一步如果報(bào)錯(cuò),根據(jù)錯(cuò)誤自行修改,根據(jù)大致意思能看出來個(gè)大概,終端會(huì)給出哪一行出錯(cuò)了.一般就是語法錯(cuò)誤,資源找不到,git地址不對或者不能訪問.指定的文件如{.h,.m}找不到,一般再檢查檢查基本沒問題.
2018.1更新: 有時(shí)候明明代碼沒問題(很確定),但是還是不通過,可以嘗試清理下緩存:
//獲取已經(jīng)緩存的列表
pod cache list
//清除指定的緩存
pod cache clean xxx(緩存的名字,上一步可獲取)
注冊trunk,并提交spec文件cocoapods倉庫
-
注冊chunk,查看是否注冊過
pod trunk me
-
如果沒有注冊,那么注冊:
pod trunk register 747616044@qq.com "iOSSinger"
填上
郵箱
和用戶名
就可以了.注冊完成之后會(huì)給你的郵箱發(fā)個(gè)郵件,進(jìn)入郵箱郵件里面有個(gè)鏈接,需要點(diǎn)擊確認(rèn)一下.然后再查看下是否注冊成功:pod trunk me
-
提交spec文件到 CocoaPods 中心倉庫
pod trunk push SGExtension.podspec
如果前面都沒問題,這一步基本也沒啥問題.不過網(wǎng)速比較慢可能要等很久,這一步建議翻墻,不然有可能真的很慢.
-
然后驗(yàn)證一下,是否可以查到
pod search SGExtension
如果能夠查到,恭喜你 !,如果查不到,往下看
-
解決方案:
- 查看上一步(提交到代碼倉庫)是否成功,再次執(zhí)行提交:
pod trunk push SGExtension.podspec
如果出現(xiàn)如下信息:
[!] Unable to accept duplicate entry for: SGExtension (1.0.2)
那么說明已經(jīng)提交到cocoapods倉庫成功,那么有可能就是本地倉庫沒有更新.更新本地倉庫:
pod repo update
- 再次執(zhí)行
pod search SGExtension
命令,如果還搜索不到,繼續(xù)往下看:
rm ~/Library/Caches/CocoaPods/search_index.json
這句話是移除已經(jīng)生成的搜索目錄緩存文件,移除之后,執(zhí)行
pod search
會(huì)重新生成一份最新的緩存列表,基本到這里就差不多了.-
如果還有問題,那就需要終極大招,但是不推薦用,時(shí)間很長,除非翻墻.
pod repo remove master pod setup
或者
sudo rm -fr ~/.cocoapods/repos/master pod setup
這兩種寫法的意思都是移除本地cocoapods倉庫,重新從官網(wǎng)拉取一遍.可能時(shí)間比較長,所以不建議用,如果網(wǎng)速度快可以考慮使用,也可以翻墻.整個(gè)倉庫打下大約500M+(截止當(dāng)前時(shí)間).
集成到項(xiàng)目中試試
target '項(xiàng)目名' do
pod 'SGExtension'
end
多人共同維護(hù)你的開源項(xiàng)目
如果需要多個(gè)人維護(hù)一個(gè)庫,每個(gè)人都應(yīng)該有權(quán)限push提交spec文件;第一個(gè)push的人可以被認(rèn)為是管理員,可以再添加子管理員,這樣子管理員就有權(quán)限push了
pod trunk add-owner 郵箱地址
移除某個(gè)管理員
pod trunk remove-owner 郵箱地址
* pod lib lint
和 pod spec lint
有什么區(qū)別
- pod lib lint 不需要聯(lián)網(wǎng)
- pod spec lint 會(huì)聯(lián)網(wǎng)檢查sepc repo,并且關(guān)聯(lián)tag
大功告成,喝杯12年的拉菲睡一覺~.