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。
1 |
Pod::Spec.new do |s| |
这里我们注意到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文件,来说明我们从哪个仓库来获取代码:
1 |
Pod::Spec.new do |s| |
我们运行ls -lh | awk '{print $9}',ChartboostSDK目录的结构显示如下:
1 |
CBAnalytics.h |
除了两个.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 ...
随机推荐
- mooc-IDEA 快速通过mapper定位到XML
intellij 快速通过mapper定位到XML 方法一:在线安装Mybatis插件 安装完毕,重启IDEA生效! =>Mapper文件效果 点击向下键头即可定位到XML文件中的具体SQL = ...
- 重置Docker里的gitlab管理员用户密码
1.docker ps 找出容器的唯一标识 2.docker exec -it ad9b8c3e20f0 /bin/bash 进入Docker容器运行环境 3.开始重置gitlab管理员用户密码 ...
- 关于iphone 6s 页面功能不能正常使用问题
6s 不支持es6 语法.去除es6语法后页面功能正常使用!!!!!
- <每日一题> Day7:CodeForces-1166C.A Tale of Two Lands (二分 + 排序)
原题链接 参考代码: #include <cstdio> #define mid ((l + r) / 2) #include <algorithm> using namesp ...
- [2019杭电多校第八场][hdu6667]Roundgod and Milk Tea
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6667 题目大意是说n个班级,每个班级有ai人和bi杯茶,每个人只能喝其他班的茶并且只能喝一杯.问最多有 ...
- kafka+hbase+hive实现实时接入数据至hive
整体架构: 项目目标,实现配置mysql,便可以自动化入湖至Hive,入湖至Hive方便后期数据分析. 首先在Mysql中配置好kafka的topic.Server以及入户表等信息,java程序初始化 ...
- 利用 Python 进行批量更改文件后缀
利用 Python 进行批量更改文件后缀 代码 import os files = os.listdir('.') for file_name in files: portion = os.path. ...
- 25、前端知识点--webpack篇之面试考点
前端面试之webpack篇 https://blog.csdn.net/sinat_17775997/article/details/78122999 关于webpack的面试题 随着现代前端开发的复 ...
- asp.net core2.1认证和授权解密
来源:https://www.cnblogs.com/pangjianxin/p/9372562.html asp.net core2.1认证和授权解密 本篇文章翻译自:https://digital ...
- winsows CMD及Linux命令大全 欢迎补充
CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统版本) CMD命令锦集 1. gpedit.msc-----组策略 2. sndrec32--- ...