使用CocoaPods管理iOS庫---制作pod篇

使用CocoaPods管理iOS庫

我 :“ 2017年還有多久?”

我 :“ ‘冬天來了,春天還會遠嗎?’,馬上就要步入18年,您說17年還有多久。您就看著吧,下個月到處都是17年年終總結!”

I'sorry,進入正題

我個人寫本文的目的只有一個:讓你輕松制作自己的pod。可能是因為我 笨?網上的教程,我看的有點??(暈),不過最終還是摸索出來了,并且明白了123,so,請允許我以我“笨”的方式來讓你輕松。

第一步:在GitHub上新建一個倉庫

說明:由于自己創建PPKit時沒有截圖,這里為了說明,新建了PPKit1來截圖說明,諒解!

新建倉庫

第二步:clone項目到本地,并創建PPKit1.podspec文件

終端之創建PPKit1.podspec
具體clone與創建.podspec文件的命令如下:
//2.1(具體路徑,看你自己放置)
cd /Users/peijianbo/Documents/MTTest 
//2.2 
git clone https://github.com/chinesemanbobo/PPKit1.git 
//2.3 (切換到開源庫名相同的目錄)
cd /Users/peijianbo/Documents/MTTest/PPKit1
//2.4 (很重要的第一步,create后面必須是開源庫名,此處是PPKit1)
pod spec create PPKit1

其中最關鍵的是(請自動替換PPKit1為自己的庫名),當然cd對應的文件目錄也不要弄錯:

pod spec create PPKit1

等到終端看到如上圖綠色文字Specification created at PPKit1.podspec,這一步就成功了。

第三步:配置PPKit.podspec,尤其是里面的各種目錄的.source_files文件要注意

注意:此處開始,我們再回到PPKit。(如果你自己的庫,請替換PPKit為你的庫名來閱讀)。

3.1 打開PPKit.podspec文件(推薦用Sublime Text打開),先閱讀里面各種#后面的注釋說明,尤其有必要讀讀開頭的3行注釋

此處,為什么覺得很有必要讀讀開頭的3行注釋,都是自己血與淚的教訓!我自己當時直接忽略這些注釋,一心急著想搞定,結果,折騰很久,后頭再看注釋,才明白好多,然后慢慢修改,才OK的。不過,你也可以不看,說了讓你輕松

下面的是開頭的3行注釋,容我簡單翻譯與介紹下:

