前言
官网关于这个知识点已有详细的介绍,但是对我来说:1.知识点比较凌乱 2.英文描述,很多时候不能很好理解其含义。故,参照官网及其他 blog 亲自实践,做个总结。
几个概念
我这里用的版本控制是 GitLab 和 GitHub 类似。
- Podfile:描述了工程中 Taget 的依赖。客户端使用这个文件使用 Pod 库。
- Pod library:具体的库,即通常所说的第三方库。
- Podspec:一个描述文件,描述 Pod library。
- Spec Repo:存放 Podspec 的仓库。 Repository 注意和 library 区别,刚始看官方英语文档时,没能很好区分这两个词,给后面的理解造成了不是困难。
需要的组件
- Podfile(必须)
- Pod library(必须),一堆文件的集合,不一定是 xcode 工程,可以是一个文件,或者文件夹等。一般以 project(github 叫 Repository) 形式放到 GitLab 上,是一个 repo。
- Podspec(必须)
- 这三个文件是必须的 调用关系:Podfile 引用 Podspec, Podspec 引用 Pod library。
- Spec Repo 一般是一个 git 库 只存放 Podspec
现在来实现这些组件。
制作 Pod library 两种方法
- 直接在 GitLab 新建一个 project,添加相关文件即可。
- 用 CocoaPod 提供的命令
pod lib create MyLib1
一般情况下,第三库都需要demo和测试来验证。cocopods 的这条命令帮我们完成了这些繁琐的工作。 并且帮我们制作了对应的 podspec 参考官网
- 测试时,如果是 swift 的库 注意给类和方法根据需要添加 publice 关键字
- 这个命令会 git pod-template 到本地,根据需要删除 git 相关的目录和文件。
- 一般情况要将 Pod library 上传到 自己的 GitLab。
制作 Podspec 三种方法
- 上面的方法2已经产生了podspec
- 用 CocoaPod 提供的命令
pod spec create Mylib1.podspec
参考官网 - 手动创建一个这样的文件
注意:
- soure URL 对应的地址是 pod library的地址。 不是 Spec Repo 的地址
- tag 的版本号要对应。当然也可以不使用 tag
官方推荐的制作方法
官方推荐的方法步骤最多,但标准规范。
- 创建 Spec Repo,一般就是在 GitLab 上新建一个 project,github 叫 Repository。并添加
Mylib1.podspec
等spec文件 - Add your Private Repo to your CocoaPods installation
pod repo add REPO_NAME SOURCE_URL
- Add your Podspec to your repo
pod repo push REPO_NAME SPEC_NAME.podspec
注意:
- SOURCE_URL 是 Spec Repo 的地址
- 如果 spec 文件中使用了tag 确保对应的 Pod library 打了对应的 tag。
- Spec Repo 的目录结构 一定注意是这样的
.
├── Specs
└── [SPEC_NAME]
└── [VERSION]
└── [SPEC_NAME].podspec
这样 私有库就做好了,但是在使用时,请注意添加
source 'URL_TO_REPOSITORY'
- URL_TO_REPOSITORY 是 Spec Repo 的地址
根据文档总结的其他方法
- 官方推荐的制作方法中的步骤2和步骤3可以不实现。只要在Podfile中加入
source 'URL_TO_REPOSITORY'
pod install
后会自动实现。可以使用Pod repo list
查看前后变化 - 直接在 Podfile 中使用 参考
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git'
这种格式
注意:
- podspec 文件必须在 Pod library 的根目录。
- 也可以这样参考官网
pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'
- 地址可以是任何可以访问得到的地址也可以是本地地址
- JSONKit.podspec 也可以 使用 JSONKit.podspec.json 的json格式
pod ipc spec JSONKit.podspec > JSONKit.podspec.json
看 Cocoapod 官网的方法
网站右上角分了4部分,guids 是关注的重点,guids 页面分了四部分,根据需要查找对应部分,然后细读。
总结
细读文档,动手实践发现有很多实现方法
方法 | 优点 |
---|---|
pod 'XXX', :git=>'' | 便于直接使用 |
pod 'XXX',:podspec=>'.podspec' | 原生 |
pod 'XXX',:podspec=>'.json' | 便于理解 |
specs 文件 | 便于详细配置工程 |
specs放在本地 | 便于调试 |
创建 Specs Reopsitroy | 便于集中管理 |
命令总结
pod lib create MyLib1
pod spec create Mylib1.podspec
Pod repo list
pod repo add REPO_NAME SOURCE_URL
pod repo push REPO_NAME SPEC_NAME.podspec
pod ipc spec JSONKit.podspec > JSONKit.podspec.json
pod 'XXX',:podspec=>''
pod 'XXX',git=>''
pod lib lint
实践过程
也许会遇到的问题
- dyld: lazy symbol binding failed: Symbol not found:解决方法
实践环境
- xcode Version 10.0 (10A255)
- pod --version 1.5.3
- MacOS High Sierra 10.13.6(17G65)
网友评论