zoukankan      html  css  js  c++  java
  • Carthage的安装和使用

    为什么要使用Carthage

    CocoaPods是已存在很长时间的Cocoa依赖管理器, 那么为什么要创建Carthage呢?

    1. CoaoaPods是一套整体解决方案,我们在Podfile中指定好我们需要的第三方库。然后CocoaPods就会进行下载,集成,然后修改或者创建我们项目的workspace文件,这一系列整体操作。
    2. 相比之下,Carthage就要轻量很多,它也会有一个叫做Cartfile描述文件,但Carthage不会对我们的项目结构进行任何修改,更不多创建 workspace。它只是根据我们描述文件中配置的第三方库,将他们下载到本地,然后用xcodebuild构建成framework文件。然后由我们自己将这些库集成到项目中。

    CarthageCocoapods比较

    Cocoapods有如下优点:

    ① 使用方便,除编写Podfile以外,其他几乎都是自动完成;
    ② 软件包数量多,主流支持;
    ③ 支持 iOS 8 Framework,当然也支持旧的静态编译;

    但是 CocoaPods 作为一个有中心仓库的解决方案,缺点也比较明显:

    ① 每次更新环境都需要连接到中心仓库,比较耗时;
    ② 开发者使用比较简单,但是如果创建兼容 CocoaPods 的库,就会相对繁琐一些(尽管有了命令行);
    ③ 每次干净编译都会把所有第三方库都重新编译一次;

    Carthage的优点:

    ① 使用Carthage的话,所有的第三方库依赖,除非是更新的需要,不然平常干净编译Project,它是不需要再次编译的,大大加快平常编译及Archive 的时间;
    ② 它是去中心化的,没有中心服务器. 这意味着每次配置和更新环境,只会去更新具体的库,而不会有一个向中心服务器获取最新库的索引这么个过程,如此又省了很多时间;
    CocoaPods无缝集成!一个项目可同时使用两套包管理工具, 当前 CocoaPods管理主要Framework的配置下, 将少量其他Framework交给了Carthage管理, 二者可以和谐地共存;

    Carthage的不足:

    ① 库不如CocoaPods丰富:尽管很多库不需要声明并改造就直接可以被 Carthage用,但依然有大量CocoaPods能用的库不支持;
    ② 只支持Framework,所以是 iOS 8 Only了,随着时间推移,这个也不会是问题;
    ③ 无法在Xcode里定位到源码:如果你在写代码过程中,想跳转到一个第三方库去看具体的实现,这是无法办到的,Carthage的配置只能让你看到一个库的头文件

    Carthage的安装

    1. 安装brew
      安装Carthage之前,需要安装brew,进入官网有详细安装步骤。

      • 获取Homebrew

        打开终端,输入以下命令:

        /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
        
      • 获取最新版本

        在终端输入命令:brew update

        注意:如果遇到Error: The /usr/local directory is not writable.错误,就执行以下命令sudo chown -R $(whoami):admin /usr/local,再更新。

      • 其他brew命令

        brew install git // 使用brew安装软件 
        brew uninstall wget // 使用brew卸载软件 
        brew search /wge*/ // 使用brew查询软件,其中/wge*/是个正则表达式,需要包含在/中 
        brew list // 列出已安装的软件 
        brew home // 用浏览器打开brew的官方网站 
        brew info // 显示软件信息 
        brew deps // 显示包依赖
        
    2. 安装Carthage

      安装brew之后,就可以安装Carthage了。
      在终端运行

      brew install carthage
      

      安装之后,查看版本

      carthage version
      

    Carthage的使用

    • 进入项目所在文件夹
    cd ~/路径/项目文件夹
    
    • 创建一个空的Cartfile文件
    touch Cartfile
    
    • 使用Xcode打开该文件
    open -a Xcode Cartfile
    
    • 编辑Cartfile(ps:本篇以导入RxSwift3.0为例子)
    github "ReactiveX/RxSwift" ~> 3.0
    
    • Cartfile格式说明

      • 依赖源Dependency origin

        Carthage支持两种类型的源,一个是github,另一个是git

        github表示依赖源,告诉Carthage去哪里下载文件。依赖源之后
        跟上要下载的库,格式为Username/ProjectName``git关键字
        后面跟的是资料库的地址,可以是远程的URL地址,使用git://,
        http://, ssh://,或者是本地资料库地址。

      • 依赖版本号Dependency Version

        告诉Carthage使用哪个版本,这是可选的,不写默认使用最新版本

        1. == 1.0 表示使用1.0版本
        2. = 1.0 表示使用1.0或更高的版本

        3. ~> 1.0 表示使用版本1.0以上但是低于2.0的最新版本,如1.1,1.7
    • 运行Carthage

      保存并关闭Carfile文件,回到终端,执行以下命令:

      carthage update
      

      当命令执行完毕,在Cartfile文件同级别的文件夹中生成一个名为
      Carthage文件夹和Cartfile.resolved文件。打开Carthage
      文件夹,可以看到一个文件夹Build

      图1

      注意:此处如果失败,可以查找相关解决办法。

    • 添加Frameworks到项目中

      点击项目名称->target->General,在最底部找到Linked Frameworks and Libraries。将上一步运行完之后的framework添加进来。
      图2

      目的是告诉Xcode链接这个framework到项目中,允许你在代码中使用。

      下一步选择菜单上的Build Phases,并添加一个新的Run Script,并添加以下命令:

    /usr/local/bin/carthage copy-frameworks
    

    点击Input Files下面的 + 号为每一个framework添加条目。

    $(SRCROOT)/Carthage/Build/iOS/RxSwift.framework
    $(SRCROOT)/Carthage/Build/iOS/RxBlocking.framework
    $(SRCROOT)/Carthage/Build/iOS/RxCocoa.framework
    $(SRCROOT)/Carthage/Build/iOS/RxTest.framework
    

    严格来讲,build phase对项目运行来说不是必须的,但是,这巧妙的解决了APP因为使用的frameworks包含二进制图像的iOS模拟器在提交APP Store时会被自动拒绝的问题。

    carthage copy-frameworks命令剔除了额外的框架。
    图3

    command + B编译项目,编译成功之后就可以愉快地使用了。

    import RxSwift
    import RxCocoa
    

    致谢

    如果发现有错误的地方,欢迎评论,谢谢!

    参考链接:Carthage

  • 相关阅读:
    Servlet接口实现类开发步骤
    Servlet概述
    Web服务器之HTTP协议与Tomcat服务器
    vant中van-picker选项插入图片
    排序算法-插入排序
    排序算法-快速排序
    排序算法-冒泡排序
    浅谈C#中Dictionary的实现。
    设计模式(23)-备忘录模式
    设计模式(22)-访问者模式
  • 原文地址:https://www.cnblogs.com/scott-mr/p/7233126.html
Copyright © 2011-2022 走看看