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