2018-11-13

iOS开发 - CocoaPods的常见使用方式

https://www.cnblogs.com/hs-funky/p/6759977.html


1 CocoaPods 的安装

1.1 作用:

帮助管理和维护第三方框架,快速的搜索到第三方框架, 然后自动集成到工程里面来, 并编译成一个libPod.a的静态库给我们项目用

1.2 理解:

1.2.1 什么是gem

Gem是一个管理Ruby库和程序的标准包,它通过Ruby Gem(如 http://rubygems.org/ )源来查找、安装、升级和卸载软件包,非常的便捷。

1.2.2 常用命令

$ gem --version (查看gem版本)

$ gem update --system(更新gem)

$ gem sources(查看数据源)

$ gem sources --remove https://rubygems.org/(删除数据源)

$ gem sources -a https://ruby.taobao.org/(添加数据源)

$ gem search 软件包关键字(搜索软件包)

$ gem install 软件包名称(安装软件包)

$ gem install cocoapods --pre(安装上一个版本软件包)

$ gem uninstall 软件包名称(卸载安装包)

注意: 以上命令最好在使用之前, 都添加sudo,代表以管理员身份运行该命令,因为有可能安装软件包的过程当中, 需要创建文件等等, 必须有管理员权限才能操作

1.3 安装:

$ sudo gem install cocoapods

执行完这句如果报告以下错误: 

ERROR: Could not find a valid gem 'cocoapods' (>= 0), here is why: 

Unable to download data from https://rubygems.org/ - Errno::ETIMEDOUT: Operation timed out

connect(2) (https://rubygems.org/latest_specs.4.8.gz)

ERROR: Possible alternatives: cocoapods 

 则需要更新一下ruby的源 

$ gem sources  (查看当前ruby的源)

$ gem sources --remove https://rubygems.org/ (删除数据源)

$ gem sources -a https://ruby.taobao.org/ (添加数据源)

如果gem太老,可以尝试用如下命令升级gem 

$ sudo gem update --system(注解: sudo 是以超级管理员的身份操作)

升级成功后会提示: RubyGems system software updated 

然后重新执行安装下载命令 

$ sudo gem install cocoapods

验证成功:$ pod --version

接下来进行安装,执行: 

$ pod setup

升级到10.11, CocoaPods报错: command not found, 解决方案

$ sudo gem update --system

$ sudo gem uninstall cocoapods

$ sudo gem install -n /usr/local/bin cocoapods

随后如果出现下列错误

[!] An error occurred while performing `Git pull` on repo `master`.

[!] /usr/bin/git pull --ff-only

原因: Cocoapods的分支不支持当前最新的Xcode版本

解决办法: 删除master分支 重新建立新的分支

$ sudo rm -fr ~/.cocoapods/repos/master

$ pod setup


2 CocoaPods 的简单使用

2.1 步骤

1> Xcode新建一个项目,名字Test

2> 终端中,cd到项目总目录(注意:包含Test.xcodeproj的那个目录)

3> 执行命令 $ pod init 建立Podfile配置文件

4> 打开podfile文件,不要选择文本编辑打开方式,选择Xcode打开,编辑文件如下

5> 执行 $ pod install 现在打开项目不是点击 Test.xcodeproj了,而是点击 Test.xcworkspace

2.2 说明

生成的重要文件Podfile.lock 用来记录着上一次下载的框架版本

2.3 pod install 和 pod update 区别

install  如果Podfile.lock文件存在, 直接从此文件中读取框架信息下载安装,如果不存在, 依然会读取Podfile文件内的框架信息

update 不管Podfile.lock是否存在, 都会读取Podfile文件的的框架信息去下载

主要区别在于, Podfile文件内的框架信息, 版本描述没有指定具体版本


上传框架到CocoaPods

3.1 CocoaPods机制图解

 

3.2 上传框架到CocoaPods

1> 创建库工程, 添加源文件到Classes文件夹,文件路径 /test/Classes/Person.h Person.m文件

2> 在远程github上创建仓库用来存放此库工程


3> 创建git并与远程仓库进行关联

$ cd /Users/Funky/Desktop/test

$ git init(创建git)

$ git add .(添加到暂存区)

$ git commit -m 'create Person Class’ (提交文件)

$ git remote add origin https://github.com/funkyHS/testPerson.git (关联远程地址)

$ git push origin master (提交推送到远程)

4> 创建仓库的描述文件test.podspec

$ cd /Users/Funky/Desktop/test

$ pod spec create test(创建spec文件)

生成test.podspec 使用Xcode打开进行编辑

$ git tag (查看tag记录)

$ git tag ‘0.0.1’ (要与test.podspec中的s.version保持一致)

$ git push --tags(提交推送到远程,成功后在远程release处可以看到提交的tag版本)

5>  利用trunk将本地的spec文件上传到pods官方的索引库

$ pod trunk register 1824718008@qq.com 'funky'  --verbose (注册trunk)

成功后登陆上面的邮箱去激活 邮件中的地址

$ pod trunk push test.podspec

6> 测试,使用pod search 命令搜索自己的框架, 如果可以搜索到, 那么代表审核通过了


4  CocoaPods本地私有库的使用

需求说明:testProject工程利用pods管理导入使用本地库文件

4.1 步骤:

$ cd /Users/Funky/Desktop/localLib/test

$ git init

$ git add .

$ git commit -m 'create file’

$ pod spec create test

编辑test.podspec文件

$ cd /Users/Funky/Desktop/testProject

$ pod init(生成Podfile文件)

编辑Podfile文件

$ pod install (会验证test.podspec 填写信息是否正确)

成功后打开testProject.xcworkspace项目,库文件在Pods/Development Pods中


创建pods库的模版库

(组件化快速生成测试工程常用)

工程文件目录结构:/Users/Funky/Desktop/MyTestProject/testProject/Classes/Categories/(.h .m)

需求:在MyTestProject文件夹下,快速创建关于Categories/(.h .m)的测试工程

5.1 步骤:

1> $ cd /Users/Funky/Desktop/MyTestProject

2> $ pod lib create testProjectQuick

3> 用测试的库文件替换ReplaceMe.m文件

---------------------------------------------

4> $ cd /Users/Funky/Desktop/MyTestProject/testProjectQuick/Example

$ pod install


6 CocoaPods远程私有库的使用

6.1 机制图解

 

6.2 具体操作步骤

1> 查看本地索引库

$ pod repo

master

- Type: git (master)

- URL:  https://github.com/CocoaPods/Specs.git

- Path: /Users/Funky/.cocoapods/repos/master

2> 在代码托管平台上添加公钥

$ ssh-keygen(生成公钥)

Enter file in which to save the key (/Users/Funky/.ssh/id_rsa): (直接回车)

Enter passphrase (empty for no passphrase): (直接回车)

Enter same passphrase again: (直接回车)

生成的公钥所在路径 ~/.ssh/id_rsa.pub (用Xcode打开并复制)

在coding上添加公钥

3> 添加本地私有的索引库

$ pod repo add TestProjectBase git@git.coding.net:funkyHS/TestProjectSpecs.git

此时在~/.cocoapods/repos 路径下 可以看到TestProjectBase文件夹

4> 查看 $ pod repo

master

- Type: git (master)

- URL:  https://github.com/CocoaPods/Specs.git

- Path: /Users/Funky/.cocoapods/repos/master

TestProjectBase

- Type: git (master)

- URL:  git@git.coding.net:funkyHS/TestProjectSpecs.git

- Path: /Users/Funky/.cocoapods/repos/TestProjectBase

5> 然后在代码托管平台上(coding)创建一个TestProjectBase项目,用来存放基础组件的远程代码仓库

$ cd /Users/Funky/Desktop/远程私有库/testProjectQuick (进入到基础组件的模版工程)

$ git status

$ git add .

$ git commit -m ‘模版测试工程'

6> 接着 修改编辑testProjectQuick 模版例子工程的testProjectQuick.podspec文件

$ pod lib lint (验证当前文件夹下的testProjectQuick.podspec文件编辑是否正确)

$ pod spec lint (验证远程的是否正确,此时会报tag ERROR)

$ git status

$ git add .

$ git commit -m '编辑spec文件'

$ git remote add origin https://git.coding.net/funkyHS/TestProjectBase.git (将本地库与远程代码仓库进行关联)

$ git push origin master (提交到远程仓库)

$ git tag ‘0.1.0'

$ git push --tags (将标签提交到远程)

$ pod spec lint (再次验证)

testProjectQuick.podspec passed validation.


$ pod repo push TestProjectBase testProjectQuick.podspec (将podspec文件提交到本地的私有索引库TestProjectBase中: 地址 ~/.cocoapods/repos/TestProjectBase)

注意:提交后,依然会验证 podspec文件,验证通过后 会自动上传到在coding上的远程spec索引库

$ pod search testProjectQuick

-> testProjectQuick (0.1.0)

   testProjectQuick简介

   pod 'testProjectQuick', '~> 0.1.0'

   - Homepage: https://coding.net/u/funkyHS/p/TestProjectBase

   - Source:   https://git.coding.net/funkyHS/TestProjectBase.git

   - Versions: 0.1.0 [TestProjectBase repo]

此时在进入主工程中修改podfile文件

$ cd /Users/Funky/Desktop/远程私有库/MyMainProject 

$ pod install

大功告成,打开MyMainProject.xcworkspace,此时在pod中可以找到远程私有库的代码!是不是很开心,很兴奋!


如果对于如何创建远程私有库还有不明白的地方,去看我的下一篇详细介绍的文章《iOS开发 - CocoaPods远程私有库从0到1

这篇文章对你有所帮助的话,请在我的评论区坐一坐吧!

有不理解或者发现博主存在理解操作不正确的地方,欢迎评论,我会及时修正,以免误人子弟!

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

推荐阅读更多精彩内容