CocoaPods 原理分享及遇到的问题改进
cocoapods 原理分享及问题阐述
- cocoapods 管理私有工程,需要两个git 仓库,
- repo 仓库,保存podspec 文件,告诉我们项目从哪来,
- 项目 仓库,保存工程文件,告诉我们引用的项目是什么
- CocoaPods是用ruby写的,并由若干个ruby包(gems)构成。在解析整合的过程中,最终要的几个gems分别是:
- CocoaPods/CocoaPods、
- 这是一个面向用户的组件,每当执行一个pod命令时,这个组件都将被激活。该组件包括了所有使用CocoaPods涉及到的功能,并且还能通过调用左右其他的gems来执行任务。
- CocoaPods/Core
- Core组件提供支持与CocoaPods相关文件的处理,文件主要是Podfile和podspecs。
- podfile 用于定义项目中所需要使用的第三方库。
- podspec 描述了一个库是怎样被添加到工程中的。它支持的功能有:列出源文件、framework、编译选项和某个库所需要的依赖等
- Core组件提供支持与CocoaPods相关文件的处理,文件主要是Podfile和podspecs。
- CocoaPods/Xcodeproj。
- 这个gem组件负责所有工程文件的整合。它能够对创建修改xcodeproj 和 .xworkspace 文件。它也可以作为一个单独的gem包使用。如果你想要写一个脚本来方便的修改工程文件,那么可以使用这个gem。
- CocoaPods/CocoaPods、
- 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
- 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
- 具体的时间消耗如下所示:
- resolve_dependencies,又简单的分为两步
- 使用过程中遇到的问题:
- 为什么我们在子工程中增加删除文件,其他人必须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中的源码,进行仿写修改来看看能不能实现以上功能。
- 由于我们只是改了本地的私有podSepc引用,其他的pods依赖依然没有发生变化,也就是说我们没有必要再进行
- 为什么我们在子工程中增加删除文件,其他人必须pod update 一下,才能顺利编译?
CocoaPods 原理分享及遇到的问题改进的更多相关文章
- 探索HashMap实现原理及其在jdk8数据结构的改进
因为网上已经太多的关于HashMap的相关文章了,为了避免大量重复,又由于网上关于java8的HashMap的相关文章比较少,至少我没有找到比较详细的.所以才有了本文. 本文主要的内容: 1.Hash ...
- Socket 核心原理分享
Socket 的个人故事.希望通过这篇文章让你弄懂什么是 Socket,明白 TCP 和 UDP 协议的通讯,明白长连接和短连接的优缺点,明白 BIO.NIO.AIO的区别. Socket 大家好,我 ...
- 重构 MVC; 代码分享工具(重构,改进,打分)
include 模块和 extend 模块的不同: Class Extension: 通过向singleton class中加入Module来定义class method,是对象扩展的一个特例. ...
- html5设计原理(转)
转自: http://www.cn-cuckoo.com/2010/10/21/the-design-of-html5-2151.html 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一 ...
- 学习HTML5必读之《HTML5设计原理》
引子:很久前看过的一遍受益匪浅的文章,今天再次转过来,希望对学习HTML5的朋友有所帮助. 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一方面,当然了,就是HTML5.我可以站在这儿只讲HT ...
- [转载] 分享D瓜哥最近攒的资料(架构方面)
原文: http://www.diguage.com/archives/41.html 扯扯蛋 以前见过零零散散地介绍一些知名网站架构的分析文章.最近D瓜哥也想研究一下各大知名网站的架构.所以,就搜集 ...
- Xcode7安装CocoaPods
一.CocoaPods介绍以及优点 CocoaPods 是开发 OS X 和 iOS 应用程序的一个第三方库的依赖管理工具.该项目源代码在Github上管理. 通过 CocoaPods,能够非常方便的 ...
- IBM中国研究院、SAP、网易游戏、IBM2015应届生招聘笔试面试问题分享
IBM中国研究院实习生 早在今年4月份.我面试的是IBM中国研究院的实习生岗位.主要是自然语言处理和语义网方向.那时我还在香港上学,两个考官对我进行的是电话面试,大概持续半个多小时,首先是我的自我介绍 ...
- iOS组件化开发-CocoaPods简介
CocoaPods简介 任何一门开发语言到达一定阶段就会出现第三方的类库管理工具,比如Java的Maven.WEB的Webpack等.在iOS中类库的管理工具-CocoaPods. 利用CocoaPo ...
随机推荐
- SPRING IN ACTION 第4版笔记-第三章Advancing wiring-001-DataSource在应用和开发环境之间切换 profile
一. DataSource在应用和开发环境的产生方式不同,可以用srping 的profile管理 Spring’s solution for environment-specific beans i ...
- 窗口的子类化与超类化——子类化是窗口实例级别的,超类化是在窗口类(WNDCLASS)级别的
1. 子类化 理论:子类化是这样一种技术,它允许一个应用程序截获发往另一个窗口的消息.一个应用程序通过截获属于另一个窗口的消息,从而实现增加.监视或者修改那个窗口的缺省行为.子类化是用来改变或者扩展一 ...
- 【HDOJ】1969 Pie
二分. #include <stdio.h> #include <math.h> ; ]; int main() { int case_n, n, f, m; double r ...
- How to Create a SharePoint 2010 Project Without SharePoint Server
转:http://community.bamboosolutions.com/blogs/sharepoint-2010/archive/2012/06/21/create-a-sharepoint- ...
- SharePoint 2010 母版页制作的简单介绍
转:http://www.cnblogs.com/jianyus/archive/2012/01/11/2319621.html 1. 首先打开SharePoint Designer 2010,找到 ...
- C#/PHP Compatible Encryption (AES256) ZZ
Finding a way to encrypt messages in C# and decrypting them in PHP or vice versa seems to be a " ...
- Team Foundation Server操作说明
目录 一. Visual Studio 2010团队协作管理 1.1团队模型及角色 1.1.1创建角色 1.1.2创建工作组 1.1.3工作组成员及权限 1.2团队成员利用VS2010实现协同办公 1 ...
- Bzoj 1853: [Scoi2010]幸运数字 容斥原理,深搜
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1774 Solved: 644[Submit][Status] ...
- 《A First Course in Probability》-chaper5-连续型随机变量-随机变量函数的分布
在讨论连续型随机变量函数的分布时,我们从一般的情况中(讨论正态分布的文章中提及),能够得到简化版模型. 回忆利用分布函数和概率密度的关系求解随机变量函数分布的过程,有Y=g(x),如果g(x)是严格单 ...
- 知道创宇爬虫题--代码持续更新中 - littlethunder的专栏 - 博客频道 - CSDN.NET
知道创宇爬虫题--代码持续更新中 - littlethunder的专栏 - 博客频道 - CSDN.NET undefined 公司介绍 - 数人科技 undefined