cocoapods 原理分享及问题阐述

  1. cocoapods 管理私有工程,需要两个git 仓库,

    • repo 仓库,保存podspec 文件,告诉我们项目从哪来,
    • 项目 仓库,保存工程文件,告诉我们引用的项目是什么
  2. CocoaPods是用ruby写的,并由若干个ruby包(gems)构成。在解析整合的过程中,最终要的几个gems分别是:
    • CocoaPods/CocoaPods、

      • 这是一个面向用户的组件,每当执行一个pod命令时,这个组件都将被激活。该组件包括了所有使用CocoaPods涉及到的功能,并且还能通过调用左右其他的gems来执行任务。
    • CocoaPods/Core
      • Core组件提供支持与CocoaPods相关文件的处理,文件主要是Podfile和podspecs。

        • podfile 用于定义项目中所需要使用的第三方库。
        • podspec 描述了一个库是怎样被添加到工程中的。它支持的功能有:列出源文件、framework、编译选项和某个库所需要的依赖等
    • CocoaPods/Xcodeproj。
      • 这个gem组件负责所有工程文件的整合。它能够对创建修改xcodeproj 和 .xworkspace 文件。它也可以作为一个单独的gem包使用。如果你想要写一个脚本来方便的修改工程文件,那么可以使用这个gem。
  3. pod 常用命令
    • pod install

      • 这个是第一次在工程里面使用pods的时候使用,并且,也是每次你编辑你的Podfile(添加、移除、更新)的时候使用。

        • 每次运行pod install命令的时候,在下载、安装新的库的同时,也会把你安装的每个库的版本都写在了Podfile.lock文件里面。这个文件记录你每个安装库的版本号,并且锁定了这些版本。

        • 当你使用pod install它只解决了pods里面,但不在Podfile.lock文件里面的那些库之间的依赖。对于在Podfile.lock里面所列出的那些库,会下载在Podfile.lock里面明确的版本,并不会去检查是否该库有新的版本。对于还不在Podfile.lock里面的库,会找到Podfile里面描述对应版本(例如:pod "MyPod", "~>1.2")。
        • 一句话总结
          • 如果没有 podfile.lock,pod install 会依据podfile生成库和podfile.lock;
          • 如果原有 podfile.lock,pod install 依据podfile.lock生成库,对于不在podfile.lock但在podfile中的库会升级到满足podfile的最新版本,同时更新podfile.lock
    • pod outdated:
      • 当你运行pod outdated命令,CocoaPods会列出那些所有较Podfile.lock里面有新版本的库(那些当前被安装着的库的版本)。这个意思就是,如果你运行pod update PODNAME,如果这个库有新的版本,并且新版本仍然符合在Podfile里的限制,它就会被更新。
    • pod update
      • 当你运行 pod update PODNAME 命令时,CocoaPods会帮你更新到这个库的新版本,而不需要考虑Podfile.lock里面的限制,它会更新到这个库尽可能的新版本,只要符合Podfile里面的版本限制。

      • 如果你运行pod update,后面没有跟库的名字,CocoaPods就会更新每一个Podfile里面的库到尽可能的最新版本。此时会生化新的podfile.lock文件
      • 一句话总结:pod update 依据podfile文件更新库和podfile.lock
  4. pod update的执行过程大概分五步
    • resolve_dependencies,又简单的分为两步

      • update repo
      • 解析podfile
    • download_dependencies (下载podfile中依赖以及其间接依赖)
    • generate_pods_project (即生成dependency在Pods工程中的target,以及写pod file.lock等文件)
    • integrate_targets
    • peform_post_install_actions
    • 具体的时间消耗如下所示:
  5. 使用过程中遇到的问题:
    • 为什么我们在子工程中增加删除文件,其他人必须pod update 一下,才能顺利编译?

      • 这是因为我们采用了git + cocoapods的管理方式,git 负责管源文件, 通过git pull 来同步远程代码, 而cocoapods 通过pod update/install 会生成pod.xcworkspace来管理这些文件的引用,所以我们通过git pull 实现了文件的拉取(增删改),但是没有通过pod update 来更新pod.xcworkspace的文件引用(增删),所以就会找不到编译报错
    • 如何减少子工程中增删文件,其他人必须pod update 才能顺利编译造成的时间开销?
      • 由于我们只是改了本地的私有podSepc引用,其他的pods依赖依然没有发生变化,也就是说我们没有必要再进行分析依赖下载依赖,步骤,如果我们可以直接 generate_pods_projec重新建立文件引用,就好了;更或者只是增加文件install_file_reference这一步就好
      • 我们可以通过读 CocoaPods/Xcodeproj中的源码,进行仿写修改来看看能不能实现以上功能。

