說起Cocoapods,讓我想起了在大學時手動拖第三方代碼包的灰色經歷。。。當時想玩玩百度地圖和高德地圖的api,各種link系統包,修改Build Settings
里的參數,最后運行不起來還一行一行和官方文檔里對。。特別是百度和高德地圖都拖進一個項目中時各種問題真的淚崩。。自從使用了Cocoapods,PodFile
里一行代碼就解決了這些煩惱。
不過這里我并不想講怎么裝Cocoapods和怎么使用,因為對于iOS App的開發,幾乎都采用了Cocoapods吧,而且網上教材很多,查找也很方便。這里我只想講一下怎么在Cocoapods發布自己的代碼
。(其實在第一次使用Cocoapods我就有強烈的愿望這么做,一直拖到現在。。)
使開源庫支持pod
我們先看一下Pod版本號:
pod --version
1.0.1
這里主要介紹下流程。其實使自己的開源庫支持Pod的過程并不復雜,主要是在自己的git庫里創建一個.Podspec
文件,里面配置一些參數,然后推送到遠程的cocoapods
,這樣其他人就能用你的開源庫拉。一般都使用gitHub
作為自己的git庫,我也不例外,這里我選用我寫的第三方庫NMAutoHeightTableCell
來測試。地址
創建.Podspec文件
- 首先從
github
上clone
你的項目文件到本地。(可以使用命令行,也可以使用圖形界面SourseTree,為了方便截圖,我使用SourseTree)
- cd 到你的項目目錄下用
pod spec create NMAutoHeightTableCell
命令創建.Podspec
文件。
$ cd /Users/nuomi/NMKit/NMAutoHeightTableCell/lib
$ pod spec create NMAutoHeightTableCell
Specification created at NMAutoHeightTableCell.podspec
于是我們的項目文件下就生成了NMAutoHeightTableCell.podspec
文件。用文本編輯器或者vi開這個文件,去掉注釋,大概就剩下這么幾個部分。
Pod::Spec.new do |s|
s.name = "NMAutoHeightTableCell"
s.version = "0.0.1"
s.summary = "A short description of NMAutoHeightTableCell."
s.description = <<-DESC
DESC
s.homepage = "http://EXAMPLE/NMAutoHeightTableCell"
s.license = "MIT"
s.author = { "nuomi" => "xsz88287703@126.com" }
s.platform = :ios, "7.0"
s.source = { :git => "http://EXAMPLE/NMAutoHeightTableCell.git", :tag => "#{s.version}" }
s.source_files = "Classes", "Classes/**/*.{h,m}"
s.exclude_files = "Classes/Exclude"
s.requires_arc = true
s.dependency "Masonry", "~> 0.6"
end
s.name: 庫名稱,我這里是
NMAutoHeightTableCell
。s.version: 版本號。
s.summary: 摘要,簡要說明你的開源庫。
s.description: 描述,寫在
<<-DESC
和DESC
之間。s.homepage: 項目主頁。
s.license: 許可證,不懂就填
MIT
,具體可以網上查下MIT license
。s.author: 作者。
s.platform: 支持語言和SDK包限制,我這里是支持IOS7以上
s.source: git地址和
tag
,什么是tag后面會講。s.source_files: 包含的文件。這里有必要說明下,怎么找自己的要公開的路徑。我的項目路徑為
https://github.com/NBaby/NMKit/tree/master/NMAutoHeightTableCell/lib
,前面s.source
填寫的是https://github.com/NBaby/NMKit.git
,可見已經到NMKit
這個文件夾了,所以s.source_files
只要填NMAutoHeightTableCell/lib
就能到Lib下了。后面因為只要.h
,.m
文件,所以s.source_files
完整的形式為:"NMAutoHeightTableCell/lib", "*.{h,m}"
主要的就是上面這些還有些其他的注意事項可以參考網上的解決方案:
如果我們的開源庫依賴系統庫怎么辦?
# s.framework = 'SomeFramework'// 去掉#,設置依賴的系統庫名稱
# s.frameworks = 'SomeFramework', 'AnotherFramework'//設置多個系統庫名稱
# s.library = 'iconv'// 設置只依賴一個系統的library
# s.libraries = 'iconv', 'xml2' // 設置依賴多個系統的library
# s.xcconfig = { 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2' }// 這里是工程配置,這樣使用者就不需要手動處理,由pod自動處理了。
如果我們的開源庫依賴系統庫怎么辦?
s.dependency 'JSONKit', '~> 1.4'//設置我們的開源庫依賴哪些第三方庫和依賴的版本號。
我的例子:
Pod::Spec.new do |s|
s.name = "NMAutoHeightTableCell"
s.version = "0.0.1"
s.summary = "一個可以使用Autolayout實現自動計算Cell高度的擴展庫"
s.description = <<-DESC
一個可以使用Autolayout實現自動計算Cell高度的擴展庫
DESC
s.homepage = "https://github.com/NBaby/NMKit/tree/master/NMAutoHeightTableCell"
s.license = "MIT"
s.author = { "nuomi" => "xsz88287703@126.com" }
# s.platform = :ios
s.platform = :ios, "7.0"
s.source = { :git => "https://github.com/NBaby/NMKit.git", :tag => "0.0.1" }
s.source_files = "NMAutoHeightTableCell/lib", "*.{h,m}"
s.requires_arc = true
end
好了,如果這里都填好了,可以先測一下本地的.Podspec
文件是否填對。
檢驗.Podspec文件
cd 到本地開源庫項目的.Podspec文件
目錄下,使用pod lib lint
命令來嘗試編譯,如果要忽略警告,可以在后面添上--allow-warnings
,如果成功會顯示passed validation
如果有錯也沒事,根據錯誤提示慢慢改.Podspec
文件,好了再編譯,直到成功為止。
上傳本地文件到gitHub
還記得我們.Podspec文件
文件里用了:tag => "0.0.1"
這句話么,這里就要用到了。首先用SourceTree
切出一個分支,名字命名為“0.0.1”,這里一定要對上,否則后面會找不到。
然后就可以推送的gitHub上去了。
這里用命令行完成操作也是可以的。
推送到遠程的cocoapods
回到終端,通過 pod trunk push 庫名.podspec --allow-warnings
來推送到遠程的cocoapods.
記得第一次推送到cocoapods會讓你填一個郵箱,然后往你郵箱你發一封驗證郵件。由于當時沒截圖。。這里就放上驗證郵件的截圖吧。。
一切順利的話就能用Pod Search
搜索你的庫拉。
咦,小伙伴的電腦搜不到怎么辦。。試著pod repo update
一下就ok~
總結
第一次嘗試肯定會遇到橫多問題,其實不用擔心,將錯誤信息在網上搜一下就會出來很多解決方法。有些錯誤寫得很直白,稍微看下也就懂了(像我的路徑沒對上就提示找不到xxx文件)。
這次嘗試也算是實現了一年前的心愿,也算是一種進步吧~
我是翻滾的牛寶寶,歡迎大家評論交流~