资讯专栏INFORMATION COLUMN

Cocoa依赖包管理工具

Sanchi / 1744人阅读

摘要:和区别是一个深度依赖包管理器,所以默认情况下会自动创建并且更新工作空间和所有的依赖,包括之类,使用命令编译框架,但是需要用户自己整合到工程中,当然实际上这个整合工作非常非常方便。

Carthage

iOS 作为目前最大的移动端开发平台,开发者的生态环境也是非常繁荣。在 iOS 早期时候,开发者想要使用第三方库就必须将其源代码引入工程,或者说是以 git submodule 的形式引入项目,但是这样子非常繁琐,并且还不能让多个项目公用,所以就有了著名的 iOS 依赖管理工具 CocoaPods。确实 CocoaPods 非常好用,而且已经成为了事实上的依赖管理标准,不但有丰富的第三方库支持,有关其的文档也是非常全,但是今天笔者想在这里安利一款全新的 iOS 包管理工具 Carthage
笔者在以前很少使用 CocoaPods,并不是说它不好,而是 CocoaPods 对项目的侵入程度太高了,CocoaPods 不仅牵扯到了 Xcode 工作空间,而且还会使用一系列的脚本来保证自动化的第三方库整合,当然,如果是曾经自己手动整合第三方库为静态库的朋友应该很清楚 CocoaPods 到底做了什么,但是对于一个新人来说,恐怕根本不明白 CocoaPods 到底做了什么,而且出现了编译链接问题也无法自行解决,而 Carthage 的设计哲学则非常符合笔者的想法,低耦合、更灵活,使用现代化的 xcodebuild 工具编译成第三方整合库。Swift 写成,更容易贡献代码。

Carthage 和 CocoaPods 区别

CocoaPods 是一个 Cocoa 深度依赖包管理器,所以默认情况下会自动创建并且更新 Xcode 工作空间和所有的依赖,包括 target 之类,Carthage 使用 xcodebuild 命令编译框架,但是需要用户自己整合到工程中,当然实际上这个整合工作非常非常方便。对于用户来说,CocoaPods 更加易于使用,但是 Carthage 更加灵活和低侵入性。
CocoaPods 在自己的 README 说明中这样讲

… to improve discoverability of, and engagement in, third party open-source libraries, by creating a more centralized ecosystem.

这也是两者的最大区别,一个是中心化生态系统,一个是去中心化包管理器。也就是说,不存在任何服务器为 Carthage 服务,这也避免了维护的工作和中心服务器的宕机。当然,第三方库的查找也更困难了,一般只能通过 Github 的搜索功能。

Carthage 工作流程

基本的工作流程如下:

创建一个 Cartfile 并且列出需要使用的框架。

运行 carthage,用于获取和编译每个列出的框架。

拖动编译后的 .framework 二进制文件到你的 Xcode 工程。

非常简单对吧,不过经过实际测试,还有一种办法就是把 Carthage 编译的 Framework 路径加入到 Build Setting 中的 Framework Search Path

安装 Carthage

在 Xcode7.x 版本,你可以使用 Homebrew 命令安装 carthage 工具

> brew update & brew install carthage

不过需要注意的是,现在 Carthage 只能支持动态框架,也就是动态链接库,只能在 iOS8 及以后版本使用。

项目添加框架 新手起步 为 OS X 项目编译

创建一个包含了第三方框架列表的 Cartfile

运行 carthage update。这将会获取依赖到 Carthage/Checkouts 文件夹并且编译所有的框架。

在的应用程序的目标 General 设定标签页的 Embedded Binaries 节,从拖动并且放置你想要的框架。

另外,你可能需要复制调试符号信息和崩溃报告在 OS X上。

在应用程序 Build Phases 设定选项卡,点击 "+" 号并且选择 "New Copy FIles Phase"。

点击 "Destination" 下拉菜单并且选择 "Products Directory"。

对你需要的框架,拖动并且放置相应的 dSYM 文件。

为 iOS、tvOS 或 watchOS 编译

创建一个包含了第三方框架列表的 Cartfile

运行 carthage update。这将会获取依赖到 Carthage/Checkouts 文件夹并且编译所有的框架。

在应用程序目标 General 设定选项卡的 Linked Frameworks and Libraries 节,从 Carthage/Build 拖动并且放置需要的框架。

在应用程序 Build Phases 设置选项卡,点击 "+" 号并且选择 "New Run Script Phase"。创建一个包含下列内容的运行脚本。

/usr/local/bin/carthage copy-frameworks

并且将想要使用的框架放置在 "Input Files",例如:

