文明是建立在道路,桥梁,运河,下水道,管线,电线和光纤这些基础设施之上的。只要设计和施工得当,它们可以帮助社会成倍的发展。

唯一的问题就是可扩展性。
不管是在一个新的区域容纳上百万家庭还是整合大量的开发者到新的语言环境中去,挑战都是相同的。
在Objective-C的情况下, CocoaPods提供了一个绝佳的整合合作开发的工具,并且在快速发展的开发社区中起到了一个集结点的作用。
本周的NSHipster,我们将通过讨论CocoaPods的过去,现在以及将来,一起庆祝0.33版本( 具有里程碑意义)的发布。
接下来的对CocoaPods起源的历史回顾比较冗长,如果你只在乎技术细节,点此直接跳过。
回望
在Objective-C在它存在的前20年左右几乎鲜为人知。NeXT和后来的OS X作为一个边缘平台,只拥有一个相对较小的用户和开发者社区。像所有的社区一样,本地用户小组,邮件列表和网站该有的都有,但是开源合作开发缺很少见。诚然,开源在那时也只处于起步阶段,但是Objective-C却从未有过类似于CPAN (the Comprehensive Perl Archive Network)的组织。所有人除了能从Redwood和Cupertino拿到SDK(或者在论坛搜寻一下可用的代码)以外,剩下的问题只能靠自己解决。
Objective-C和iPhone
这种情况一直持续到了2008年的夏天,当iPhone OS开始对第三方开发者开放的时候。几乎一夜之间,Objective-C从无人问津变的炙手可热。上百万开发者的涌入,给这门语言注入了新鲜的血液。
就在此时,GitHub 也刚刚发布,并且开始通过新的分布式合作开发方式改变我们对开源的认知。
一大批开源项目开始涌现,例如ASIHTTPRequest和Facebook的Three20。这些早期的库和框架主要是用来填补iPhone OS 2.0和3.0开发中遇到空白,并且在后续的OS迭代中慢慢被遗弃或取代,但是它们突破了每个开发者“单打独斗”的局面。
在这波新的开发者中,那些来自Ruby背景的对 Objective-C 起来了很大的影响。Ruby作为Perl的精神继承者,有一个类似于CPAN的包管理器: RubyGems
为什么受Ruby的影响这么大?我的理论是:Ruby是在 Rails 2005年发布1.0版本的时候开始流行起来。假设创业公司的平均寿命在1.5到2.5年之间,那么此时第一批厌倦Rails的开发者正好可以跳上移动开发的大船上。
就在Objective-C开源开发渐入佳境之时,代码分发的痛点开始显现:
缺乏框架,iOS的代码虽然可以被打包成静态库,但是配置和同步分发却成了一个艰巨的任务。
另外一个思路是用Git Submodules把源码直接放入项目。但是链接框架和配置生成环境的繁琐也使得这种方法也没有好到哪里去,尤其是当 ARC和 non-ARC的代码需要分开的时候。
进入CocoaPods时代
CocoaPods是由 Eloy Durán于2011年8月12日创建。
在Bundler和RubyGems的启发下,CocoaPods被设计成即能处理库之间的依赖关系,又能自动下载并且配置好所需要的库。试想一下 开发只有松散文档编制的Xcode项目的难度,CocoaPods的存在简直就是奇迹。
另一个早先的决定就是利用 central Git repository作为所有库的总数据库。虽然这带来了一些运筹上的顾虑,好在GitHub能够提供一个稳健的平台,帮助团队在后续的迭代中,开发出更好的工具链。
时至今日,CocoaPods已经壮大拥有14个核心开发人员和多达 5000个开源项目。绝大部分项目都是来自于Objective-C开源社区,我们应该感谢每一个参与其中的开发者。
使用CocoaPods
制作和使用CocoaPods库都十分简单,往往几分钟就能配置完毕。
想获取最新的官方教程,请 前往此处。
安装CocoaPods
CocoaPods可以方便地通过RubyGems安装,打开Terminal,然后键入以下命令:
  
  1. $ sudo gem install cocoapods
就这么简单,现在你应该可以开始使用pod命令了。
如果你使用Ruby版本管理器,如 rbenv,你可能需要运行以下指令来重新链接shim的二进制文件(例如:$ rbenv rehash)。
管理相关性
一个相关性管理器可以将一系列的软件需求转化为具体的标签,然后下载并且整合进入相关的项目。
申明需求可以自动化整个项目配置,这也是软件开发的 最佳实践之一,无论是在任何语言中。**甚至你不使用第三方库,CocoaPods仍然是一个管理代码相关性的绝佳工具。**
Podfile
Podfile这个文件是用来用来申明项目代码相关性的,正如 Bundler的Gemfile,或者 npm的package.json
cd进入.xcodeproj文件所在的目录,通过以下命令来创建一个Podfile
  
  1. $ pod init