//1.
Be sure to run `pod spec lint PPKit.podspec' to ensure this is a valid spec and to remove all comments including this before submitting the spec.
//2.
To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html
//3.
To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/
  1. 在你提交PPKit.podspec文件到CocoaPods前,務必要在命令行運行 pod spec lint PPKit.podspec 來確保.podspec有效,并且刪除所有的注釋,包括這句(Be sure ... submitting the spec.)。
  2. 你可以在http://docs.cocoapods.org/specification.html看到更多關于podspec的屬性的信息。
  3. 你可以在https://github.com/CocoaPods/Specs/上查看當前都有那些有效的、可以用的Pods

上面第3條,你也可以點開看一看,保證你有收獲,如下:

點開后,在This repository里輸入AFNetworking,然后摁Enter鍵搜索,你會看到下圖,先別驚奇(至于我在下圖說的,'本地也有',就不上圖了):

CocoaPods的秘密(原理)

看到這,如果你的項目用到了CocoaPods,有沒有一種“噢...,原來是這樣的”柳暗花明又一村的感覺,如果你有,你NB;如果沒有,沒有就算了,你更要認真看下去!反正我有。嘿嘿!

放大招的時候來了:CocoaPods說白了,就是幫我們管理第三方or自己的庫;而它不過也是一個.xcodeproj工程。只不過,它是專門管理第三方or自己的庫的工程,而它的工作原理就是:你把.podspec文件制作好,然后trunk push (后面后講到)給它,它再把.podspec文件保存為.podspec.json文件放到GitHub,你需要的話,它通過這個.podspec.json把GitHub上對應的開源庫的文件下載下來,放到你的工程里。至此,OK。

說了這么多,再來張圖,證實下,我們繼續講pod庫的制作,圖如下(不信也不行):

解密CocoaPods原理

3.2 修改PPKit.podspec文件,刪除里面所有的注釋,然后再修改。下面給出PPKit.podspec以便參考,注釋我已經加進去了(如果你發布的話,最好把注釋都去掉,此處只是為了說明才保留注釋的),如下:

Pod::Spec.new do |s|

  #開源庫的名字
  s.name         = "PPKit"   
  #開源庫當期版本
  s.version      = "0.0.6"   
  #開源庫概述(打開GitHub能看到的描述)
  s.summary      = "開發中常用的自定義控件、開發經驗、開發bug記錄,常用宏、categories等封裝,不再每個項目都手動配置,用Pod統一管理。"    
  #開源庫描述 (這個描述會被用來生成開源庫的標簽和提高被搜到,必需寫在中間一行,只要在中間一行,不需要考慮縮進)
  s.description  = <<-DESC
                   開發中經常從A項目copy一些代碼(比如常用的宏、category等)到B項目,A更改了一個category,B又要改動;B更改了一個category,A也要改動,不方便同步,就容易出差錯,所以,考慮用Pod來管理。
                   DESC

  #可以是開源庫的GitHub地址,也可以是你自己的網址等
  s.homepage     = "https://github.com/chinesemanbobo/PPKit"
  #我這里是參靠網上的一種寫法,不會報警告,也可以直接 s.license = 'MIT'
  s.license = { :type => 'MIT', :text => <<-LICENSE
         Copyright PPAbner 2016-2017
          LICENSE
      }
  #開源庫作者
  s.author             = { "chinesemanbobo" => "chinesemanbobo@163.com" }
  #開源庫作者的社交鏈接(此處我放的是微博)
  s.social_media_url   = "https://weibo.com/5366568018/profile?rightmod=1&wvr=6&mod=personnumber&is_all=1"

  #開源庫支持的平臺(暫時沒考慮tvOS、OSX等)
  s.platform     = :ios
  #開源庫最低支持
  s.ios.deployment_target = "8.0"

  #VIP 開源庫GitHub的路徑與tag值,GitHub路徑后必須有.git,tag實際就是上面的版本
  s.source       = { :git => "https://github.com/chinesemanbobo/PPKit.git", :tag => s.version }

  #VIP 開源庫資源文件 (我自己總結:每個文件都要有自己的路徑,尤其你想目錄分的比較詳細的話,更具體的說明,看圖對比著再說)
  s.source_files = 'PPKit/PPKit.h','PPKit/PPMacros.h'


  #子目錄PPHelpers(2級),PPKit(1級),ss子目錄可以隨便寫,但下面要對應
  s.subspec 'PPHelpers' do |ss|
    #子目錄PPRuntimeHelper.h和PPRuntimeHelper.m (3級)
    ss.source_files = 'PPKit/PPHelpers/PPRuntimeHelper.{h,m}'
   
    end

  s.subspec 'PPCategories' do |ss|
    ss.subspec 'UI' do |ssui|
        ssui.subspec 'UIScreen' do |ssuiscreen|
              ssuiscreen.source_files = 'PPKit/PPCategories/UI/UIScreen/UIScreen+EasilySize.{h,m}'
             end
       end
    end

  #開源庫頭文件
  s.public_header_files = 'PPKit/PPKit.h' 

  #開源庫依賴庫 
  # s.dependency "JSONKit", "~> 1.4"

  # 是否支持arc
  s.requires_arc = true

end

3.3 .podspec里面的.source_files的簡單介紹(主要是語法)

一個宗旨:庫里面每個文件、資源都要有路徑指向它。

部分語法:

'PPKit/*'  表示匹配所有PPKit目錄下文件,不包含子目錄的
'PPKit/PPHelpers/*.{h,m}'  表示匹配PPHelpers所有以.h和.m結尾的文件
'PPKit/**/*'  表示匹配所有文件(主目錄和子目錄,其中**相當于省略中間層級)

具體的語法示例及截圖,見文章最后面(參考鏈接之前)。

第四步:更新PPKit.podspecGitHub

依次執行下面命令:

$ git add -A && git commit -m "你的更新說明" 
//tag值要和.podspce里的version相同,并且必須設置
$ git tag '0.0.68'   
$ git push --tags  
$ git push origin master 

第五步:驗證PPKit.podspec是否有效

pod spec lint PPKit.podspec

如果驗證不通過,可以執行pod spec lint PPKit.podspec --verbose查看詳細的ERRORWARING提示,根據提示依次解決,然后回到第四步重新來一遍。
注意:在重新開始之前,我們要刪除遠程庫的tag和本地的tag,命令如下:

 $ git tag -d 0.0.68                   //刪除本地tag
 $ git push origin :refs/tags/0.0.68   // 刪除遠程庫tag

直到如下圖的驗證成功

PPKit.podspce驗證成功

第六步:提交PPKit.podspecCocoaPods

pod trunk push PPKit.podspec

如果是第一次提交,需要先執行下面的命令去CocoaPods注冊(填寫郵箱,收取驗證鏈接,點擊鏈接,就OK):

$ pod trunk register 郵箱 '昵稱' --description=' 這里寫描述'

然后再執行:

pod trunk push PPKit.podspec
trunk成功

OLA,到此就結束了,趕緊去pod search一下,看有沒有!

遇到的問題s:

1. pod search PPkit 搜不出

【方案一】cocoapods search 獲取不到最新庫的解決方法
我用的是第二種:執行pod repo update更新本地倉庫,再pod search PPkit,就能 搜到了。
【方案二】執行 pod search PPkit --simple

--simple

【方案三】打開~/Library/Caches/CocoaPods,刪除search_index.json,該文件會在重新搜索時創建。
【方案四】執行 pod search PPkit --repo-update

附:從AFNetworking/PPKit/YYKit看podspec語法。

研究了自己常用的開源庫的文件目錄,其中AFNetworking是最完美的,也是我最想要的,而其它的大多數都是,所有.h和.m文件都放在一個目錄下,比如:IQKeyboardManager。對比如下圖:

AFNetworking與IQKeyboardManager的pod庫目錄對比

參考AFNetworking來說明{}里面的共用以及子目錄的設置。

1. 如下圖中間的線:AFURLRequestSerialization.hAFURLRequestSerialization.m以及AFURLResponseSerialization.hAFURLResponseSerialization.m可以寫為'AFNetworing/AFURL{Request,Response}Serialization.{h,m}'。所以:{}里面的用逗號(,)隔開,相當于數學中的組合.
2. Serialization文件不需要指定路徑,只需要subspec調用了就好,它處于第2級目錄,里面除了上面的4個文件別無其它。但是這4個文件必須指定目錄路徑,如上面1中所示。

AFNetworking的Serialization目錄解釋說明

PPKit配置與截圖說明,如下:記住那個原則:每個文件/路徑都要指定對應的路徑。

利用PPKit..podspec說明.source_files目錄路徑怎么寫

由YYKit學會與理解.exclude_files

.exclude_files,忽略YYKit下的,重新建文件夾(目錄)來管理。

.exclude_files示例

參考鏈接:

  1. Cocoapods: pod search無法搜索到類庫的解決辦法
  2. 給自己的開源庫添加cocopods支持
  3. 讓自己的開源項目支持CocoaPods
  4. Cocoapods完整使用篇
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。