`
啸笑天
  • 浏览: 3434673 次
  • 性别: 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 使用说明

相关推荐

Global site tag (gtag.js) - Google Analytics