CocoaPods【制作篇】

Pod创建

Step 1

使用pod lib create来创建一个完整的pod

$ pod lib create MyLibrary

如果要使用自己的pod-template可以在后面加上--template-url=URL
根据提示选择自定义选项

Step 2 Objc or Swift

第一个问题就是想要构建一个什么语言的pod,对于两个选择,CocoaPods都会将你的库设置为一个框架

What language do you want to use?? [ Swift / ObjC ]

Step 3 是否创建一个Demo

该模板将会为你的库生成Xcode项目

Would you like to include a demo application with your library? [ Yes / No ]

Step 4 选择一个测试框架

作为开源库稳定性很重要。Objctive-C还有两个流行的测试框架:

当你没有办法做选择的时候,官方推荐使用Specta

Which testing frameworks will you use? [ Specta / Kiwi / None ]

两个框架最主要的区别在于:Kiwi是Stubs / Mocks / Expectations的一体化方法,而Specta/Expecta是通过不同Podspces的模块化方法。在MyLib-Tests.pch中包含了测试框架所必要的设置,因此不需要将它包含在每个文件中。

Swift值提供了一个选择Quick/Nimble

Step 5 View-based Testing

基于快照的测试是一种智能方法,可以验证视图上不同操作的结果,使用FBSnapShotTestCase。

Would you like to do view based testing? [ Yes / No ]

Step 6 Prefixs

项目前缀

What is your class prefix?

文件树状图

MyLibrary
├── Example
│   ├── MyLibrary
│   ├── MyLibrary.xcodeproj
│   ├── Podfile
│   ├── Pods
│   └── Tests
├── LICENSE
├── MyLibrary
│   ├── Assets
│   └── Classes
├── MyLibrary.podspec
├── README.md
└── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj

文件:

  • _Pods.xcodeproj - 项目符号链接
  • LICENSE - 默认使用MIT License
  • MyLib.podspec - 项目使用的podspec
  • README.md - markdown文档

文件夹:

  • MyLibrary - 放自己库的类文件
  • Example - 生成的Demo和测试包
-w1400
  1. 编辑Podspec元数据和README
  2. 如果在选择生成Demo的时候没有选择Yes,将不会生成Example
  3. 测试框架
  4. Development Pods部分,也可以在自己的库中直接修改
  5. 用来初始化项目的Pods

新增文件

删除ReplaceMe.m,新增DPPRootObject

image

添加AFNetworking 和 微信第三方依赖

Classes文件夹下创建一个3rdLibraries文件夹,用来放微信第三方资源文件

image

修改.podsepc文件

s.source_files = 'MyLibrary/Classes/*.{h,m}', 'MyLibrary/Classes/3rdLibraries/*.{h}'  
s.vendored_libraries = 'MyLibrary/Classes/3rdLibraries/*.{a}'
s.frameworks = 'SystemConfiguration','CoreGraphics','CoreTelephony','Security','CoreLocation','JavaScriptCore'
s.libraries = 'iconv','sqlite3','stdc++','z'

参数说明:
* vendored_libraries:第三方.a文件
* frameworks:该pod依赖的系统Framework
* libraries:该pod以来的系统Lirary

添加AFNetworking依赖

s.dependency 'AFNetworking', '~> 3.2.1'

重新加载下Pod

$ pod install
image

在viewController中尝试导入头文件,看报不报错

image

制作subspec

-w907

例如AFNetworking中的subspec,也就是说我们在使用AFNetworking的时候不用下载全部的组件,喜欢用哪个就下哪个

Classes文件夹下,创建一个DPPSub文件夹,用来存放子模块文件,创建DPPChild类

-w560

修改.podspec文件,新增如下代码

s.subspec 'DPPSub' do |cs|
  cs.source_files = 'MyLibrary/Classes/DPPSub/*.{h,m}'
end

DPPSub:subspec的名称
cs:变量名称,拥有spec的所有属性

重新加载pod

$ pod install

运行成功,更新podspec版本号,重新打tag,推到仓库

搜索下仓库

$ pod search MyLibrary
-w431

私有库依赖私有库

重新创建一个Pod,步骤与上面操作相同,修改podspec文件,添加

s.dependency 'MyLibrary', '0.2.0'

然后检查

$ pod lib lint
-w916

报错!因为没有指定私有库的source,因为私有库依赖AFNetworking,所以也需要指定下公有库的source

