/ SOMETHING

CocoaPods 私有库搭建

在 iOS 开发过程中,经常会使用cocoapods管理三方库,如果自己的库不想公开,只方便自己公司的人用,该怎么办呢?这里介绍一下如何搭建一个私有的Pods库。

  • CocoaPods的原理
  • 创建私有库

CocoaPods的原理

  1. 第三方库会被编译成.a静态库供我们真正的工程使用。
    CocoaPods会将所有的第三方库以target的方式组成一个名为Pods的工程,该工程在Pods目录下。整个第三方库工程会生成一个名称为libPods-xxx.a的静态库提供给主工程使用。对于资源文件,CocoaPods 提供了一个名为Pods-resources.sh的bash脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。

  2. 工程和第三方库所在的工程会由一个新生成的workspace管理
    为了方便我们直观的管理工程和第三方库,CocoaPodsTest工程和Pods工程会被以workspace的形式组织和管理,也就是xxxx.xcworkspace文件。

  3. CocoaPods通过Pods-Podtest.release.xcconfig的文件来在编译时设置所有的依赖和参数。

  4. 原来的工程设置已经被更改了,直接打开原来的工程文件去编译就会报错,使用新生成的workspace来进行项目管理。

创建私有库

创建私有库的大体步骤为:

1. 准备工作

创建两个私有远程仓库 Spec 和 Lib

  • Spec仓库用来存储spec
  • Lib用来存储项目工程文件

2. 创建pod私有库的项目工程

  • cd到合适目录下用命令行创建工程,执行 pod lib create Lib ,按提示输入需要的内容.
  • 修改podspec文件
  • 修改完成后,cd 到Lib目录下执行pod lib lint
    podspec 文件保存了所有要对三方库的配置,包括要引用的依赖、模块划分、源文件、公共头文件等.

3. 将本地项目文件上传到远程私有库中

$ git remote add origin http://git.xxxx.cn/APP/ios/Lib.git
$ git add .
$ git commit -m "Initial commit"
$ git push -u origin master
//tag 值要和podspec中的version一致
$ git tag 0.1.0
//推送tag到服务器上
$ git push --tags

这时查看远程仓库应该有自己的项目文件了

4. 校验spec

执行 pod spec lint

5.创建spec repo

进入文件夹cd ~/.cocoapods/repos 可以查看本地spec repo 指定管理 lib repo 的 specs repo 的 url pod repo add Lib http://git.xxxx.cn/APP/ios/Spec.git 注意 此处地址是spec仓库地址 推送 podspec 到 specs repo pod repo push Lib Lib.podspec --sources=http://git.xxx.cn/APP/ios/Spec.git

6. 验证

创建一个新的项目 编写podfile文件

source 'http://git.xxxx.cn/APP/ios/Spec.git'

platform :ios, '9.0'

target 'TestPods' do
  use_frameworks!
  pod 'Lib'

end

cd项目中 执行pod install

7. 更新spec文件

更新 podspec 文件后:

  1. 将更新的podspec 文件更新到 git 库
  2. 更新本地 repo 相关私有库的 podspec 文件,命令如下: zsspecs 是私有库的名称.
  pod repo update zsspecs

subspec

代表了一个库的其中一个模块的说明。 subspec 支持嵌套

注意事项

  • pods 在安装的时候,遇到体积较大的文件会报early EOF的错, 需要设置postBuffer来解决这个问题
 $ git config --global http.postBuffer 1073741824  
 $ git config --list
  • pod install pod update 区别
    pod update AFNetworking 单独更新某一个库.

  • 不更新 podspec
    CocoaPods 在执行pod install和pod update时,会默认先更新一次podspec索引。使用–no-repo-update参数可以禁止其做索引更新操作。如下所示:

 pod install --no-repo-update
 pod update --no-repo-update
  • 使用私有的 pods
    通过直接指定某一个依赖的podspec,就可以使用内部的私有库。有利于使企业内部的公共项目支持 CocoaPods。示例:
    pod 'MyCommon', :podspec => 'https://suning.com/common/myCommon.podspec'

参考资料
cocoaPods文档
cocoaPods 原理
cocoaPods 管理
subspec