CocoaPods进阶:本地包管理
http://www.iwangke.me/2013/04/18/advanced-cocoapods/
粉笔网的iOS工程师唐巧曾经写过一篇blog《使用CocoaPods来做iOS程序的包依赖管理》介绍了基本的CocoaPods使用方法。本文将另外谈一谈如何使用CocoaPods进行本地的包管理。建议没有接触过CococaPods的朋友先阅读一下唐巧的blog。
为什么要进行本地的包管理
- 有的时候CocoaPods的spec版本过旧,pull request没有及时merge,导致我们无法利用CocoaPods使用较新的代码版本;
- 有的时候我们的一些代码不是开源的,或者暂时不想放到Github上。我们更想使用CocoaPods引用本地的代码;
使用CocoaPods里没有的第三方库新版本
这里我们以PlayHavenSDK为例介绍一下。我们在CocoaPods / Spec这个repository里面可以看到,PlayHavenSDK的版本是1.11.0。而playhaven
/ sdk-ios里面的tag,已经有了1.12.1这个版本。CocoaPods的Spec repository已经落后了两个版本。这时我们想使用最新版,需要的就是一个更新的spec。
|
|
这里我们注意到s.source这一行配置,指向了playhaven/sdk-ios.git仓库的1.12.1这个tag,表示这个spec将使用这个tag的代码。我们将它保存到本地的一个目录中,如~/Desktop/PlayHavenSDK/PlayHavenSDK.podspec
。
我们回到Xcode project目录中,打开Podfile,添加pod 'PlayHavenSDK', :podspec => '~/Desktop/PlayHavenSDK/PlayHavenSDK.podspec'
,接着运行pod
即可。
update
PS: 当然这个podspec也可以不放在本地,比如放在gist上。
使用CocoaPods管理本地代码
这种情况稍微复杂一步,除了指定podspec,还需要准备一个本地要使用的git repository。我们以Chartboost为例来进行说明。
首先我们新建一个名为~/Desktop/ChartboostSDK/
的目录,然后执行git
初始化这个git repository。
init
接着我们去Chartboost官方网站下载最早新的SDK。将它放进这个目录中,然后执行git add . && git commit -m"Add new SDK"
。
这样我们这个目录已经成为一个git repository,里面是最新的Chartboost SDK。
这时我们仍然需要一个podspec文件,来说明我们从哪个仓库来获取代码:
|
|
我们运行ls -lh | awk '{print $9}'
,ChartboostSDK目录的结构显示如下:
|
|
除了两个.h,一个.a,还有一个podspec文件。
接着我们回到Xcode proj所在的文件夹中,编辑Podfile,添加pod 'ChartboostSDK', :local => '~/Desktop/ChartboostSDK'
。这里的local表明从本地的git仓库里获取代码。
最后我们运行pod update
,大功告成。
CocoaPods小结
上面的两种情况,简单来说:
- 需要使用最新的开源代码/库,但没最新的spec
- 需要使用私有代码/库,需要对应的私有的spec
对于第一种情况,建议大家可以给CocoaPods / Specs提交一个pull request。
使用CocoaPods只需要知道两件事情:
- podspec:一个pod的配置是什么,pod的代码放在哪里
- Podfile:项目依赖哪个pod,以何种方式依赖,它的podspec放在哪里
这里podspec和git repository都非常灵活,可以放在本地,也可以放到github/gist上。代码仓库甚至可以不使用git而直接使用一个zip压缩包。
使用CocoaPods可以把多们从繁重的配置和代码管理中解脱出来,而且可以少犯错误。比如Deployment Target设置为5.0,但App中需要使用AdSupport.framework,如果忘记设置为optional则所有5.x的设备运行时都会crash。对于这种情况CocoaPods在spec提供了weak_frameworks
的配置选项。同时CocoaPods能够保证库的依赖关系,而不会出现几个项目依赖版本不一致的情况。
PS: 最近为了UDID更新的同学们可别犯AdSupport.framework这个错误,后果很严重。
希望这个blog对大家使用CocoaPods有所帮助。
赶个时髦,祝大家一帆风顺。
CocoaPods进阶:本地包管理的更多相关文章
- Cocoa包管理器之CocoaPods详解
CocoaPods在Cocoa开发日常工作中经常用到的包管理器,即依赖管理工具.有的项目也有用Carthage的,Carthage是一个比较新的依赖管理工具,是使用Swift语言开发的.Carthag ...
- Cocoa包管理器之Carthage详解及CocoaPods中心化+Carthage的二进制化
上篇博客详细的聊了CocoaPods的相关内容,今天我们就来介绍另一个Cocoa的包管理器Carthage.在上家公司用Swift开发工程时,用的就是Carthage.Carthage诞生于14年11 ...
- iOS包管理工具Cocoapods的安装与使用
转自:http://www.sxt.cn/u/10014/blog/6448 在我们开发移动应用的时候,一般都会使用到第三方工具,而由于第三方类库的种类繁多,我们在项目中进行管理也会相对麻烦,所以此时 ...
- 【程序包管理】本地yum仓库的创建
一.yum优势 yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器. 基於RPM包管理,能够从指定的服务器 ...
- Net包管理NuGet(4)打包nuget包的进阶用法
nuget包不止可以放进dll,还可以引用其他包,创建项目文件及替换配置文件 引用的时候同时引用依赖项假设引用某个dll需要依赖其他的dll如Zeta.Core.dll需要引用ZETA.Seriali ...
- iOS - CocoaPods 第三方开源框架管理
1.CocoaPods CocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具.CocoaPods 的项目源码在 Github 上管理.该项目开始于 2011 年 8 月 12 日,在这 ...
- Carthage 包管理工具,另一种敏捷轻快的 iOS & MAC 开发体验 | SwiftCafe 咖啡时光
说起 iOS 开发的包管理,大家就不由得会想起 CocoaPods, 它确实是一个强大的工具.但这次咱们来关注另外一个包管理工具 Carthage,如果说 CocoaPods 像一个航母,一应俱全,坚 ...
- Linux程序包管理之yum及源代码安装
第十六章.Linux程序包管理之yum及源代码安装 目录 yum介绍 yum配置文件 yum的repo配置文件中可用的变量 yum命令的使用 使用光盘作为本地yum仓库 如何创建yum仓库 编译安装的 ...
- 包管理工具Carthage使用
iOS项目中第三方开源库的工具有Cocoapods和Carthage,swift官方出了一个包管理工具SPM(Swift Package Manager). 首先,大体讲一下Cocoapods和Car ...
随机推荐
- 如何让字典保持有序---Python数据结构与算法相关问题与解决技巧
实际案例: 某编程竞赛系统,对参赛选手编程解体进行计时,选手完成题目后,吧该选手解体用时记录到字典中,以便赛后按选手名查询成绩 {'Lilei':(2,43),'HanMei':(5,52),'Jim ...
- 安装gradle和配置
1:官网下载地址:https://docs.gradle.org/current/userguide/installation.html 下载自己认为的版本(压缩包) 2:解压到目标目录 3:配置gr ...
- C++ 全面刨析使用指针方法 _new _delete
指针 #include<iostream> using namespace std; int main() { ; int* pn;//声明 int* pn = &avr;//初始 ...
- 东软、天健、金仕达、杭创、中联、NECHIS、军字一号 HIS产品的比较
HIS主流厂商产品介绍1.沈阳东软医疗系统有限公司创立于1998年公司是中国目前最大的软件集团——东软集团为技术和资源依托,以研制生产大型医疗设备为主,同时为医院数字化提供全面解决方案.但是,公司改制 ...
- MySQL binlog之数据恢复
一.恢复方案1.数据量不是特别大,可以将mysqldump命令备份的数据使用mysql客户端命令或者source命令完成数据的恢复:2.使用Xtrabackup完成数据库的物理备份恢复,期间需要重启数 ...
- Oracle-第一篇一些调优技巧
1.查询 1>通过提示,使用索引. 2>使用/*+parallel*/并行查询 3>查看执行计划,调整sql语句或者优化表结构 4>避免使用“*”号 2.表设计:partiti ...
- c++ const 修饰变量位置含义
c++ const 修饰变量位置含义 const 修饰成员变量 const修饰指针变量时: 只有一个const,如果const位于*左侧,表示指针所指数据是常量,也就是指向常量的指针,不能通过解引用修 ...
- ZOJ-1610 线段树+两种查询方法(弥补我线段树区间填充的短板)
ZOJ-1610 线段树+两种查询方法(弥补我线段树区间填充的短板) 题意 题意:给一个n,代表n次操作,接下来每次操作表示把[l,r]区间的线段涂成k的颜色其中,l,r,k的范围都是0到8000 这 ...
- Codeforces 609E (Kruskal求最小生成树+树上倍增求LCA)
题面 传送门 题目大意: 给定一个无向连通带权图G,对于每条边(u,v,w)" role="presentation" style="position: rel ...
- neo4j 基本语法笔记(全)
按照总监要求看了两天的neo4j 数据库的使用.在网上找了一个基础教程类似于w3c.school的网站(英文 ,中文,中文的翻译的不是很好,如果英文不好可以辅助理解),这个教程基础知识很全全面,从数据 ...