$ pod lib lint --sources=https://github.com/DPP-iOSer/DPPRepos.git,https://github.com/CocoaPods/Specs.git --allow-warnings
-w1115

检查成功,将spec文件push到私有spec仓库中

push时默认会检查spec文件,所以也需要指定source

$ pod repo push DPPRepos DPPDependency.podspec --sources=https://github.com/DPP-iOSer/DPPRepos.git,https://github.com/CocoaPods/Specs.git --allow-warnings

Development Pods

Development Pods和普通的CocoaPods不一样,在这里是符号链接文件,在这里直接修改会直接修改原文件。引用时使用#import <MyLibrary/XYZ.h>的格式

当添加新的或者已存在的Pod/Classes或者Pods/Assets或者更改podspec时,需要重新pod install或者pod update

增加文件

部署自己的库

首先检查podspec lint正确性,可以使用两种方式: pod lib lint 或者 pod spec lint,两者的不同之处:

  • pod lib lint:不需要网络
  • pod spec lint:需要检查外部的repo和关联的tag

如果要发布到trunk不能存在任何CocoaPods的警告,但是Xcode警告是可以存在的

1. 部署到trunk

1. 注册CocoaPods账号

想创建开源的Pod库,就要注册一个CocoaPods账号,我们使用终端注册,emailGithub邮箱

$ pod trunk register lvhan_1215@163.com 'DPP-iOSer'

等到终端出现下面文字,CocoaPods会发一个确认邮箱到你的邮箱上,登入邮箱进行确认


-w847
image
image

注册成功!

2. trunk me

确认后在终端中输入:

$ pod trunk me

看到如下注册信息:


-w857

3. 发布.podspec

.podspec公布到公有的specs上

$ pod trunk push DPPCode.podspec

成功后显示如下:

-w1148

可以通过上面的URL:https://cocoapods.org/pods/DPPCode进入Pods查看自己的仓库信息

image

查询仓库:

$ pod search DPPCode
-w430

2. 部署到自己私有repo

1. 创建版本仓库

-w935

将远程的私有版本仓库添加到本地

$ pod repo add DPPRepo https://github.com/DPP-iOSer/DPPRepo.git

在Finder下查看~/.cocoapods/repos/,会发现多了一个DPPRepo的版本存储仓库

-w770

2. 创建代码库

创建步骤和上述创建版本仓库一样,将仓库clone到本地* 1、创建.podspec,代码仓库的pod描述文件

$ pod spec create DPPCode
-w604
  • 2、按需修改.podspec文件

  • 3、验证仓库配置是否正确

$ pod lib lint

可以添加--allow-warnings允许警告

$ pod lib lint --allow-warnings

验证成功后显示如下:


-w920
  • 4、项目代码推到远程代码仓库 & Tag

  • 5、将描述文件推到版本库

$ pod repo push DPPRepo DPPCode.podspec

验证且推送成功显示如下:

-w910

并且在~/.cocoapods/repos/DPPRepo/文件夹发现新增的仓库描述信息

-w818

添加完成后我们就可以在pod中搜索

$ pod search DPPCode
-w430
  • 6、私有仓库的使用

使用私人pod库的时候,需要在podfile中添加

source "https://github.com/DPP-iOSer/DPPRepo.git"

注意是版本库的地址,而不是代码库的地址
如果还使用了公有库的pod,需要把公有库的仓库加上

source "https://github.com/CocoaPods/Specs.git"

最后Podfile文件如下:

source "https://github.com/CocoaPods/Specs.git"
source "https://github.com/DPP-iOSer/DPPRepo.git"

platform :ios, '8.0'

target 'DPPDemo' do
use_frameworks!

  pod 'DPPCode'
  pod 'AFNetworking', '~> 3.2.1'
  
end
  • 7、pod install

看到代码已经整合到项目中, Done!

-w272
  • 备注

若存在如下情况:

1、

$ pod search DPPCode
[!] Unable to find a pod with name, author, summary, or description matching `DPPCode`

删除 search_index.json文件并且重新pod setup

$ rm ~/Library/Caches/CocoaPods/search_index.json
$ pod setup

参考

CocoaPods公有仓库的创建

CocoaPods 私有仓库的创建(超详细)

Getting setup with Trunk

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

推荐阅读更多精彩内容