iOS 玩轉CocoaPods

####導語:

有時候看到其他人 source開源時候用pod xxx 配置在你的Podfile文件中,執行下pod install 或者 pod update ,代碼瞬間就到你的pod庫, 頓時覺得高大上。那是怎么做到的呢?

Agenda:

  • CocoaPods 的由來
  • Github 使用
  • PodSpec介紹
  • PodSpec上傳
  • 遇到的坑及解決方案

###一,CocoaPods 的由來 Android app目前通過gradle來管理和配置你的source,比如需要用到Eventbus只要在build.gradle中配置下

dependencies {compile 'org.greenrobot:eventbus:3.0.0'
}
復制代碼

iOS必須要有類似的神器啊:CocoaPod就是這把神器. 在CocoaPod沒出來之前iOS要用引用第三庫的做法如下: 比如引用AFNetWorking庫,需要去下載源碼,然后需要配置對應的編譯環境等。當AFNetWorking庫升級,所有過程又來一遍。過程太過復雜啦。 CocoaPods因上面的原因應運而生,它目前是iOS最有名的類庫管理工具了,通過cocoaPods,只需要一行命令就可以完全解決,當然前提是你必須正確設置它。目前絕大部分有名的開源類庫,都支持CocoaPods。所以,作為iOS程序員的我們,掌握CocoaPods的使用是必不可少的基本技能了。

如果你mac上沒有安裝pod , sudo gem install cocoapods 具體怎么安裝可以參考如下鏈接: http://www.jianshu.com/p/9e4e36ba8574

開發iOS應用用到pod 的主要命令如下:

pod help-->查看pod命令的幫助
pod search --> Search for pods(搜索pod)
pod trunk   -->   Interact with the CocoaPods API (e.g. publishing new specs) 上傳source到trunk
pod spec     -->     Manage pod specs//管理pod spec
pod install  -->Install project dependencies according to versions from a  Podfile.lock //安裝項目中的依賴項目
pod update -->Update outdated project dependencies and create new Podfile.lock//跟新依賴項目并且更新Podfile.lock
pod init -->Generate a Podfile for the current directory//創建pod file文件
復制代碼

其中Podfile.lock的扮演的角色非常重要,具體作用可以參考如下鏈接 http://m.blog.csdn.net/muzhenhua/article/details/45174071

####二,Github 使用 為嘛要介紹GitHub呢?CocoaPods只是做為項目的具體管理者,podspec文件就放在cocoapod官網上,供大家搜索。但是實際源碼則是存儲在Github上,那怎么使用Github就非常關鍵啦。

  • 創建項目 登錄你的Github,然后去創建一個新的倉庫,如下圖創建GKFramework參考

  • 上傳項目 下載該倉庫,通過git clone 。clone一個倉庫下來 怎么clone如下圖clone with https.

在終端輸入

//git clone后面的是你對應的git 地址
git clone https://github.com/wongstar/GKFramework.git復制代碼

然后在這個倉庫中修改或者添加你需要對應類或者文件等。

然后通過下面命令

//add 所有的到倉庫
git add *
//提交commit信息
git commit
//提交本地到遠端
git push origin master
復制代碼
  • 打tag tag是后續spec中需要用到,以后升級至需要升級對應tag.
//獲取當前有多少tag
git tag
//創建tag 0.0.1版本
git tag 0.0.1
復制代碼
  • update tag到Github上 上傳tag到Github服務器上,這個比較簡單
 git  push origin 0.0.1
復制代碼
  • 查看tag 如下圖所示 :點擊branch 然后查看Tags欄目

至此源碼已經上傳到Github服務器上去了,但是Pod服務器上目前還沒有對應的描述,下面接著介紹PodSpec,以及如何上傳到cocoapod服務器上去. ####三,PodSpec介紹

在mac 上創建一個podspec,在Terminal終端上輸入下面命令:

//注GKFramework.podspec是你的框架名稱
pod spec create GKFramework.podspec
復制代碼

然后編輯podspec文件。如下GKFramework.podspec

Pod::Spec.new do |s|s.name         = "GKFramework" //定義名稱s.version      = "0.0.5" //tag版本s.summary      = "A Sample.so you can use it" //簡介,以后search到簡介s.description  = <<-DESCthis is gk framework, use it for test your framework. we can use it as framework.DESC
//s.description 定義具體的描述s.homepage     = "https://github.com/wongstar/GKFramework"s.license      = { :type => "MIT", :file => "LICENSE" }//具體licenses.author             = { "wongstar" => "wongstar.iac@gmail.com" }s.platform     = :ios, "8.0"//build的平臺s.ios.deployment_target = "7.0"//最低開發s.source       = { :git => "https://github.com/wongstar/GKFramework.git", :tag => "#{s.version}" }s.source_files  = 'Classes/**/*'#s.public_header_files='GKFramework/Classes/**/*.h'end復制代碼
 s.description  = <<-DESCthis is gk framework, use it for test your framework. we can use it as framework.DESC
s.description定義了描述該pod是用來做什么的。注意這里的寫法復制代碼

