cocoapods系列教程---讓自己的開源框架支持cocoapods

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

附上目錄:

Paste_Image.png
驗證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 lintpod spec lint 有什么區別
  • pod lib lint 不需要聯網
  • pod spec lint 會聯網檢查sepc repo,并且關聯tag
    大功告成,喝杯12年的拉菲睡一覺~.
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375

推薦閱讀更多精彩內容