【译】Carthage的使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【译】Carthage的使用相关的知识,希望对你有一定的参考价值。
参考技术A Cathage 一直致力于成为给 Cocoa 应用添加框架最简单的方式。它的使用流程如下:
Cathage 帮你创建第三方依赖、提供二进制的 framework 文件,并且不会改变你的项目架构和创建。 Cathage 在你使用的过程中并不会修改的你工程文件和你的项目设置。
CocoaPods 是存在已久的 Cocoa 的第三方依赖管理方式,在此基础上为什么还要使用 Cathage ?
首先,CocoaPods 会自动为你的应用与第三方依赖创建和更新一个 Xcode workspace;Carthage 使用 xcodebuild 创建二进制 framework ,添加和使用这此框架是用户自己操作的。CocoaPods 使用上更简单,而 Carthage 更灵活,耦合性更低。
从 CocoaPods 的 README 可以看出它有以下的目标:
相反, Carthage 是一个非集中式的第三方管理工具。它在工程文件中没有集中的列表,这可以大大降低维护的难度,避免集中列表的一些错误导致的编译失败。然而,发现第三方框架也是一个麻烦的事情,用户必须要到 GitHub 的趋势页面去查找或者去类似的网站。
CocoaPods 的工程文件中一定要有 podspec 文件,在 podspec 文件中用户要填写元数据和它创建的方式。Carthage 用 xcodebuild 去创建第三方框架。它不会把你的第三方依赖放在一个单独的 workspace 中去管理,你写的第三方框架一定要包含自己的 Xcode 项目用来描述怎么去生成和使用。
总之,Carthage 的目标就是成为管理第三方框架第简单的工具,它可以在不使用 Xcode 的情况下完成它的任务,也不会让框架作者做额外的工作。但 CocoaPods 也确实提供了很多非常好而且 Carthage 介于成本考虑可能永远也不会有的功能。
安装 Carthage 有以下几种方法:
如果你安装了 Carthage ,你就可以为你的项目添加第三方框架了。注意 Carthage 只支持动态库,动态库只在 ios 8 及以上才支持(任意版本的 OS X 都支持动态库)。
针对 iOS, tvOS 或者 watchOS 的使用方法:
然后在 “Input Files” 中添加你要使用的框架的路径,比如:
当这些调试信息被复制到产品目录中, 无论你的应用停在哪个断点,Xcode 都能够 symbolicate 你的堆栈信息。这也能够让你用第三方的调试工具进行调试。
无论你的应用提交到 AppStore 还是打包测试,Xcode 都会复制这些文件到你应用的 .xcarchive 沙盒中 dSYMs 文件夹的子目录中。
如果你修改了 Cartfile 文件,或者你想使用第三方框架的最新版,只要再运行一次 carthage update 就行了。
如果你只是想更新某一个或者某几个,只要用空格隔开就行了,比如:
或者
Cartfile 是用来描述第三方框架的,它严格遵守 Ordered Graph Data Language 的语法,任何标准的 OGDL 工具都能解析它。
第三方框架声明分为两部分:基础部分和版本需求部分。
如果使用 GigHub 的仓库(GitHub.com 或者 GitHub Enterprise),使用时必须加入 github 关键字,比如:
其他 git 仓库要加 git 关键字,如下:
Carthage 支持以下几种版本声明:
如果没有版本声明,就代表任何版本都可以使用。
兼容性是根据语义化版本规范确定的,任何大于或者等于版本 1.5.1 小于版本 2.0 的,都被认定 兼容于 1.5.1。
但是根据语义化版本规范,任何 0.x.y 的版本都会在运行中崩溃,所以0.x 的版本没有遵守语义化版本规范,如果你定义了 0.1.1 的版本,那么 兼容的版本就是 0.1.2,而不是 0.2。
使用 carthage 的 RealmSwift 框架集成问题
【中文标题】使用 carthage 的 RealmSwift 框架集成问题【英文标题】:RealmSwift framework integration issue using carthage 【发布时间】:2017-04-21 02:00:35 【问题描述】:我已经使用 carthage 依赖工具集成了 RealmSwift 框架。
我按照以下步骤操作:
安装 Carthage 0.17.0 或更高版本
将 github "realm/realm-cocoa" "master" 添加到您的购物车文件中。
运行迦太基更新。要修改用于构建的 Swift 工具链,请通过 --toolchain 参数指定它。例如:
迦太基更新--toolchain com.apple.dt.toolchain.Swift_2_3
将 RealmSwift.framework 和 Realm.framework 从 Carthage/Build/ 中的相应平台目录拖到 Xcode 项目“常规”设置的“嵌入式二进制文件”部分。
iOS/tvOS/watchOS:在应用程序目标的“构建阶段”设置中 选项卡,单击“+”图标并选择“新建运行脚本阶段”。创建一个 运行脚本,内容如下:
/usr/local/bin/carthage 复制框架 并在“输入文件”下添加要使用的框架的路径,例如:
$(SRCROOT)/Carthage/Build/iOS/Realm.framework $(SRCROOT)/Carthage/Build/iOS/RealmSwift.framework
现在,
当我尝试构建我的项目时,我收到了这个错误:
使用 Swift 3.0 编译的模块无法在 Swift 2.3 中导入:Carthage/Build/iOS/RealmSwift.framework/Modules/RealmSwift.swiftmodule/x86_64.swiftmodule
我不知道是什么问题。
【问题讨论】:
【参考方案1】:来自Installation section in Docs:
--no-use-binaries
参数也是必要的,以避免 Carthage 提取预构建的 Swift 3.0 二进制文件。
所以第 3 步的命令应该是这样的
carthage update --toolchain com.apple.dt.toolchain.Swift_2_3 --no-use-binaries
(猜你在主项目中使用的是 Swift 2.3)
【讨论】:
我已经运行了这个脚本。但问题是在 carthage 文件中的代码是 github "realm/realm-cocoa" 和 github "ReactiveX/RxSwift" "rxswift-2.0" 所以这里的领域使用的是最新版本的 swift 而 rxswift 使用的是早期版本的 swift 所以我我无法构建我的项目。 您在项目中使用的 Swift 版本是什么?以上是关于【译】Carthage的使用的主要内容,如果未能解决你的问题,请参考以下文章