Podfile
  
  1. platform :ios, '7.0'
  2. target "AppName" do
  3. end
你可以申明需要不同版本的库,大部分情况下,申明到minor或者patch版本就足够了
  
  1. pod 'X', '~> 1.1'
CocoaPods遵循 语意化版本规范。
对于那些不在CocoaPods公共Git仓库中的库,你可以用任何一个Git, Mercurial或者SVN仓库取代,并且还可以指定具体的commit, branch或者tag。
  
  1. pod 'Y', :git => 'https://github.com/NSHipster/Y.git', :commit => 'b4dc0ffee'
一旦所有的相关性都申明完毕,你可以使用以下指令来安装所需要的库:
  
  1. $ pod install
安装过程中,CocoPods会使用递归来分析所有的需求,并且建立一个代码相关性的图,最后将Podfile序列化为Podfile.lock
比如,如果两个库都需要使用 AFNetworking,CocoaPods会确定一个同时能被这两库使用的版本,然后将同一个安装版本链接到两个不同的库中。
CocoaPods会创建一个新的包含之前安装好的静态库Xcode项目,然后将它们链接成一个新的libPods.a target。你原有的项目将会依赖这个新的静态库。一个xcworkspace文件会被创建,从此之后,你应该只打开这个xcworkspace文件来进行开发。
反复使用pod install命令,只会让CocoaPods重复以上步骤,重新安装这些库。所以,当你需要升级它们时,请使用以下命令:
  
  1. $ pod update
试着使用CocoaPod
try是一个及其实用但又鲜为人知的CocoaPods命令,通过它你能够在安装一个库之前,先试用一下。
你只需要在try后面加上任意一个CocoaPods公共库的名称,就能试用它了!
  
  1. $ pod try Ono
建立自己的CocoaPod
作为Objective-C软件分发实际上的标准,CocoaPods几乎是所有开源项目的标配,如果你想让你的项目被大家很方便地使用。
诚然,这会提高一点点你分享项目的门槛,但是,好处是显然易见的。你花几分钟创建一个.podspec文件可以节省下其他开发者无数的时间。
规范
.podspec文件作为CocoaPods的一个独立单元,包含了名称,版本,许可证,和源码文件等所有信息。
官方指南中有许多信息和范例
以下是NSHipsterKit.podspec
  
  1. Pod::Spec.new do |s|
  2. s.name     = 'NSHipsterKit'
  3. s.version  = '1.0.0'
  4. s.license  = 'MIT'
  5. s.summary  = "A pretty obscure library.
  6. You've probably never heard of it."
  7. s.homepage = 'http://nshipster.com'
  8. s.authors  = { 'Mattt Thompson' =>
  9. 'mattt@nshipster.com' }
  10. s.social_media_url = "https://twitter.com/mattt"
  11. s.source   = { :git => 'https://github.com/nshipster/NSHipsterKit.git', :tag => '1.0.0' }
  12. s.source_files = 'NSHipsterKit'
  13. end
一旦把这个.podspec发布到公共数据库中,任何想使用它的开发者,只需要在Podfile中加入如下声明即可:
Podfile
  
  1. pod 'NSHipsterKit', '~> 1.0'
.podspec文件也可以作为管理内部代码的利器:
  
  1. pod 'Z', :path => 'path/to/directory/with/podspec'
发布CocoaPod
CocoaPods 0.33中加入了 Trunk服务。
虽然一开始使用GitHub Pull Requests来整理所有公共pods效果很好。但是,随着Pod数量的增加,这个工作对于spec维护人员 Keith Smiley来说变得十分繁杂。甚至一些没有通过$ pod lint的spec也被提交上来,造成repo无法build。
CocoaPods Trunk服务的引入,解决了很多类似的问题。CocoaPods作为一个集中式的服务,使得分析和统计平台数据变得十分方便。
要想使用Trunk服务,首先你需要注册自己的电脑。这很简单,只要你指明你的邮箱地址(spec文件中的)和名称即可。
  
  1. $ pod trunk register mattt@nshipster.com "Mattt Thompson"
至此,你就可以通过以下命令来方便地发布和升级你的Pod!
  
  1. $ pod trunk push NAME.podspec
已经发布Pod的作者可以通过 几个简单的步骤来声明所有权。
展望
CocoaPods例证了一个社区的凝聚力。在短短的几年内,Objective-C社区让我们所有人都引以为傲。
CocoaPods仅仅是众多Objective-C基础设施的一部分,还有诸如 Travis CI, CocoaDocs和 Nomad这些非常好的生产力工具。
虽然整个社区的未来不会一帆风顺,不管怎样,让我们怀着信念,尽可能的提供建设性的意见。我们更应该互相帮助,乐于分享,共同努力推动整个社区的进步!
CocoaPods已经是Objective-C不可或缺的一部分,它只会越来越强大!
来源: nshipster中文站

