`
啸笑天
  • 浏览: 3462611 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

非侵入性的Carthage包管理工具

 
阅读更多

 

 

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"
如果是OSX项目则把末尾的iOS改为Mac。


 
这样就不需要这个拖动操作了:把我们需要的framework添加到我们的工程中。

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.

  1. On your application target’s “Build Phases” settings tab, click the “+” icon and choose “New Copy Files Phase”.
  2. Click the “Destination” drop-down menu and select “Products Directory”.
  3. For each framework you’re using, drag and drop its corresponding dSYM file.

拷贝 debug symbols 来调试和报告 crash

  1. 在工程的 target-> Build Phases 选项下,点击 “+” 按钮,选择 “New Copy Files Phase”.
  2. 点击 “Destination” 下拉菜单,选择 “Products Directory”.
  3. 针对每个使用的 framework,拖拽它们的 dSYM 文件。

当调试信息被拷贝到 built products 目录,Xcode 在断点处将符号化调用堆栈。也可以使其深入到第三方代码中去。

当归档你的应用来提交到 AppStore 或者 TestFlight,Xcode 也会拷贝这些文件到应用的.xcarchive bundle 的 dSYMs 子目录。

如果编译出错,请检查:可以在Build Settings中,找到Strip Debug Symbol During Copy这个选项,确保这个选项的值设置为NO。这个编译选项是指定在 Copy 符号文件的时候是否对符号表进行处理,有些xcode版本默认值是YES

  • 大小: 270.9 KB
  • 大小: 48.5 KB
  • 大小: 5.8 KB
  • 大小: 40.3 KB
分享到:
评论
4 楼 啸笑天 2016-07-14  
@AlexDenisov , are you talking about keeping fat frameworks and tweaking only the application an extension projects?

Do you know which flags exactly should be used?

STRIP_INSTALLED_PRODUCT
STRIP_STYLE = all
Anything else?

https://github.com/Carthage/Carthage/issues/188
3 楼 啸笑天 2016-04-28  
http://tutuge.me/2016/04/10/summary-of-code-organization/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io  总结一些iOS项目中组织代码的方法
2 楼 啸笑天 2016-04-28  
http://www.cnblogs.com/haiq/archive/2012/12/26/2833746.html
Git 的 .gitignore 配置
1 楼 啸笑天 2016-04-28  
http://devtian.me/2015/08/11/translate-carthage-readme/
(译)Carthage 使用说明

相关推荐

    Carthage,iOS/OS X项目的依赖管理

    1. **无侵入性**:Carthage不对你的Xcode项目进行任何修改,它只会在你的项目目录下创建一个`Carthage`子目录,用于存放依赖库的源代码和编译后的框架。这使得Carthage非常适合那些不喜欢CocoaPods集成方式的开发者...

    Carthage.zip

    1. **非侵入式**:Carthage不会修改你的Xcode项目文件,这意味着你仍然可以完全控制你的项目结构。 2. **并行构建**:由于每个依赖库都是单独编译的,Carthage可以充分利用多核处理器,加速构建过程。 3. **更少的...

    swift-SYKeyboardTextField-是一个轻巧简单非侵入式的键盘附随输入框

    5. **易集成**:通过CocoaPods或Carthage等依赖管理工具,可以轻松地将`SYKeyboardTextField`添加到项目中,并遵循Swift的模块化编程原则。 在`KeyboardTextField-master`这个压缩包中,通常会包含以下内容: 1. `...

    张忻正丨B站-iOS工程模块化实践与优化

    而Carthage是iOS和Mac平台下的依赖管理工具,用于解决项目依赖的自动化,尤其在模块化开发中起到关键作用。持续集成(Continuous Integration)是一种软件开发实践,开发人员频繁地将代码集成到主干,每次集成都通过...

    swift-BulletinBoard-一个能生成和管理显示在屏幕底部卡片界面的iOS库

    7. **集成与使用**: 要在项目中使用 BulletinBoard,开发者需要通过 CocoaPods 或者 Carthage 等依赖管理工具进行集成。在导入库之后,遵循提供的指南配置和初始化,然后就可以在代码中轻松调用其功能。 8. **社区...

    TSMessages-master

    TSMessages 库的设计理念是提高用户体验,通过在屏幕顶部快速滑入并随后淡出的动画效果,以非侵入性的方式传达信息。这种方式不会中断用户的当前任务,使他们能够继续在应用中无缝地浏览和操作。与传统的模态视图...

    ios-NNNavigationBar无侵入平滑过渡.zip

    1. **导入库**:将 `NNNavigationBar-master` 文件夹中的源代码导入到项目中,或者通过 CocoaPods 或 Carthage 等依赖管理工具进行安装。 2. **配置导航栏**:在需要实现过渡效果的 UIViewController 中,使用 ...

    iPhone上的Toast

    这种轻量级的反馈方式不会打断用户的交互流程,而是以一种非侵入性的方式提供信息。在Android中,Toast的实现是内置的,而在iOS中,由于原生SDK并未提供直接的Toast组件,开发者通常需要自定义视图来实现类似的功能...

    ios-page-manager.zip

    1. **安装**:可以通过CocoaPods、Carthage等依赖管理工具,或者直接将源代码导入项目来安装。 2. **初始化**:在适当的地方初始化Page Manager实例,通常是在应用程序的启动代码或者特定视图控制器中。 3. **配置**...

    便捷iOS开发的各种类库.zip

    9. **状态管理**: Redux和Vuex的灵感来源,如ReSwift和Fluxible,可以帮助开发者更好地管理应用的状态,保持代码的整洁和可维护性。 10. **性能优化**: 工具如Instruments可以检测内存泄漏、性能瓶颈,Optimizing ...

    swift-SANotificationViews一组自定义通知横幅

    7. **代码使用**:在项目中集成SANotificationViews,可能需要通过CocoaPods或Carthage等依赖管理工具。然后,调用其提供的API来创建和显示通知。 通过理解和使用像SANotificationViews这样的库,开发者可以提高...

    swift-AddressPickerViewExample省市区三级联动AddressPickerView

    本项目"swift-AddressPickerViewExample"专注于一个特定的UI控件——省市区三级联动的AddressPickerView,旨在帮助开发者以简洁高效的方式集成地址选择功能,降低对项目的侵入性。 AddressPickerView是iOS中常见的...

    Gifu:使用 Swift 实现的高性能 Gif 支持库.zip

    1. 添加库:首先,你需要将 Gifu 通过 CocoaPods 或 Carthage 等依赖管理工具添加到项目中。 2. 创建视图:在你的代码中,创建一个 UIImageView 或 UIView,并设置其类型为 Gifu 扩展的类(如 `GifuUIImageView` 或 ...

    AspectSwift.zip

    1. 引入Aspects库:在项目中导入Aspects库,可以通过CocoaPods或Carthage进行管理。 2. 注册切面:在你想要拦截的方法上调用`+ (void)aspect_hookSelector:(SEL)selector withOptions:(AspectOptions)options using...

    ios-XDMicroJSBridge.zip

    现代的CocoaPods或Carthage等依赖管理工具也可以用来引入库,但根据提供的信息,这个库似乎是一个独立的文件系统依赖。 2. **基本使用**: XDMicroJSBridge的使用非常直观。在Objective-C中,我们首先需要初始化一...

    MoyaCarthage:为迦太基优化的Moya网络抽象层

    Carthage的优势在于它的轻量级和不侵入性,不会对项目的目录结构造成影响,而且在编译时只引用所需的库,减少了编译时间。 **MoyaCarthage的特性** 1. **针对Carthage优化**:MoyaCarthage是为了解决在Carthage...

    Swift的框架和库

    对于需要跨平台支持的情况,SwiftPM(Swift Package Manager)和CocoaPods、Carthage等依赖管理工具可以帮助整合各种框架和库。 总的来说,Swift的框架和库构成了一个庞大的生态系统,为开发者提供了丰富的资源和...

    swift-CFStatusBarHUD一个简单易用的HUD指示器框架

    总的来说,CFStatusBarHUD是一个强大的工具,能够帮助开发者轻松地在Swift应用中创建直观、非侵入式的用户反馈机制,提高应用的可用性和用户体验。它的易用性和灵活性使其成为许多iOS开发者首选的HUD解决方案。

Global site tag (gtag.js) - Google Analytics