CocoaPods 好处?

  • 开发 iOS 项目不可避免地要使用第三方开源库,CocoaPods 的出现使得我们可以节省设置和更新第三方开源库的时间
  • 在引入第三方库时它可以自动为我们完成各种各样的配置,包括配置编译阶段、连接器选项、甚至是 ARC环境下的 -fno-objc-arc 配置等

Carthage 好处?

  • 通过Carthage可以将一部分不常变的库打包成framework,再引如到主工程,这样可以减少开发过程中的编译时间。
  • 可以将一些编译时间很长的库打包成framework。
  • 国内防火墙的缘故,有些库的下载慢到一定境界,这个时候,使用Carthage就是福音了。
  • 同时可以优化CI的编译、打包时间。

三、Carthage 和 CocoaPods 的不同之处:

CocoaPods (默认)自动建立和更新一个 Xcode workspace,用来管理你的项目和所有依赖。Carthage 使用xcodebuild 来编译出二进制库,剩下的集成工作完全交给开发人员。
CocoaPods 使用起来方便,Carthage 更加灵活并且对现有项目没有太多的侵略性。
CocoaPods 希望建立一个生态系统,可以更加方便的发现和集成第三方代码库。Carthage 希望变成一个去中心化的依赖管理系统,不提供中心化的项目列表,减少维护成本和单点失败的概率。不过这样给开发人员寻找项目带来不便。
CocoaPods 的项目需要配置 podspec 文件,包含了项目和第三方库的信息。Carthage 并不使用类似的配置文件,第三方库的依赖关系是通过 Xcode 项目来配置的。

http://kaaaaai.cn/articles/036.html

http://www.cocoachina.com/special/20160926/17635.html

CocoaPods是已存在很长时间的Cocoa依赖管理器, 那么为什么要创建Carthage呢?
1) CoaoaPods 是一套整体解决方案,我们在 Podfile 中指定好我们需要的第三方库。然后 CocoaPods 就会进行下载,集成,然后修改或者创建我们项目的 workspace 文件,这一系列整体操作。
2) 相比之下,Carthage 就要轻量很多,它也会一个叫做 Cartfile 描述文件,但 Carthage 不会对我们的项目结构进行任何修改,更不多创建 workspace。它只是根据我们描述文件中配置的第三方库,将他们下载到本地,然后用 xcodebuild 构建成 framework 文件。然后由我们自己将这些库集成到项目中。Carthage 使用的是一种非侵入性的哲学。

Carthage or CocoaPods? 3

CocoaPods 有如下优势: 

① 使用方便, 除编写 Podfile 以外其他几乎都是自动完成;
② 软件包数量多,主流支持;
③ 支持 iOS 8 Framework,当然也支持旧的静态编译.

但是 CocoaPods 作为一个有中心仓库的解决方案,缺点也比较明显:

1?? 每次更新环境都需要连接到中心仓库,比较耗时;
2?? 开发者使用比较简单,但是如果创建兼容 CocoaPods 的库,就会相对繁琐一些(尽管有了命令行);
3?? 每次干净编译都会把所有第三方库都重新编译一次

Carthage 的优势: 

① 使用 Carthage 的话,所有的第三方库依赖,除非是更新的需要,不然平常干净编译 Project,它是不需要再次编译的,大大加快平常编译及 Archive 的时间.
② 它是去中心化的,没有中心服务器. 这意味着每次配置和更新环境,只会去更新具体的库,而不会有一个向中心服务器获取最新库的索引这么个过程,如此又省了很多时间.
③  CocoaPods 无缝集成!一个项目可同时使用两套包管理工具, 当前 CocoaPods 管理主要 Framework 的配置下, 将少量其他 Framework 交给了 Carthage 管理, 二者可以和谐地共存.
④ 结构标准的项目天然就是 Carthage 库.

Carthage 的不足:

1?? 库依然不如 CocoaPods 丰富:尽管很多库不需要声明并改造就直接可以被 Carthage 用,但依然有大量 CocoaPods 能用的库不支持,我相信时间能解决这个问题;
2?? 只支持 Framework,所以是 iOS 8 Only了,随着时间推移,这个也不会是问题;
3?? 工具仍不完善:在使用过程中,发现它无法在一个结构复杂的项目中正确发现库(比如有 iOS, Mac demo + framework 的结构);
4?? 无法在 Xcode 里定位到源码:如果你在写代码过程中,想跳转到一个第三方库去看具体的实现,这是无法办到的,Carthage 的配置只能让你看到一个库的头文件

