CocoaPods【实战篇】

1,342 阅读2分钟

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:cocoapods.org/pods/DPPCod…进入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