https://github.com/Carthage/Carthage
说起 iOS 开发的包管理,大家就不由得会想起 CocoaPods, 它确实是一个强大的工具。但这次咱们来关注另外一个包管理工具 Carthage,如果说 CocoaPods 像一个航母,一应俱全,坚实稳固。那么 Carthage 就像一艘巡洋舰,机动灵活,攻击迅速。
Carthage 和 CoaoaPods 的区别
CoaoaPods 是一套整体解决方案,我们在 Podfile 中指定好我们需要的第三方库。然后 CocoaPods 就会进行下载,集成,然后修改或者创建我们项目的 workspace 文件,这一系列整体操作。
相比之下,Carthage 就要轻量很多,它也会一个叫做 Cartfile 描述文件,但 Carthage 不会对我们的项目结构进行任何修改,更不多创建 workspace。它只是根据我们描述文件中配置的第三方库,将他们下载到本地,然后使用 xcodebuild 构建成 framework 文件。然后由我们自己将这些库集成到项目中。Carthage 使用的是一种非侵入性的哲学。
所谓非侵入性哲学,其实可以这么理解。我想使用过 CocoaPods 的同学们,可能都会经历过这样一种体验,尤其是在最开始使用它的时候 - 我们精心在 Podfile 中配置好我们所需的第三方库,并且按照 CocoaPods 的指定步骤,输入命令,然后等待这些第三方库乖乖的集成到项目中。但总有那么几次,会事与愿违,比如运行完 pod update 命令,看似一切顺利,workspace 也成功的更新了。但当我们真正编译构建项目的时候,某些莫名其妙的错误出现了,类似于这种:
diff: /../Podfile.lock: No such file or directory
diff: /Manifest.lock: No such file or directory
遇到这种问题后,我们只能经过一系列的搜索,然后解决这些问题。本来我们使用包管理,就是为了集成第三方库的时候更加方便,迅速。结果处理这些包管理的错误却又浪费了我们很多时间。
如果使用 Carthage 我们就不必让这些问题困扰了,因为 Carthage 本身不会对我们的项目结构进行任何改动,类似 CocoaPods 产生的这些附加问题,就不会发生了。
但是 Carthage 就没有 CocoaPods 的集成操作能力了,作为开发者,必须在 Carthage 将第三方库构建完成后,手动的关联到项目中。
另外 Carthage 除了非侵入性,它还是去中心化的,它的包管理不像 CocoaPods 那样,有一个中心服务器(cocoapods.org),来管理各个包的元信息,而是依赖于每个第三方库自己的源地址,比如 Github。这样也是有利有弊,好处就是我们对包管理不再依赖中心服务器,不会受中心服务器信息量和稳定性的限制(尤其是在我们这里的网络访问状况问题),弊端嘛,就是我们想查找第三方库的时候,也没有一个中心服务器来帮助我们进行索引,而是必须从网络上自行查找。
两种哲学,产生了两个产品 Carthage 和 CocoaPods 各有优劣,如何选择,就要看各位自己的需求了。
http://swiftcafe.io/2015/10/25/swift-daily-carthage-package/
----------------------------------------------------------------------------------------使用-----------------------------------------------------------
1.使用Homebrew安装Carthage之前,先对其进行更新,不然可能会安装到比较老的版本。
sudo brew update
2.安装Carthage
- 方法1
sudo brew install carthage - 方法2
下载安装Carthage.pkg - 方法3
下载Carthage,运行make install。
3.查看及升级Carthage版本
- 查看:carthage version
- 升级:brew upgrade carthage
4.卸载Carthage
sudo brew uninstall carthage
5.创建空的Cartfile文件
touch Cartfile
6.使用Xcode命令打开Cartfile文件
open -a Xcode Cartfile
7.添加依赖库
例:github "Alamofire/Alamofire" ~> 3.0
- 版本的含义:
~>3.0:表示使用版本3.0以上但是低于4.0的最新版本,如3.5, 3.9。
==3.0:表示使用3.0版本。
>=3.0:表示使用3.0或更高的版本。
如果你没有指明版本号,则会自动使用最新的版本。
8.保存并关闭Cartfile文件并执行carthage update
执行update命令后,你的项目目录结构大致如下:
- Cartfile:文件用来标注你需要哪些依赖库,对应版本或者 Git 分支(需要提交到 Git)。
- Cartfile.resolved:文件用来跟踪项目当前所用的依赖版本号,为了保持多端开发一致(需要提交到 Git)。
- Carthage:文件夹用来存放依赖库的源文件和编译后的文件(不需要提交到 Git,可以修改.gitignore文件,增加忽略 Carthage 文件夹就行了:#Carthage Carthage)。
备注:
Cartfile利用xcode-select命令来编译Framework,如果你想用其他版的Xcode进行编译,执行下面这条命令,把xcode-select的路径改为另一版本Xcode就可以。
sudo xcode-select -s /Applications/Xcode-beta.app/Contents/Developer
9.引入Framework
1. 设置Xcode自动搜索Framework的目录
Target—>Build Setting—>Framework Search Path—>添加路径"$(SRCROOT)/Carthage/Build/iOS"
General->Linked Frameworks and Libraries,点击加号添加
2. 添加编译的额外脚本
Target—>Build Phases —>”+”—>New Run Script Phase—>添加脚本"/usr/local/bin/carthage copy-frameworks"
3. 添加文件
Input Files—>添加路径"$(SRCROOT)/Carthage/Build/iOS/库名.framework"
10,debug第三方代码:
Additionally, you'll need to copy debug symbols for debugging and crash reporting on OS X.
- On your application target’s “Build Phases” settings tab, click the “+” icon and choose “New Copy Files Phase”.
- Click the “Destination” drop-down menu and select “Products Directory”.
- For each framework you’re using, drag and drop its corresponding dSYM file.
拷贝 debug symbols 来调试和报告 crash
- 在工程的 target-> Build Phases 选项下,点击 “+” 按钮,选择 “New Copy Files Phase”.
- 点击 “Destination” 下拉菜单,选择 “Products Directory”.
- 针对每个使用的 framework,拖拽它们的 dSYM 文件。
当调试信息被拷贝到 built products 目录,Xcode 在断点处将符号化调用堆栈。也可以使其深入到第三方代码中去。
当归档你的应用来提交到 AppStore 或者 TestFlight,Xcode 也会拷贝这些文件到应用的.xcarchive
bundle 的 dSYMs 子目录。
如果编译出错,请检查:可以在Build Settings中,找到Strip Debug Symbol During Copy这个选项,确保这个选项的值设置为NO。这个编译选项是指定在 Copy 符号文件的时候是否对符号表进行处理,有些xcode版本默认值是YES
相关推荐
iOS/OS X项目的依赖管理,虽然CocoaPods使用起来方便,但Carthage更加灵活并且对现有项目没有太多的侵略性。
Carthage 集成AFN,封装的网络请求工具类,Carthage 集成AFN,封装的网络请求工具类
carthage安装包,下载后安装即可!只要是给下载不方便的各位使用。
Carthage.zip,一个简单的、分散的cocoa依赖关系管理器
Carthage, Cocoa的一个简单的,分散的依赖管理器 Carthage Carthage是向 Cocoa 应用程序添加框架的最简单方法。基本的工作流类似于下面这样:创建列出你希望在项目中使用的框架的 Cartfile插件。运行 Carthage,它...
有的项目也有用Carthage的,Carthage是一个比较新的依赖管理工具,是使用Swift语言开发的。CocoaPods是个老生常谈的话题。首先来看一下什么是CocoaPods,下方是CocoaPods官网上对CocoaPods的解释。上面大概意思是...
SwiftCrossPlatformFramework:教程,用于创建与Carthage和SwiftPM兼容的Swift跨平台框架
通过运行brew install carthage或选择其他安装方法来获取Carthage。 在您的.xcodeproj或.xcworkspace所在的目录中创建Cartfile。 在Cartfile中列出所需的依赖项。 一旦安装了迦太基,就可以开始向项目中添加框架。 ...
GitHub动作执行解决方法,因此Carthage无需M1架构即可构建依赖关系 用法 只需调用此操作即可,而不是直接通过迦太基进行呼叫。 使用action参数将所需的参数传递给迦太基调用。 name: Build on: [pull_request, push...
depo:轻松结合CocoaPods,Carthage和SPM
检查建筑$ carthage build --no-skip-current 使用上面的命令构建并检查Carthage/Build 。4. git 推送没问题? 然后提交您的更改并将其推送到 github。5. 标签单击发布并为您的提交添加新标签。6.完成与来自另一个...
迦太基的工作方式是将任务委派给Xcode和Git,并尽可能减少新概念,因此您可以继续使用已经熟悉的工具。 本讲座将解释什么是迦太基以及如何使用它,然后深入探讨激发该项目的残酷简单哲学。 我们还将比较迦太基和的...
下面小编就为大家分享一篇简陋的swift carthage copy-frameworks 辅助脚本代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Carting::oncoming_automobile:一个用于更新Carthage脚本阶段的简单工具
进步 展示了在第 17 课中使用 Carthage 安装 SVProgressHUD。
栖息地一个非常基本的WIP依赖管理器和Swift的构建工具。设置和构建Roost是自托管的,但还带有用于引导的Makefile。 git clone https://github.com/dirk/Roost.git# Fetch the dependenciescd Roost/vendor ; ...
部署目标-iOS 9.0 / Mac OS X 10.10 / tvOS 9.0 / watchOS 2.0 Xcode 10 斯威夫特4.2 依赖管理器-CocoaPods / Carthage / Swift Package Manager 自述文件迅捷格式危险文件/宝石文件/爵士乐Github模板(CODE_OF_...
使用Ai-Carthage,无需输入代码也无需任何编程先决条件即可创建android应用程序。 请在手机中安装MIT AI2 CompanionCARTHAGE.apk文件。 如有任何问题,请随时与我联系。 译者:ADEL KASSAH(adelkassah@gmail.com)
迦太基计划 迦太基计划(Project Carthage)是Roblox的一项利用,其灵感来自Code Lyoko 没什么特别的。 我正在从事这个项目... 是的,我很慢。