转载于:https://www.cnblogs.com/peaceWang/p/5911032.html

CocoaPods 原理分享及遇到的问题改进相关推荐

  1. Socket 核心原理分享

    Socket 核心原理分享 闪念基因 2020-09-21 10:38:58 作者:ITDragon龙 出处:http://www.cnblogs.com/itdragon/ Socket 的个人故事 ...

  2. GO 中 Chan 实现原理分享

    GO 中 Chan 实现原理分享 嗨,我是小魔童哪吒,还记得咱们之前分享过GO 通道 和sync包的使用吗?咱们来回顾一下 分享了通道是什么,通道的种类 无缓冲,有缓冲,单向通道具体对应什么 对于通道 ...

  3. iOS SDK开发系列一之Cocoapods原理,Xcode的配置,动态库和静态库介绍

    前言 三个月没写东西了,是时候总结点东西了.SDK这个东西开发其实和项目开发类似,但是项目中你不需要关注一些配置和打包的参数,或者你压根不需要关注Framework和.a到底是怎么链接配置的,因为Co ...

  4. 唐诗宋词v2.0原理分享

    v2.0本意是进行数据上的优化.但是由于数据量很大,存储方式由原先的写在代码中,变为在文件中,因此不得不采用异步方式,这样原先的代码绝大部分都不能使用了. 原理分享 主要进行了以下几个步骤的工作: 从 ...

  5. 【阿里云课程】分组网络原理,结构发展及设计改进

    大家好,继续更新有三AI与阿里天池联合推出的深度学习系列课程,本次更新内容为第10课中的一节,介绍如下: 分组网络原理与结构演变 本次课程是阿里天池联合有三AI推出的深度学习系列课程第10期,深度学习 ...

  6. 基于 Java 的外卖自动接单系统(含自动打印小票)实现原理分享

    无论脑力工作者,还是体力工作者,又或是其他工作者,开心或不开心时都免不了叫个外卖.或者在某些快餐店吃饭时经常听到"您有新的订单,请及时处理"然后就听见打印机吱吱吱的将订单自动打印出 ...

  7. 深度学习新星:GAN的基本原理、应用和走向(文末附其他GAN的原理、方法、问题、改进方式和应用)

    转载自:http://www.leiphone.com/news/201701/Kq6FvnjgbKK8Lh8N.html GAN是"生成对抗网络"(Generative Adve ...

  8. CocoaPods原理

    CocoaPods是IOS项目上负责管理依赖的工具,即对第三方库的依赖. CocoaPods 的原理是将所有的依赖库都放到另一个名为Pods的项目中, 然而让主项目依赖Pods项目, 这样,源码管理工 ...

  9. CocoaPods原理(一)

    CocoaPods介绍 CocoaPods 是开发 OS X 和 iOS 应用程序的一个第三方库的依赖管理工具.利用 CocoaPods,可以定义自己的依赖关系 (称作 pods),并且随着时间的变化 ...

最新文章

  1. 从Altium Designer导出PCB的3D模型至Solidworks
  2. 带你进入高级测试实验室,
  3. Jersey WebResource –标头不附加
  4. C 语言实例 - 使用结构体(struct)
  5. python机器学习2021年6月19日09:35:06
  6. 家庭用计算机怎样选择设置网络位置,win7系统怎么选择网络位置
  7. 陪跑 Android 十年,这家操作系统创业公司终于实现盈利!
  8. windows远程连接linux中mysql数据库
  9. 现代密码学中的数论基础知识梳理
  10. Overfeat 笔记
  11. 神经网络——torch.optim优化器的使用
  12. java 日历转化-阴历转阳历
  13. ImportError: cannot import name '_validate_lengths'
  14. sqlserver运行超大sql文件
  15. 寿司之神--小野二郎
  16. java sendkeys方法_java+selenium——键盘操作+复制粘贴(keys类)
  17. 采集京东网数据的10个经典方法
  18. 熵权法与Apriori算法对较多数据种类数据的处理
  19. 一文搞定子网划分!子网掩码!超详细例题解析!
  20. 如何科学有效地根治肾虚——中篇(肾虚到底是什么?)

热门文章

  1. Quartz.NET基础知识概述
  2. HEOI2012 朋友圈
  3. 缩短网址将成微博的重要安全性问题
  4. Netty源码解析1-Buffer
  5. 点击按钮显示隐藏的表格
  6. Grails里DOMAIN类的一对一,一对多,多对多关系总结及集成测试
  7. ORACLE学习笔记--性能优化2
  8. 半年没活动了,来活动一下
  9. Ruby系统中的AJAX开发技术简析
  10. 会话技术CookieSession