当前位置:网站首页>Cocoapods的相关知识点
Cocoapods的相关知识点
2022-06-12 13:26:00 【Li.CQ】
pod 流程

pod 缓存 ~/Library/Caches/CocoaPods

搜索并安装Cocoapods上的某一个库,大致执行流程为:
1、从search_index.json中找到该库对应版本的podspec文件并将其下载到Specs/Release文件夹中
2、根据该库的podspec文件中的source中的git地址,将对应版本的库下载到Pods/Release文件夹中
将本地自己开发的库推送到Cocoapods仓库时,大致执行流程为:
1、执行 pod spec lint XXX.podspec 时,如果没有依赖其他库时,会在 Specs/External文件中该库生成对应版本的 podsepc 文件,并对其文件名进行hash
2、将该podspec文件中对应的库下载到Pods/External文件夹中
3、如果发布的库依赖其他Cocoapods上发布的库时,会将依赖库的podspec文件下载到Specs/Release 文件夹中,依赖的库下载到 Pods/Release文件夹中
pod install 运行原理分析
- 分析dependency
- 对比本地Pod和podfile.lock文件中的版本,如果不一致会提示存在风险。
- 对比podfile是否发生了变化,add/remove pod依赖
- 如果存在 ,会生成两个列表,一个是需要add的pods,一个是需要remove的pods。
- 如果存在remove的,删除remove的pods(会删除podfile.lock里的版本依赖)。
- 添加需要的pods依赖
- 此时,如果是常规的CocoaPods库(基于git),会先去:
- Spec下查找对应的Pods文件夹
- 找到对应的tag
- git clone下来代码并copy到Pod目录下
- 运行pre-install hook
- 生成Pod Project
- 将该pod文件添加到工程中
- 添加对应的framework、.a库、bundle等
- 链接头文件,生成Target
- 运行post-install hook
- 生成podfile.lock ,之后生成文件副本mainfest.lock并将其放在Pod文件夹内。(如果出现 The sandbox is not sync with the podfile.lock这种错误,则表示manifest.lock和podfile.lock文件不一致),此时一般需要重新运行pod install命令。
- 配置原有的project文件(add build phase)
- 添加了 Embed Pods Frameworks
- 添加了 Copy Pod Resources
// - 其中,pre-install hook和post-install hook可以理解成回调函数,是在podfile里对于install之前或者之后(生成工程但是还没写入磁盘)可以执行的逻辑,逻辑为:
// - 注意:pod install优先遵循 Podfile 里指定的版本信息,其次遵循 Podfile.lock 里指定的版本信息来安装对应的依赖库。
pre_install do |installer|
# 做一些安装之前的hook
end
post_install do |installer|
# 做一些安装之后的hook
end
pod 命令中的操作
- 使用pod update 命令时候, 会将podfile中的源的地址中的文件夹拷贝到 ~/.cocoapods/repos 中;
- 使用 pod spec lint --sources=‘xxx’ 时候, 会将 source中指定的所有的源的地址中的文件夹拷贝到 ~/.cocoapods/repos 中;
- pod spec lint --verbose --allow-warnings --use-libraries --skip-import-validation 会在本地的~/.cocoapods/repos中所有的源中验证这个组件
- 使用 pod repo push REPO_NAME SPEC_NAME.podspec 命令时候就, 会将SPEC_NAME.podspec 文件加入到 ~/.cocoapods/repos/REPO_NAME/SPEC_NAME/pod文件的version/SPEC_NAME.podspec 中;
命令解析
- pod install :
- 根据Podfile文件或者Podfile.lock下载并导入对应的第三方库,检查资源配置文件是否需要有更新,如有更新,则下载最新版本。
- pod update
- 先拉取远程最新目录,再根据目录中的资源重新更新一遍pod
- 它不管Podfile.lock是否存在, 都会读取Podfile文件的的框架信息。如果你的podfile中每个库都指定了版本还好,如果没有,那么每次都是拉一遍最新库。
- pod update --no-repo-update
- 只根据本地目录更新库,不需要拉取远程。
- pod update xxx
- 查找更新最新版本的指定库名称的框架
- pod repo update
- 用来更新本地cocoapods的spec资源配置信息。
- 可能你从来不会用pod repo update也可以拿到最新的库,那是因为在使用pod update是默认会执行一遍pod repo update ,所以会发现如果你的pod库引用多了,每次pod update都很慢,网络如果不好更是经常会断掉,就是因为你在更新pod时,也更新了资源目录。
Manifest.lock是Podfile.lock的副本,它是在Pods目录里面。它的作用是这样的,我们通常是不把Pods文件放到版本管理里面,而把Podfile.lock放到版本管理里面。这时对于拉取代码之后是否需要更新pod,就可以通过对比本地的Manifest.lock和远程Podfile.lock是否相同即可。
边栏推荐
- Pytorch to onnx, onnxruntime reasoning in mmclas
- 高通平台开发系列讲解(协议篇)QMI简单介绍及使用方法
- Install MySQL database independently on Debian 10
- 镜像扫描工具预研
- jsp跳转问题,不能显示数据库数据,并且不能跳转
- NVIDIA Jetson Nano Developer Kit 入门
- Hudi key generation
- Octopus network progress monthly report | may 1-May 31, 2022
- 2066: [example 2.3] buying books
- [embedded] serial communication and its case
猜你喜欢

Innovation training (x) advanced interface beautification

Bitmap, bloom filter and hash sharding

VGA显示彩条和图片(FPGA)

Wechat web developer tools tutorial, web development issues

Semantic segmentation with pytorch

Multi source BFS problem template (with questions)

C#DBHelper_ FactoryDB_ GetConn

【刷题篇】超级洗衣机

嵌入式系统概述2-嵌入式系统组成和应用
![[database] Navicat -- Oracle database creation](/img/40/95d222acd0ae85bd9a4be66aa20d1d.png)
[database] Navicat -- Oracle database creation
随机推荐
Overview of embedded system 1- definition, characteristics and development history of embedded system
关于#SQLite写注册功能时,数据表查询出错#的问题,如何解决?
实战 | 巧用位姿解算实现单目相机测距
hudi 键的生成(Key Generation)
Further understanding of the network
2066: [example 2.3] buying books
Stm32f1 and stm32subeide programming example - device driver -dht11 temperature sensor driver
There was an error installing mysql. Follow the link below to CMD
1001:Hello,World
Django note 21: querying databases using native SQL
Symbolic constant, const qualifier
1002: output the second integer
verilog-mode的简要介绍
R language Visual facet chart, hypothesis test, multivariable grouping t-test, visual multivariable grouping faceting bar plot, adding significance level and jitter points
leetcode 47. Permutations II 全排列 II(中等)
How to solve the problem of data table query error when SQLite writes the registration function?
Unittest framework
[Title brushing] Super washing machine
jsp跳转问题,不能显示数据库数据,并且不能跳转
Bitmap, bloom filter and hash sharding