CocoaPod 制作私有库(Private Pods)

前言

官网关于这个知识点已有详细的介绍,但是对我来说: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 两种方法

  1. 直接在 GitLab 新建一个 project,添加相关文件即可。
  2. 用 CocoaPod 提供的命令 pod lib create MyLib1 一般情况下,第三库都需要demo和测试来验证。cocopods 的这条命令帮我们完成了这些繁琐的工作。 并且帮我们制作了对应的 podspec 参考官网
  • 测试时,如果是 swift 的库 注意给类和方法根据需要添加 publice 关键字
  • 这个命令会 git pod-template 到本地,根据需要删除 git 相关的目录和文件。
  • 一般情况要将 Pod library 上传到 自己的 GitLab。

制作 Podspec 三种方法

  1. 上面的方法2已经产生了podspec
  2. 用 CocoaPod 提供的命令 pod spec create Mylib1.podspec 参考官网
  3. 手动创建一个这样的文件
    注意:
  • soure URL 对应的地址是 pod library的地址。 不是 Spec Repo 的地址
  • tag 的版本号要对应。当然也可以不使用 tag

官方推荐的制作方法

官方推荐的方法步骤最多,但标准规范。

  1. 创建 Spec Repo,一般就是在 GitLab 上新建一个 project,github 叫 Repository。并添加 Mylib1.podspec 等spec文件
  2. Add your Private Repo to your CocoaPods installation
pod repo add REPO_NAME SOURCE_URL
  1. 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 的地址

根据文档总结的其他方法

  1. 官方推荐的制作方法中的步骤2和步骤3可以不实现。只要在Podfile中加入 source 'URL_TO_REPOSITORY' pod install后会自动实现。可以使用Pod repo list 查看前后变化
  2. 直接在 Podfile 中使用 参考
    pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git'
    这种格式
    注意:
  • podspec 文件必须在 Pod library 的根目录。
  1. 也可以这样参考官网
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)

你可能感兴趣的:(CocoaPod 制作私有库(Private Pods))