$(SRCROOT)/Carthage/Build/iOS/Box.framework
$(SRCROOT)/Carthage/Build/iOS/Result.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
Cartfile

cartfile 目前只支持两种形式,一种是 Github 的形式,一种是 Git 的形式

github "ReactiveCocoa/ReactiveCocoa" # GitHub.com
github "https://enterprise.local/ghe/desktop/git-error-translations" # GitHub Enterprise

git "https://enterprise.local/desktop/git-error-translations2.git"
版本需求

Carthage 支持几种版本需求

>= 1.0 - 至少是 1.0 版本

~> 1.0 - 兼容 1.0 版本的版本

== 1.0 - 就是 1.0 版本

"some-branch-or-tag-or-commit" - 针对指定的 Git 对象

相关文件 Cartfile.private

想要使用 Carthage 管理的框架,但是不想要将这些依赖放在父工程

Cartfile.resolved

在运行 carthage update 命令后,一个名为 Cartfile.resolved 的文件将被创建在 Cartfile 的同一目录。这个文件精确指定了依赖的版本,并且列出了所有的依赖,这个文件应当提交到版本控制系统中,确保任何人都能构建同样的工程。

Carthage/Build

使用 carthage build 命令后就会创建这个文件夹,并且包含了所有的二进制框架和调试信息。

Carthage/Checkouts

使用 carthage checkout 以后就会创建的文件夹,里面包含了所有的依赖的源代码,并且将会被 carthage build 命令使用。

.gitignore
Carthage.checkout
Carthage.build

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/16130.html

相关文章

  • iOS 学习资料整理(上)

    摘要:看到一份很赞的学习资料,由于文章字数限制,分两篇分享原文学习资料整理这份学习资料是为初学者所准备的旨在帮助初学者们快速找到适合自己的学习资料节省他们搜索资料的时间使他们更好的规划好自己的学习路线更快的入门更准确的定位的目前所处的位置该文档会 看到一份很赞的IOS学习资料,由于SF文章字数限制,分两篇分享 原文 iOS 学习资料整理 这份学习资料是为 iOS 初学者所准备的, 旨在帮助...

    church 评论0 收藏0
  • 【超齐全】iOS 学习资料整理

    好赶货,收藏。原文iOS 学习资料整理 这份学习资料是为 iOS 初学者所准备的, 旨在帮助 iOS 初学者们快速找到适合自己的学习资料, 节省他们搜索资料的时间, 使他们更好的规划好自己的 iOS 学习路线, 更快的入门, 更准确的定位的目前所处的位置. 该文档会持续更新, 同时也欢迎更多具有丰富经验的 iOS 开发者将自己的常用的一些工具, 学习资料, 学习心得等分享上来, 我将定期筛选合...

    Flands 评论0 收藏0
  • iOS 学习资料整理

    摘要:这份学习资料是为初学者所准备的旨在帮助初学者们快速找到适合自己的学习资料节省他们搜索资料的时间使他们更好的规划好自己的学习路线更快的入门更准确的定位的目前所处的位置该文档会持续更新同时也欢迎更多具有丰富经验的开发者将自己的常用的一些工具学习 这份学习资料是为 iOS 初学者所准备的, 旨在帮助 iOS 初学者们快速找到适合自己的学习资料, 节省他们搜索资料的时间, 使他们更好的规划好自...

    everfly 评论0 收藏0
  • 七款Debug工具推荐:iOS开发必备的调试利器

    摘要:本文介绍了七款诊断调试工具,可以从可以帮助我们对代码界面等进行调试。调试是开发过程中必不可少的重要一环。这是一家专注于工具开发的公司,其创始人曾就职于和。是一款集调试测试于一身的网络服务,而且支持等多种语言。 在开发应用的时候,我们会碰到各种各样的bug,我们想要更好地了解到底发生了什么。然而不可预期的调试工作,总会浪费我们大量时间。本文介绍了七款诊断调试工具,可以从可以帮助我们对代码...

    Dongjie_Liu 评论0 收藏0
  • UIView初识

    摘要:从运行时的角度来看,即使用一个对象来控制这片区域里面内容的渲染和交互的事件。事件处理每一个都是响应者,它可以处理定义的所有事件。在系的继承层次中可以看出,继承自,这也赋予了它事件处理能力。 UIView,也即User Interface View,就是用户界面的意思。毫无疑问,这是与用户关系最密切的一层,也是产品狗们真正关心的地方,所以,对UIView的掌握在很大程度上决定着一个程序...

    Maxiye 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<