Cocoa 新的依赖管理工具:Carthage

Cocoa 新的依赖管理工具:Carthage

说到 iOS 的依赖管理工具,大家一定首先想到的是 CocoaPods ,不错,CocoaPods 确实是一个很好依赖管理工具,已然成为了 Cocoa 依赖管理的标准,丰富的支持库、文档等等,CocoaPods 相关的文章有很多,这里就不一一赘述了。

今天要介绍的是一款新的依赖管理工具,名曰 “Carthage”,名字有点难理解,简单方便,完全独立,不修改 XCode 项目文件或配置。

简介

我之前很少用 CocoaPods,很大一部分原因就是因为麻烦,仅个人感觉,需要牵扯 XCode 项目文件;而 Carthage 就很好的解决了我之前的烦恼,轻耦合,更灵活;使用 xcodebuild 工具来编译依赖项目成二进制
Framework,再引入到项目中去。

Carthage 是由 Swift 语言写的,只支持动态框架,只支持 iOS8+。

Carthage 的大致工作流程如下:

  1. 创建一个 Cartfile 文件,写好你要哪些依赖库
  2. 执行 carthage update 命令拉取源代码并编译为
    Framework
  3. 把编译后的 .framework 拖到项目中去即可
    (官方是这么说的,不过更好的办法是把 Carthage 编译的 Framework 路径加入到 Build Setting 中的 Framework Search Path,详情见后文)

执行 update 命令后,你的项目目录结构大致如下:

Cartfile
Cartfile.resolved
Carthage
    - Build
        - iOS
            - Alamofire.framework
        - Mac
            - Alamofire.framework
    - Checkouts
        - Alamofire
        - ...
xxx.xcodeproj
...
  • Cartfile 文件用来标注你需要哪些依赖库,对应版本或者 Git 分支 (需要提交到 Git)
  • Cartfile.resolved 文件用来跟踪项目当前所用的依赖版本号,为了保持多端开发一致 (需要提交到 Git)
  • Carthage 文件夹用来存放依赖库的源文件和编译后的文件 (不需要提交到 Git)

其实工作方式有点和 Cocoapods 大致相似,只不过 Cartfile 多了一个自动编译过程且与 Project 耦合更低,Cartfile 利用 xcode-select 命令来编译 Framework,如果你想用测试版的 Xcode 进行编译,执行下面这条命令,把 xcode-select 的路径改为另一版本 Xcode 就可以了

sudo xcode-select -s /Applications/Xcode-beta.app/Contents/Developer

其中 Xcode-beta.app 就是对应你的
Xcode 版本,你也可以改成其他版本的 Xcode

注:写完才发现,原来 Xcode -> Preferences -> Locations 中已经有切换 Command Line Tools 版本的选项...

安装

推荐使用 Homebrew 进行安装,简单方便,也便于维护:

brew install carthage

安装前最好先 update 一下,之前我就是因为没有 update,结果安装了老版本的 Carthage

brew update

使用

添加 Cartfile 文件

类似于 CocoaPods 中的 Podfile 文件,把需要的包写进去就行了,具体可参阅官方说明,如:

# 必须最低 2.3.1 版本
github "ReactiveCocoa/ReactiveCocoa" >= 2.3.1

# 必须 1.x 版本
github "Mantle/Mantle" ~> 1.0    # (大于或等于 1.0 ,小于 2.0)

# 必须 0.4.1 版本
github "jspahrsummers/libextobjc" == 0.4.1

# 使用最新的版本
github "jspahrsummers/xcconfigs"

# 使用一个私有项目,在 "development" 分支
git "https://enterprise.local/desktop/git-error-translations.git" "development"

暂只支持 GitHub 和 git 源,在执行 carthage
update
 命令后会在根目录创建一个 Cartfile.resolved 文件,这个文件是生成后的依赖关系,不能修改。

引入 Framework

在项目中引入依赖的 Framkework,只需要在对应 Target 中的 Build Setting 中的 Framework Search Path 项加入以下路径,Xcode 便会自动搜索目录下的 Framework:

$(SRCROOT)/Carthage/Build/iOS

如果是 OSX 项目则把末尾的 iOS 改为 Mac

在 Git 中忽略

如果不想把 Carthage 的依赖库 push 到 Git 仓库里,则修改 .gitignore 文件,增加忽略 Carthage 文件夹就行了:

#Carthage
Carthage

可用命令

archive :
Archives a built framework into a zip that Carthage can use
bootstrap : Check out
and build the project's dependencies
build : Build the project's
dependencies
checkout : Check out
the project's dependencies
copy-frameworks : In
a Run Script build phase, copies each framework specified by a SCRIPT_INPUT_FILE environment variable into the built app bundle
fetch : Clones or fetches
a Git repository ahead of time
help : Display general
or command-specific help
update : Update and rebuild
the project's dependencies
version : Display the
current version of Carthage

时间: 2024-11-02 21:58:28

Cocoa 新的依赖管理工具:Carthage的相关文章

漫谈依赖管理工具:从Maven,Gradle到Go

