cocoapod

iOS库依赖工具CocoaPods 你想知道的都在这

2019-08-26  本文已影响0人  夏天然后

前言 : 这篇文章将从以下几个方面去解析下Pods 这是一个技术分享的文字整理

  1. CocoaPods是什么
  2. CocoaPods的构成
  3. 相关文件的理解
  4. Pod命令的理解
  5. CocoaPods幕后发生了什么
  6. 使用小技巧
  7. 如何制作公开库
  8. 如何制作私有库
  9. 其他

1. CocoaPods 是什么

概述: CocoaPods 是开发 OS X 和 iOS 应用程序的一个第三方库的依赖管理工具,使用这个工具可以简化对组件依、更新的过程。新添加一些第三方组件可以直接修改 podfile 然后进行 pod install;更新已有第三方组件,可以修改 podfile 然后进行 pod update;自己开发的组件也可以上传到 CocoaPods 或者私有仓库,供其他人使用。

2. CocoaPods构成

3. 相关文件

4. 相关命令

+ cache         操作CocoaPods缓存
+ deintegrate   从项目中解压缩CocoaPods    
+ env           显示Pod环境
+ init          为当前目录生成一个Podfile    
+ install       遵照Podfile.lock 的版本安装一个依赖
+ ipc           进程间通信
+ lib           开发Pod
+ list          列出所有Pod
+ outdated      显示过时的项目依赖, 也就是告诉你哪些Pod可以更新了
+ plugins       展示可用的Pod插件
+ search        查询Pods
+ setup         设置CocoaPods环境
+ spec          管理 pod specs
+ trunk         与CocoaPods API交互 (例如想要发布一个specs
+ update      更新过时的项目依赖关系和创造新的Podfile.lock

4.1 Pod install 与 Pod update

pod install: 优先安装 Podfile 中改变的组件,并优先遵循 Podfile 中的版本号,其次遵循 Podfile.lock 中的版本号。如果使用的 Podfile 中版本号,会将新的版本号更新到 Podfile.lock 中。
pod update [PODNAME]: 会根据当前 Podfile 规则更新组件。如果 Podfile 中没有指定版本号,并不会遵循 Podfile.lock,而是会拉取最新版本,并更新 Podfile.lock。

建议:
·新添加一个 pod 时,使用 pod install,不要使用 pod update 去下载一个新的组件,避免更新其他 pod 的版本。
·更新 pod 版本时,使用 pod update [PODNAME]。
·没有必要的话,不要使用全局更新 pod update,避免不必要的更新。

4.2 指定Pod版本的几种方式

pod ‘PodName' : 最新版本的Pod
pod 'PodName', ‘0.9’: 指定唯一版本
pod 'PodName', =>’0.9’ 使用逻辑运算符
pod 'PodName', ~>’0.9’ 乐观的运算符

///
逻辑运算符: 
'=> 0.1' 任何高于0.1的版本
'< 0.1' 任何低于0.1的版本
'<= 0.1' 版本0.1和任何较低版本

乐观的运算符: 
'~> 0.1.2' 版本0.1.2和版本高达0.2,不包括0.2和更高
'~> 0.1' 版本0.1和版本高达1.0,不包括1.0和更高版本
'~> 0' 版本0及更高版本,这与没有版本基本相同

https://guides.cocoapods.org/syntax/podfile.html

5. CocoaPods幕后发生了什么

5.1 Pod install的过程

pod install —verbose /// 可以看到一个详细的过程

6. 小技巧

大家在使用 pod install 命令时一般会加上 --no-repo-update 选项。这使得 pod install 不进行本地三方库信息库 git pull 的更新操作。若 Podfile 中指定 Alamofire 的版本号为 4.2.0,但本地 ~/cocoapods/repo/master/Specs/Alamofire 中并没有此版本号,此时使用 pod install --no-repo-update 会出现如下错误

eg : cocoapods install error:None of your spec sources contain a spec satisfying the dependencies: Alamofire(~ 4.2.0).

若直接使用 pod install 便会先执行 pod repo update,由于 github 需要翻墙,并且更新的内容过大就会等待很久。
既然知道了 Cocoapods 的原理,我们便可以手动在 ~./cocoapods/repo/master/Specs 中添加我们需要的三方库版本信息,避免了把所有的并没有使用到的三方库信息更新到本地。
下面以添加 Alamofire 4.2.0 版本信息到本地为例子。

6.1 具体操作

cd ~/.cocoapods/repo/master/Specs/Alamofire/
mkdir 4.2.0
cp ~/.cocoapods/repo/master/Specs/Alamofire/1.1.3/Alamofire.podspec.json ./4.2.0

上面的命令创建了名为 4.2.0 的文件夹,并复制了一个库信息的 json 文件到新创建的文件夹中,用 vi 打开该文件, 我们需要修改版本号,source 的 tag。那 source 的 tag 怎么知道是多少呢,这个可以从 GitHub 上找到。

https://github.com/Alamofire/Alamofire/releases 这里可以找到release版本对应的tag

示例.1 示例.2

7. 制作公开库

可以参照我之前写的给库 添加CocoaPods支持

7.1 Podspec 示例

Pod::Spec.new do |spec|
  spec.name         = 'Reachability'
  spec.version      = '3.1.0'
  spec.license      = { :type => 'BSD' }
  spec.homepage     = 'https://github.com/tonymillion/Reachability'
  spec.authors      = { 'Tony Million' => 'tonymillion@gmail.com' }
  spec.summary      = 'ARC and GCD Compatible Reachability Class for iOS and OS X.'
  spec.source       = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
  spec.source_files = 'Reachability.{h,m}'
  spec.framework    = 'SystemConfiguration'
end

7.2 更新公开库

本地文件目录展示

示例.3

8. 开发一个私有Pod的工作流程

  1. Podspec文件编写
  2. Podfile编写路径修改

pod 'IMUIKit', :path => "/本地路径/trunk/kk_espw/IMUIKit"

pod 'IMUIKit', :svn => 'svn地址/trunk/IMUIKit’

9. 其他

1. 使用Pod打包静态库:

https://punmy.cn/2019/05/25/使用cocoapods-packager打包静态库.html

2. 使用CocoaPod进行单元测试:

https://www.jianshu.com/p/0cca4e12abe7

3. Pod相关的一些插件:

https://guides.cocoapods.org/plugins/setting-up-plugins.html

上一篇 下一篇

猜你喜欢

热点阅读