iOS - CocoaPods 和 Carthage 的比较的更多相关文章

  1. iOS -- CocoaPods

    CocoaPods 是什么? CocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具.CocoaPods 的项目源码在 GitHub( https://github.com/CocoaP ...

  2. iOS CocoaPods 版本安装问题

    今天安装salesforce中的pods,这是里面的podfile # Uncomment this line to define a global platform for your project ...

  3. iOS cocoapods升级及问题

    安装 安装RubyCocoaPods基于Ruby语言开发而成,因此安装CocoaPods前需要安装Ruby环境.幸运的是Mac系统默认自带Ruby环境,如果没有请自行查找安装.检测是否安装Ruby:$ ...

  4. iOS Cocoapods的pod install出现的某个错误 but they required a higher minimum deployment target.

    关于cocoapods的安装和使用的基本教程: http://my.oschina.net/vimfung/blog/182427?fromerr=j7l3DvCG   出现以下错误提示: Specs ...

  5. iOS - CocoaPods 第三方开源框架管理

    1.CocoaPods CocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具.CocoaPods 的项目源码在 Github 上管理.该项目开始于 2011 年 8 月 12 日,在这 ...

  6. iOS CocoaPods安装和使用图解

    Cocoapods安装步骤 1.升级Ruby环境 sudo gem update --system 如果Ruby没有安装,请参考 如何在Mac OS X上安装 Ruby运行环境 2.安装CocoaPo ...

  7. 最全Jenkins+SVN+iOS+cocoapods环境搭建及其错误汇总

    前言 持续集成是敏捷开发中重要的一部分,为保证新功能的开发,又保证旧功能的维护,从一个冲刺到下个冲刺.持续集成工具是我们保证开发和维护并行的护航者,现在流行的集成工具有很多,例如: 1.Jenkins ...

  8. iOS CocoaPods一些特别的用法 指定版本、版本介绍、忽略警告

    简介 介绍一些CocoaPods一些特别的用法 CocoaPods github地址 CocoaPods 官方地址 1. 指定第三方库版本 1. 固定版本 target 'MyApp' do use_ ...

  9. iOS.CocoaPods.0

    1. CocoaPods CocoaPods 是Objective-C (iOS and OS X) projects 的依赖管理器. A CocoaPod (singular) is a speci ...

随机推荐

  1. addEventListener()和removeEventListener()

    作用: addEventListener()与removeEventListener()用于处理指定和删除事件处理程序操作. 它们都接受3个参数:事件名.事件处理的函数和布尔值. 布尔值参数是true ...

  2. centos 中输入ifconfig 只有lo 没有eth0

    问题描述:linux中输入ifconfig命令,只有lo,没有eth0 解决方法: 1.进入/etc/sysconfig/network-scripts 目录,发现有ifcfg-eth0,即网卡(驱动 ...

  3. Firebird 列可空非空修改

    2018-12-04 至少到Firebird 3.0.4 已经添加了设置可空 和 非空的语法:如 -- 删除非空(设置为可空) ALTER TABLE TECH ALTER label drop NO ...

  4. Angular4 step by step.3

    1.Routes 路由模块 import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angul ...

  5. WPF MVVM 之理解(数据绑定)

    (申明:最近在做一个练习,写点东西,谨供参考.) 1.界面展示:其中的布局和样式就不说了,重点在MVVM架构和数据绑定(Model层使用EF(Entity Framework)实体框架,不做介绍). ...

  6. VMware下安装Linux(Centos)步骤

    VMware下安装Linux(Centos)步骤 准备步骤:(安装软件教程采用 VMware 9 .Centos6.5 为例) 启动VMware的画面 点击File--->New Virtua ...

  7. ASID 与 MIPS 中 TLB 相关

    ASID 为了提高TLB的性能,将TLB分成Global和process-specific.global 是指常驻在tlb中不会被刷出的,例如内核空间的翻译,process-specific 是指每个 ...

  8. Python入门-深浅拷贝

    首先我们在这里先补充一下基础数据类型的一些知识: 一.循环删除 1.前面我们学了列表,字典和集合的一些操作方法:增删改查,现在我们来看一下这个问题: 有这样一个列表: lst = ['周杰伦','周润 ...

  9. html标签篇(2)

    上次讲到<a>标签,并没有细说a标签用法. <!DOCTYPE html> <html lang="en"> <head>  < ...

  10. ASP.NET 页面之间传递值的几种方式

    1.使用QueryString,  如....?id=1; response. Redirect().... 2.使用Session变量 3.使用Server.Transfer4.Applicatio ...