iOS CocoaPods管理框架

一般情况下,CocoaPods是一个负责管理iOS项目中第三方开源库的工具。
CocoaPods使我们几乎可以使用和管理(使用管理)所有开源框架。
CocoaPods的功能肯定不仅限于此:你是否想写个框架,然后提交到远程仓库供别人使用呢?你是否想将项目组件化,更好的管理代码呢?CocoaPods都能很简单的完成。

下面简单描述一下,在配置文件中写入pod 'SDWebImage',然后pod install,怎么就能拥有该框架了,人家做了哪些事情呢?
主要需要完成下图中的几个部分:

CocoaPods.png

实现的主要步骤:
1、在本地写好框架代码;
2、创建远程代码仓库。如果已经有远程代码仓库,则不需操作;
3、git提交到远程代码仓库;
4、git tag管理框架版本;
5、在项目路径创建一个 podspec 索引文件,用于描述当前版本的框架。如果有,则适当修改该文件。这里你可以想一下为什么不直接使用框架的远程仓库地址?
6、创建一个远程索引仓库(与远程代码仓库无任何区别,只是存放的东西不一样)。如果已经有远程索引仓库,则不需操作;
7、将 podspec 索引文件提交到远程索引仓库;
8、本地添加该远程索引仓库,如果已经添加则不需操作;
9、在项目的Podfile中引入索引库:source 索引库地址。如果已经引入则不需操作;
10、在项目的Podfile中写入pod '框架名'。如果已经写入则不需操作;
11、下载框架pod install

大概就这些内容,有些遗漏,特别是他们之间的关系。详情请继续看下去。


以下为实操内容,跟上边步骤会有不少出入,但大体一致。且你会发现步骤变少了且难度也很小。另外关于创建远程仓库,请自行去GitHub或coding创建,这里使用coding,因为coding创建私有库不用钱。

1、创建框架模板。框架模板已经为我们几乎所有准备工作,我们几乎只要在Example工程中写好代码就行了。

// 目标路径
cd /Users/xxx/Desktop/Study
// 创建框架模板
pod lib create LWCommonBasicFramework
框架模板.png

该图标注的地方需要特意留意与观察:
标注2:放置框架代码与资源的地方。这个文件夹加上 podspec 文件就构成由pod管理的本地私有库了。
标注3:框架的podspec索引文件。
标注4:测试框架代码的工程。编写和测试框架的项目。

2、打开 Example 项目,在其中写好LWCommonBasicFramework。当然要在其中编译执行测试通过了。

3、分离LWCommonBasicFramework与Example。先将 LWCommonBasicFramework 的代码复制一份到 框架模板.png 标注4的Classes文件夹中,然后删除 Example 中删除关于LWCommonBasicFramework的代码。

移动代码.png

4、修改框架的索引文件:LWCommonBasicFramework.podspec。

  s.name             = 'LWCommonBasicFramework'
  s.version          = '0.1.0'
  s.summary          = '基础框架.'
  s.description      = <<-DESC
基础框架. LWCommonBasicFramework 包含分类与工具类
                       DESC
  s.homepage         = 'https://coding.net/u/awen2008/p/LWCommonBasicFramework'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'awen' => '992525717@qq.com' }
  # 远程仓库地址
  s.source           = { :git => 'https://git.coding.net/awen2008/LWCommonBasicFramework.git', :tag => s.version.to_s }
  s.ios.deployment_target = '8.0'

  # s.source_files = 'LWCommonBasicFramework/Classes/**/*'

  # 子框架
  s.subspec 'Category' do |c|
  c.source_files = 'LWCommonBasicFramework/Classes/Category/**/*'
  end

  s.subspec 'Util' do |u|
  u.source_files = 'LWCommonBasicFramework/Classes/Util/**/*'
  # 子框架Util 依赖的第三方库
  u.dependency 'AFNetworking'
  end

5、修改 Example 中的 Podfile,然后 pod install。此时框架代码从 Example项目 已经独立出来,该框架的开发已经完成。可以在 Example 中导入框架代码,运行试一下效果了。

pod install.png

6、提交代码到远程仓库。并做好该版本的标签
这里远程仓库必须是空的仓库,也就是没有README.md等文件。不然在提交时会出现本地文件与远程文件的冲突,这个解决起来比较麻烦。

git remote add origin https://git.coding.net/awen2008/LWCommonBasicFramework.git
git add .
git commit -m 'xx'
git push origin master

git tag
git tag -a '0.1.0' -m '提交tag0.1.0'
git push —tags

7、添加索引仓库

// 查看当前本地索引库,只有一个官方索引库master。该索引库包含几乎所有开源的框架,例如AFNetworking、SDWebImage、MJRefresh等
pod repo
// 先创建一个远程仓库LWSpec,作为索引仓库。然后添加到本地
pod repo add LWSpec https://git.coding.net/awen2008/LWSpec.git
// 再次查看当前本地索引库,就有两个了。
pod repo
/*
打印的索引库信息:
LWSpec
- Type: git (unknown)
- URL:  https://git.coding.net/awen2008/LWSpec.git // 远程仓库地址
- Path: /Users/liuwen/.cocoapods/repos/LWSpec // 本地路径

master
- Type: git (master)
- URL:  https://github.com/CocoaPods/Specs.git
- Path: /Users/liuwen/.cocoapods/repos/master
*/

// 移除索引库,不要移除官方索引库(很大)。
pod repo remove LWSpec

8、验证与提交 podspec 文件

// 本地验证,可忽略
pod lib lint
// 远程验证,可忽略
pod spec lint

// 提交框架的索引库
pod repo push XMGSpecs LWCommonBasicFramework.podspec

9、使用框架

  • 查看是否有该库了:pod search LWCommonBasicFramework
  • Podfile文件引入该框架。要引入一个框架其实先要引入该框架索引所在的索引库。Podfile是默认引入官方索引库的,由于该框架的索引文件来自私有索引库,所以得显示引入:
# 官方
source 'https://github.com/CocoaPods/Specs.git'
# LWSpec
source 'https://git.coding.net/awen2008/LWSpec.git'

pod 'LWCommonBasicFramework'
引入整个框架的效果.png

这里之所以有AFNetworking 是因为LWCommonBasicFramework中的子框架依赖AFNetworking。如果只想使用LWCommonBasicFramework的Category可使用:pod 'LWCommonBasicFramework/Category'

引入子框架的效果.png

总结:
到此已经实现了使用CocoaPods来管理框架。并且框架有版本控制,有子框架管理,有框架之间的依赖。
但是还没有说明怎么使用CocoaPods来对项目进行组件化。项目组件化只是一种代码分模块管理的优化,由于没有好的项目所以就不描述了。使用CocoaPods可让你看到一个项目只写了100行以内甚至一行代码。

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

推荐阅读更多精彩内容