CocoaPods的时代相关推荐

  1. automake生成静态库文件_基于CocoaPods的组件化原理及私有库实践

    轮子为什么会存在 智人能在残酷的进化大战中存活下来,原因之一就是智人懂得将知识沉淀成外物,辅助彼此之间的合作,从而使得整个群体产生了规模效应,即1+1>2的效果. 从一个角度上说,石器时代是基于 ...

  2. oracle 开链,欧链OracleChain开启Dapps应用新时代

    2018年6月3日,欧链OracleChain在北京举办产品发布会,正式发布了移动端的一站式EOS生态平台--PocketEOS.该产品不仅支持EOS钱包功能,也是基于EOS的Dapp应用商店.欧链联 ...

  3. 打包图片上传cdn_紧抓5G新时代机遇 又拍云创新发展CDN行业

    浙江在线8月30日讯(浙江在线记者 石潇俊 通讯员 赵明杰)快要过去的这个夏天,"爆爆令"和"爆爆现"笼络了无数少女的心,<乐队的夏天>成就了亚文化 ...

  4. 云计算时代的数据库运行

    云计算时代的高可用数据库是可扩展.容错且与任何私有云或公共云兼容的数据库实例.它们旨在提供业务连续性,而不会因任何类型的硬件或网络故障而导致用户体验的影响.其核心设计原则是消除任何单点故障,并提供平稳 ...

  5. cocoapods更新

    使用sudo gem install cocoapods更新提示: ERROR: While executing gem ... (Errno::EPERM) Operation not permit ...

  6. cocoaPods安装、更新第三方库

    pod install 换成 pod install --verbose --no-repo-update pod update 换成 pod update --verbose --no-repo-u ...

  7. api数据加密的定义_云原生时代,如何构建开箱即用的数据加密防护?

    随着产业互联网的发展,越来越多的企业将业务上云,开始使用更具可靠性和扩展性.更加易于维护的云原生应用.云原生技术以其高效稳定.快速响应的特点驱动引领企业的业务发展,帮助企业构建更加适用于云上的应用服务 ...

  8. CocoaPods私有库搭建的记录

    前言 随着项目的业务增加以及马甲包进度的跟进,一些重复的独立业务以私有库的方式引入到项目中对于项目进度的开发就显得越发的迫切了,本文主要记录自己搭建私有库时的整个流程,以防后面再次搭建时忘记,方便自己 ...

  9. CocoaPods远程私有库

    上一篇(让自己的开源项目支持CocoaPods集成)介绍了将自己开发的框架代码发布到Cocoapods,全球的开发者都可以通过pod search搜索到我们的框架代码以及通过pod install进行 ...

最新文章

  1. 洛谷 P2335 [SDOI2005]位图
  2. php中$GLOBALS
  3. Couchbase 集群小实践
  4. 面试官:前端跨页面通信,你知道哪些方法?
  5. BZOJ4012 [HNOI2015]开店
  6. css3 伪类选择器
  7. docker发布spring cloud应用
  8. mysql-connector-java 6.x配置问题解决方案
  9. Linux下安装Python3.6(可用)
  10. 80. Session
  11. kali xss漏洞扫描工具使用教程
  12. c#获取中国三级行政区域划分(省市县)以及县级经纬度demo
  13. 投入产出实例matlab,基于MATLAB的投入产出分析
  14. 初识Cura3D打印开源项目
  15. LDF转Excel;LDF转位定义;Excel转LDF;Excel转位定义;MatrixCreat(四)之工具使用
  16. Eagle电路板绘制
  17. 记一次USB声卡设计开发
  18. 作为一名合格的大学生,如何在B站愉快的学习
  19. Error in v-on handler: “TypeError: this.$refs.popup.isShow is not a function“
  20. Lesson 10

热门文章

  1. 海康大华摄像头接入国标流媒体平台显示设备离线问题解决
  2. 提前了解:亚马逊入驻费用
  3. java实验报告金陵科技学院_金陵科技学院java
  4. 目前有哪些方式训练一个领域的大语言模型? Beyond One-Model-Fits-All A Survey of Domain Specialization LLM
  5. MFC使用NOTIFYICONDATA将程序隐藏到托盘区
  6. 前端--最具文艺范的程序员
  7. ctfshow XSS
  8. 外贸销售人员与客户沟通实用建议
  9. 大海贼探险物语机器人_大航海探险物语攻略大全 职业、宠物选择配色攻略汇总...
  10. C# 实现卡布列克数