为什么要有依赖管理工具? 谈依赖管理之前,我们先谈谈为什么要有依赖管理工具这东西. 我们学了一种编程语言,然后写了个"Hello World",然后宣称自己学了一门语言,这时候确实不需要关心依赖问题. 然而,当你要写一个稍微复杂点的应用,那怕就是留言板这样的,需要读写数据库,就需要依赖数据库驱动,就会遇到依赖管理的问题了. 再进一步,你写了一个库,想共享给别人使用,更需要了解依赖管理的问题. 当然,如果项目足够简单,你可以直接将依赖方的源码放置在自己的项目中,或者将依赖库的二进制文件(

Gradle for Android 第三篇( 依赖管理 )

Gradle for Android 第三篇( 依赖管理 ) 依赖管理是Gradle最闪耀的地方,最好的情景是,你仅仅只需添加一行代码在你的build文件,Gradle会自动从远程仓库为你下载相关的jar包,并且保证你能够正确使用它们.Gradle甚至可以为你做的更多,包括当你在你的工程里添加了多个相同的依赖,gradle会为你排除掉相同的jar包. 作者:佚名来源:Android开发中文站|2017-04-10 17:35  移动端  收藏   分享 依赖管理 依赖管理是Gradle最闪耀的地

Ubuntu包管理工具新立得图形化前端指南

新立得是http://www.aliyun.com/zixun/aggregation/13835.html">Ubuntu的包管理工具 apt, 的图形化前端.它结合了图形界面的简单操作和 apt-get 命令行工具的强大功能.您可以使用新立得安装.删除.配置.升级软件包,对软件包列表进行浏览.排序.搜索以及管理软件仓库或者升级整个系统.您可以进行一些系列操作形成操作队列,并一起执行它们.新立得会提示您可能的依赖关系(您所选择的软件包所需的额外软件包)以及您所选择的软件包与系统中已经安装

Web前端开发工具——bower依赖包管理工具_javascript技巧

Bower 是 twitter 推出的一款包管理工具,基于nodejs的模块化思想,把功能分散到各个模块中,让模块和模块之间存在联系,通过 Bower 来管理模块间的这种联系. 包管理工具一般有以下的功能: a)注册机制:每个包需要确定一个唯一的 ID 使得搜索和下载的时候能够正确匹配,所以包管理工具需要维护注册信息,可以依赖其他平台. b)文件存储:确定文件存放的位置,下载的时候可以找到,当然这个地址在网络上是可访问的. c)上传下载:这是工具的主要功能,能提高包使用的便利性.比如想用 jqu

JS新包管理工具yarn和npm的对比与使用入门_javascript技巧

这篇文章会通过以下几个方面介绍yarn的: yarn对比npm解决了什么问题,带来哪些便利. 获取yarn的正确姿势 yarn的使用入门(介绍一些常用的命令 个人使用心得 yarn对比npm的优点 根据官方文档yarn具有6大优点 1.离线模式 yarn会有一个缓存目录,会缓存以前安装过的软件包,再次安装时就不必从网络下载了,大大加速安装速度. 这一点很重要,npm 饱受诟病的一点就是,每次安装依赖,都需要从网络下载一大堆东西,而且是全部重新下载,工程多的时候比较烦人. 我司部署node项目,是

为Redhat操作系统增加APT软件包管理工具

一. 简介 redhat采用了RPM软件包管理系统,RPM软件包管理系统具有强大的编译安装功能,但是由于历史原因,RPM软件包管理系统对软件之间的依存关系没有内部定义,造成安装RPM软件时经常出现令人无法理解的软件依赖问题. debian系统则基于apt(Advanced Packaging Tool)工具进行软件包管理,可以自动解决并安装倚赖软件包,因此debian linux被认为是最容易管理和升级的系统,apt工具也被认为是目前最好的软件包管理工具之一.为了解决redhat包管理系统的致命

如何在CentOS 7.x上安装Zephyr测试管理工具

测试管理指测试人员所需要的任何的所有东西.测试管理工具用来记录测试执行的结果.计划测试活动以及汇报质量控制活动的情况.在这篇文章中,我们会向你介绍如何配置 Zephyr 测试管理工具,它包括了管理测试活动需要的所有东西,不需要单独安装测试活动所需要的应用程序,从而降低测试人员不必要的麻烦.一旦你安装完它,你就看可以用它跟踪 bug 和缺陷,和你的团队成员协作项目任务,因为你可以轻松地共享和访问测试过程中多个项目团队的数据. Zephyr 要求 安装和运行 Zephyr 要求满足以下最低条件.可以

《VMware vSphere设计(原书第2版)》——2.7 管理工具简介

2.7 管理工具简介 将ESXi host部署并配置后,可以用几个管理工具来监控和维护它.我们将在下一章节详细介绍一些工具.现在先简要介绍下都有哪些工具以及如何用这些工具来管理ESXi host.工具的功能会直接影响到vSphere环境设计,以及它的维护方案和hypervisor架构. 2.7.1 host管理工具 有很多host管理工具都可以不通过vCenter来直接管理host.这些在首次配置host.排查问题,以及vCenter发生故障的时候很有用. vSphere客户端 Windows

Docker 管理工具的选择:Kubernetes 还是 Swarm?

本文讲的是Docker 管理工具的选择:Kubernetes 还是 Swarm?[编者的话]选择Kubernetes 或者 Swarm 就像在将 Linux 桌面发行版的范围缩小到两个后选出一个最喜欢的.哪个更满足你的需要如何才是决定因素. [3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站]本次培训围绕基于Docker的CI/CD实战展开,具体内容包括:持续集成与持续交付(CI/CD)概览:持续集成系统介绍:客户端与服务端的 CI/CD 实践:开发流程中引入 CI.CD:Gitl