使自己的開源代碼支持Cocoapods

Cocoapods!

說起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文件

  • 首先從githubclone你的項目文件到本地。(可以使用命令行,也可以使用圖形界面SourseTree,為了方便截圖,我使用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: 描述,寫在<<-DESCDESC之間。

  • 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”,這里一定要對上,否則后面會找不到。

tag 0.0.1

然后就可以推送的gitHub上去了。

推送到gitHub

這里用命令行完成操作也是可以的。

推送到遠程的cocoapods

回到終端,通過 pod trunk push 庫名.podspec --allow-warnings來推送到遠程的cocoapods.
記得第一次推送到cocoapods會讓你填一個郵箱,然后往你郵箱你發一封驗證郵件。由于當時沒截圖。。這里就放上驗證郵件的截圖吧。。

驗證郵件

一切順利的話就能用Pod Search搜索你的庫拉。

Paste_Image.png

咦,小伙伴的電腦搜不到怎么辦。。試著pod repo update一下就ok~

總結


第一次嘗試肯定會遇到橫多問題,其實不用擔心,將錯誤信息在網上搜一下就會出來很多解決方法。有些錯誤寫得很直白,稍微看下也就懂了(像我的路徑沒對上就提示找不到xxx文件)。

這次嘗試也算是實現了一年前的心愿,也算是一種進步吧~

我是翻滾的牛寶寶,歡迎大家評論交流~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容