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参考


    image.png
  • 上传项目
    下载该仓库,通过git clone 。clone一个仓库下来
    怎么clone如下图clone with https.


    image.png

在终端输入

//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栏目


    image.png

至此源码已经上传到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  = <<-DESC
                   this 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" }//具体license
  s.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  = <<-DESC
                   this 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会出现下面的提示:

image.png
  • 上传到cocoapod服务器
//注:GKFramework.podspec为你对应spec的名称
pod trunk push GKFramework.podspec

上传成功如下图所示:


image.png

五,遇到的坑及解决方案

  • 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,373评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,732评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,163评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,700评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,036评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,425评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,737评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,421评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,141评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,398评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,908评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,276评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,907评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,018评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,772评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,448评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,325评论 2 261

推荐阅读更多精彩内容