s.description格式要求必須是下面的這樣描述 <<-DESC 這里面你定義的描述.必須用這個格式 DESC

  s.source       = { :git => "https://github.com/wongstar/GKFramework.git", :tag => "#{s.version}" }
復制代碼

必須定義s.source,git鏈接必須是你上傳過的source, tag定義為你在github上對source打的tag.

s.source_files  = 'Classes/**/*' 定義為:Classes目錄下的所有文件
復制代碼
s.dependency:依賴庫,不能依賴未發布的庫
eg: s.dependency  = 'AFNetworking'
復制代碼

####四,PodSpec上傳

  • 在 cocoapods 注冊
//email代表你的email,username代表你的用戶名pod trunk register email "username"
復制代碼

執行完上面的命令,你的郵箱會收到一封確認信,點擊確認驗證一下就ok啦。

  • 判斷podspec正確行?
//GKFramework.podspec為你對應的podspec文件
pod  spec lint GKFramework.podspec
復制代碼

如果是正確的spec會出現下面的提示:

  • 上傳到cocoapod服務器
//注:GKFramework.podspec為你對應spec的名稱
pod trunk push GKFramework.podspec
復制代碼

上傳成功如下圖所示:

  • search 你的庫. 網址為:https://cocoapods.org/ 如圖五:search GKFramework
    ####五,遇到的坑及解決方案
  • source file沒找到 [iOS] file patterns: The source_files pattern did not match any file. 確保你的source file是否配置正確,如你的spec目錄和source對應的關系
  • cocoapods環境問題 unknown: Encountered an unknown error (Simulator iPhone 4s is not available.) during validation 執行下面命令
sudo gem install cocoapods --pre
復制代碼

如果執行上面的有問題出現 ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/xcodeproj 執行下面命令

sudo gem install -n /usr/local/bin cocoapods
復制代碼
  • Swift 版本問題 [!] The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a .swift-version file to set the version for your Pod. For example to use Swift 2.3, run:
echo "2.3" > .swift-version.
復制代碼

驗證失敗,會出現一系列錯誤,但也不是無根可尋,其中出現錯誤頻率最多的提示是

  • source files沒找到 ERROR | [iOS] file patterns: The source_files pattern did not match any file.

此錯誤的原因是沒有找到匹配的文件。

解決方案: 手動創建文件,具體操作方法如下 終端輸入: open /Users/icepoint/Library/Caches/CocoaPods/Pods/External/GKFramework/035cb9aa62b9d49f904fad1119b83da4-aebfe 進入相應文件夾,創建文件夾與source_files文件路徑對應 GKFramework/GKFramework/Classes 文件結構如下: GKFramework └── 035cb9aa62b9d49f904fad1119b83da4-aebfe
├── GKFramework │ └── GKFramework │ └──Classes └── LICENSE #開源協議 默認MIT

Classes文件夾存放自己的庫文件

  • pod search GKFramework 搜索不到 Unable to find a pod with name, author, summary, or description matching GKFramework. 解決辦法: 1.pod install --repo-update 2.或者全部刪除:使用命令:rm ~/Library/Caches/CocoaPods/search_index.json 重新search GKFramework

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284993.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284993.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284993.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ArcGIS Pro微課1000例】0015:ArcGIS Pro中屬性字段分式標注案例教程

文章目錄 1. 符號化2. 屬性字段分式標注在ArcGIS及Pro中很容易實現格式化標簽的,本文講解在ArcGIS Pro中實現屬性字段分式標注,結果如下圖所示: 1. 符號化 右鍵數據圖層→符號系統,打開符號系統對話框,住符號系統選擇【唯一值】,字段1選擇NAME。 2. 屬性字段分式標注 加…

mysql主從

1》mysql主從的工作原理&#xff1a;主服務器將更新寫入二進制日志文件&#xff08;bin_log&#xff09;&#xff0c;并維護文件的一個索引以跟蹤日志循環。這些日志可以記錄發送到從服務器的更新。當一個從服務器連接主服務器時&#xff0c;它通知 主服務器從服務器在日志中讀…

C語言試題184之編寫一個函數,從標準輸入讀取一個字符串,把字符串復制到動態內存分配的內存中,并返回該字符串的拷貝,這個函數不應該對讀入字符串的長度作任何限制

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 編寫一…

[轉]Linux面試題(2020最新版)

文章目錄 Linux 概述 什么是LinuxUnix和Linux有什么區別&#xff1f;什么是 Linux 內核&#xff1f;Linux的基本組件是什么&#xff1f;Linux 的體系結構BASH和DOS之間的基本區別是什么&#xff1f;Linux 開機啟動過程&#xff1f;Linux系統缺省的運行級別&#xff1f;Linux 使…

MSBuild 命令的簡單使用

MSBuild 命令的簡單使用獨立觀察員 2022 年 7 月 7 日位置在 VS 安裝目錄下&#xff0c;如&#xff1a;D:Microsoft Visual Studio2022EnterpriseMSBuildCurrentBin命令MSBuild 命令行參考 - MSBuild | Microsoft Docs&#xff08;https://docs.microsoft.com/zh-cn/visualstud…

ArcGIS實驗教程——實驗四十:ArcGIS洪水淹沒分析案例教程

