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
相关推荐
1. **无侵入性**:Carthage不对你的Xcode项目进行任何修改,它只会在你的项目目录下创建一个`Carthage`子目录,用于存放依赖库的源代码和编译后的框架。这使得Carthage非常适合那些不喜欢CocoaPods集成方式的开发者...
1. **非侵入式**:Carthage不会修改你的Xcode项目文件,这意味着你仍然可以完全控制你的项目结构。 2. **并行构建**:由于每个依赖库都是单独编译的,Carthage可以充分利用多核处理器,加速构建过程。 3. **更少的...
5. **易集成**:通过CocoaPods或Carthage等依赖管理工具,可以轻松地将`SYKeyboardTextField`添加到项目中,并遵循Swift的模块化编程原则。 在`KeyboardTextField-master`这个压缩包中,通常会包含以下内容: 1. `...
而Carthage是iOS和Mac平台下的依赖管理工具,用于解决项目依赖的自动化,尤其在模块化开发中起到关键作用。持续集成(Continuous Integration)是一种软件开发实践,开发人员频繁地将代码集成到主干,每次集成都通过...
7. **集成与使用**: 要在项目中使用 BulletinBoard,开发者需要通过 CocoaPods 或者 Carthage 等依赖管理工具进行集成。在导入库之后,遵循提供的指南配置和初始化,然后就可以在代码中轻松调用其功能。 8. **社区...
TSMessages 库的设计理念是提高用户体验,通过在屏幕顶部快速滑入并随后淡出的动画效果,以非侵入性的方式传达信息。这种方式不会中断用户的当前任务,使他们能够继续在应用中无缝地浏览和操作。与传统的模态视图...
1. **导入库**:将 `NNNavigationBar-master` 文件夹中的源代码导入到项目中,或者通过 CocoaPods 或 Carthage 等依赖管理工具进行安装。 2. **配置导航栏**:在需要实现过渡效果的 UIViewController 中,使用 ...
这种轻量级的反馈方式不会打断用户的交互流程,而是以一种非侵入性的方式提供信息。在Android中,Toast的实现是内置的,而在iOS中,由于原生SDK并未提供直接的Toast组件,开发者通常需要自定义视图来实现类似的功能...
1. **安装**:可以通过CocoaPods、Carthage等依赖管理工具,或者直接将源代码导入项目来安装。 2. **初始化**:在适当的地方初始化Page Manager实例,通常是在应用程序的启动代码或者特定视图控制器中。 3. **配置**...
9. **状态管理**: Redux和Vuex的灵感来源,如ReSwift和Fluxible,可以帮助开发者更好地管理应用的状态,保持代码的整洁和可维护性。 10. **性能优化**: 工具如Instruments可以检测内存泄漏、性能瓶颈,Optimizing ...
7. **代码使用**:在项目中集成SANotificationViews,可能需要通过CocoaPods或Carthage等依赖管理工具。然后,调用其提供的API来创建和显示通知。 通过理解和使用像SANotificationViews这样的库,开发者可以提高...
本项目"swift-AddressPickerViewExample"专注于一个特定的UI控件——省市区三级联动的AddressPickerView,旨在帮助开发者以简洁高效的方式集成地址选择功能,降低对项目的侵入性。 AddressPickerView是iOS中常见的...
1. 添加库:首先,你需要将 Gifu 通过 CocoaPods 或 Carthage 等依赖管理工具添加到项目中。 2. 创建视图:在你的代码中,创建一个 UIImageView 或 UIView,并设置其类型为 Gifu 扩展的类(如 `GifuUIImageView` 或 ...
1. 引入Aspects库:在项目中导入Aspects库,可以通过CocoaPods或Carthage进行管理。 2. 注册切面:在你想要拦截的方法上调用`+ (void)aspect_hookSelector:(SEL)selector withOptions:(AspectOptions)options using...
现代的CocoaPods或Carthage等依赖管理工具也可以用来引入库,但根据提供的信息,这个库似乎是一个独立的文件系统依赖。 2. **基本使用**: XDMicroJSBridge的使用非常直观。在Objective-C中,我们首先需要初始化一...
Carthage的优势在于它的轻量级和不侵入性,不会对项目的目录结构造成影响,而且在编译时只引用所需的库,减少了编译时间。 **MoyaCarthage的特性** 1. **针对Carthage优化**:MoyaCarthage是为了解决在Carthage...
对于需要跨平台支持的情况,SwiftPM(Swift Package Manager)和CocoaPods、Carthage等依赖管理工具可以帮助整合各种框架和库。 总的来说,Swift的框架和库构成了一个庞大的生态系统,为开发者提供了丰富的资源和...
总的来说,CFStatusBarHUD是一个强大的工具,能够帮助开发者轻松地在Swift应用中创建直观、非侵入式的用户反馈机制,提高应用的可用性和用户体验。它的易用性和灵活性使其成为许多iOS开发者首选的HUD解决方案。