[iOS开发]Carthage安装和使用教程

7,027 阅读4分钟

一 Carthage简单介绍

主页: github.com/Carthage/Ca…
作者: Justin Spahr-Summers等
版本: 0.31
目标: 用最简单的方式来管理Cocoa第三方框架
性质: 第三方框架管理工具(类似于cocoapods) Carthage为用户管理第三方框架和依赖,但不会自动修改项目文件和生成配置,把对项目结构和设置的控制权交给用户。
原理 自动将第三方框架编程为Dynamic framework(动态库)
限制 仅支持iOS8+。它只支持框架,所以不能用来针对iOS8以前的系统版本进行开发

二 Carthage的安装和使用

  • 直接下载Carthage.pkg安装包,安装运行 Carthage.pkg下载

  • 如果使用的XCode为7.0+版本,那么也可以使用下面的方法来安装

1 安装homebrew*

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2 升级brew

$ brew update

3 使用brew来安装

$ brew install Carthage

installCarthage.png

4 查看版本

   $ Carthage version

三 Carthage的使用

1 先进入到项目所在文件夹

 $ cd 项目路径

2 创建一个空的Carthage文件

$ touch Cartfile

3 编辑cartfile文件,例如要安装AFN框架

GitHub库可在cartfile文件添加以下内容,指定GitHub的关键字:

github  "AFNetworking/AFNetworking" 

或者填写其他git源,指定git关键词:

git "https://github.com/AFNetworking/AFNetworking.git"

4 保存并关闭cartfile文件,使用cartfile安装框架

$ Carthage update --platform iOS

注: 不追加参数会编译出 iOS、OSX、tvos多个framework

installAFN.png

注2: 如果失败的话,先用Xcode打开你的项目,Product > Scheme > Manage Schemes 在新窗口中,勾选上 Shared,点击 Close。在终端再次执行这个命令

Shared.png

5 打开Carthage 查看生成的文件目录

$ open Carthage

Carthage文件夹目录.png

  • 执行安装依赖命令后的文件夹结构
# 执行文件多出三个文件

Cartfile # 存放需要安装的依赖列表

Cartfile.resolved # 自动生成的依赖关系文件,需提交到git
# 确保提交的项目可以使用完全相同的配置与方式运行启用, 跟踪项目当前所用的依赖版本号

Carthage # 自动生成的Carthage目录 (不需要提交到 Git)
# 目录下有两个文件夹:Build  Checkouts
# Build  存放编译后的文件,包括 iOS/Mac/tvOS/watchOS对应的framework
# Checkouts  存放从git拉取的依赖库源文件

6 配置项目

打开项目,点击Target -> Build Phases -> Link Library with Libraries选择Carthage/Build目录中要导入的framework

addFramework.png

7 添加编译的脚本

(该脚本文件保证在提交归档时会对相关文件和dSYMs进行复制)

(1)点击Build Phases,点击“+” -> New Run Script Phase

NewRunScriptPhase.png

(2)添加添加脚本 /usr/local/bin/Carthage copy-frameworks

(3)添加"Input Files" $(SRCROOT)/Carthage/Build/iOS/AFNetworking.framework

runScript.png

8 在项目中使用第三方库

#import <AFNetworking/AFNetworking.h>

其它:

卸载Carthage:$ brew uninstall Carthage

更新第三方框架: 更新多个框架:修改Cartfile文件,并重新执行 $ carthage update 更新某个框架:$ carthage update 具体的框架名称

carthage update  # 修改了Cartfile文件,并重新编译
carthage update  Alamofire  # 仅更新Alamofire框架
carthage update --platform ios  # 仅编译iOS平台的framework
carthage bootstrap    # 从本地库重新编译依赖

四 Carthage优缺点

Carthage的优点

  1. 使用了CocoaPods的项目是高度集成的,而Carthage更灵活强调尽可能将任务委托给Xcode和Git。
  • CocoaPods在使用中会自动创建和更新workspace、依赖和Pod项目并进行整合;

  • Carthage在使用中不需要创建和集成相应的workspace和project,只需要依赖打包好的framework文件即可。

  • 总结一下,CocoaPods的方法更容易使用,而Carthage更灵活且对项目没有侵入性。

  1. CocoaPods相对来说功能要比Carthage多很多,因此也更复杂,而CocoaPods配置简单项目干净。

  2. CocoaPods有一个中心仓库,而Carthage是去中心化的,没有中心服务器也就避免了可能因中心节点错误而带来的失败,即Carthage每次配置和更新环境,只会去更新具体的库,时间更快。

  3. Carthage 管理的依赖只需编译一次,项目干净编译时,不会再去重新编译依赖,节省时间

  4. 与 CocoaPods 无缝集成,一个项目能同时拥有 CocoaPods 和 Carthage

Carthage的不足

  • 仅支持 iOS8 +
  • 它只支持框架,所以不能用来针对 iOS 8 以前的系统版本进行开发
  • 支持的 Carthage 安装的第三方框架和依赖不如 CocoaPods 丰富
  • 无法在 Xcode 里定位到第三方库源码

五 Carthage的工作过程说明

  • 1.创建一个Cartfile文件,在该文件中列出您想使用的框架
  • 2.运行Carthage,获取并编译Cartfile文件中列出的框架
  • 3.把框架的二进制文件配置到项目中

六 关于版本指定

Carthage 支持以下几种版本指定方法:

>= 1.0 代表 “最低 1.0版本”
~> 1.0 代表 “表示使用版本1.0以上但是低于2.0的最新版本,如1.5, 1.9”
== 1.0 代表 “必须是 1.0 版本”

"some-branch-or-tag-or-commit"指定一个 Git 对象 (任何被 git rev-parse 允许的) 如果没有版本要求,任何版本的依赖是允许的。

版本好的兼容性是根据语语义化版本控制决定的。这意味着任何大于或等于1.5.1版本,但小于2.0,将认为与1.5.1“兼容”。

Cartfile示例

# Require version 2.3.1 or later 最低2.3.1版本
github "ReactiveCocoa/ReactiveCocoa" >= 2.3.1

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

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

# Use the latest version  使用最新版本
github "jspahrsummers/xcconfigs"

# Use the branch  使用git分支
github "jspahrsummers/xcconfigs" "branch"

# Use a project from GitHub Enterprise  使用一个企业项目,在 "development" 分支
github "https://enterprise.local/ghe/desktop/git-error-translations"

# Use a project from any arbitrary server, on the "development" branch  使用一个私有项目,在 "development" 分支
git "https://enterprise.local/desktop/git-error-translations2.git" "development"

# Use a local project   使用一个本地的项目
git "file:///directory/to/project" "branch"

七 Git 中忽略不需要提交到版本库的文件与文件夹

修改 .gitignore 文件,增加忽略 Carthage 文件夹就行了:

#Carthage
Carthage

八 Carthage的其他命令

 archive           Archives built frameworks 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
 outdated          Check for compatible updates to the project's dependencies
 update            Update and rebuild the project's dependencies
 version           Display the current version of Carthage