文章目錄 一、洪水淹沒效果動畫演示二、實驗數據三、實驗過程1. 加載數據2. 符號化3. 夸大處理4. 動畫制作5. 動畫播放6. 導出動畫基于數字高程模型 ( DEM )格網模型,實現給定水深情況下洪水淹沒區的計算模型,討論洪水淹沒演進過程可視化實現的關鍵技術,以三維可視化方式,動…

數據庫顯示日期時僅僅顯示“年-月-日”的問題

日期時間實際上存放的是年-月-日 時&#xff1a;分&#xff1a;秒&#xff0c;但是僅僅顯示了年-月-日&#xff0c;未顯示時分秒信息。解決方法&#xff1a;工具-首選項-數據庫》NLS日期格式&#xff1a;YYYY-MM-DD HH24:MI:SS&#xff0c;保存后重新查詢。轉載于:https://blog…

C語言試題185之編寫calloc函數,函數內部使用malloc函數來獲取內存

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 編寫ca…

iOS11、iPhone X 適配簡單,但你的Apple思維適配做好了么?

2017.10.23 iPhone X 的劉海為什么這么丑&#xff1f; 如果喬布斯在的話就一定不會允許這樣的產品交付給用戶么&#xff1f; 作為 iOS 開發人員該對 Apple 有怎樣的認識&#xff1f; Apple 未來的發展的大方向是什么&#xff1f; 倘若沒有 Apple 的存在&#xff0c;我想各位現在…

【ArcGIS遇上Python】ArcGIS Python按照指定字段批量篩選不同類型的圖斑(以土地利用數據為例)

基于土地利用數據,根據用地類型名稱,批量篩選出不同類型的用地,生成不同類型的shp數據,以類型名稱命名。 文章目錄 1. 土地利用原始數據2. 根據名稱批量篩選結果3. ArcGIS Python批處理代碼ArcGIS Python根據字段屬性批量篩選生成shp圖層 1. 土地利用原始數據 2. 根據名稱批…

使用 StringZipper 壓縮、解壓字符串

數據壓縮是一個軟件開發中的常見需求&#xff1a;很多時候需要先將較大的數據進行壓縮然后再通過網絡等進行傳輸。在 .NET 中&#xff0c;有多個壓縮算法供我們選擇&#xff1a;Deflate、GZip 和 Br 。這些壓縮算法都是基于流&#xff08;Stream&#xff09;的&#xff0c;在對…

【轉載】【面試題】你是一個測試工程師,如何保證軟件質量?

2019獨角獸企業重金招聘Python工程師標準>>> *參*答*案&#xff1a;質量是有層次&#xff08;內部質量&#xff0c;外部質量&#xff0c;使用質量&#xff0c;過程質量&#xff09; 內部質量&#xff1a;主要指代碼的質量&#xff0c;就需要引入開發工程師進…

C語言試題186之讀取范圍在1和標準輸入讀取的size之前每個數據出現的次數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 讀取范…

[轉]常見的用戶密碼加密方式以及破解方法

【作者】張輝&#xff0c;就職于攜程技術中心信息安全部&#xff0c;負責安全產品的設計與研發。 作為互聯網公司的信息安全從業人員經常要處理撞庫掃號事件&#xff0c;產生撞庫掃號的根本原因是一些企業發生了信息泄露事件&#xff0c;且這些泄露數據未加密或者加密方式比較弱…

H5學習筆記

什么是 HTML&#xff1f; HTML 是用來描述網頁的一種語言。 HTML 指的是超文本標記語言 (Hyper Text Markup Language)HTML 不是一種編程語言&#xff0c;而是一種標記語言 (markup language)標記語言是一套標記標簽 (markup tag)HTML 使用標記標簽來描述網頁關鍵字&#xff1a…

【ArcGIS遇上Python】ArcGIS Python獲取某個字段的唯一值(獲取指定字段的不同屬性值)

以土地利用數據為例,DLMC字段為每個圖斑的用地類型,怎樣用Python代碼獲取該字段的屬性唯一值? Python代碼實現結果: Python源代碼: import arcpy from arcpy import env arcpy.gp.overwriteOutput=

一張圖解決Android Studio 項目運行按鈕灰色

轉載于:https://juejin.im/post/5a31ee46f265da430406a166

java學習筆記8--接口總結

生活中的接口&#xff1a; 什么是接口? 一個Java接口是一些方法特征的集合&#xff0c;但沒有方法的實現。 在類中實現接口可以使用關鍵字implements&#xff0c;其基本格式如下&#xff1a; [修飾符] class <類名> [extends 父類名] [implements 接口列表]{}修飾符&…

.NET自定義認證雖然簡單,但好用

前言有這樣一種場景&#xff0c;就是新項目已經集成了認證中心&#xff0c;或者是都用了統一的認證方式(比如現在常用的JWT)&#xff0c;這樣對于項目之間的對接就顯得比較方便&#xff0c;至少在認證這塊還是能減少一些工作量的。但當上線的老項目需要對接新項目時&#xff0c…

C語言試題187之實現strspn函數功能

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現st…