如何有效地传教

使用样式处理iOS依赖项

首先:什么是迦太基?
如果您到达此职位,则很可能您已经知道了,但是如果您没有,我很高兴您能成功! Carthage是用Swift编写的依赖项管理器 。 它建立了依赖关系并为您提供了二进制框架 ,但是您保留了对项目结构和设置的完全控制 ,Carthage不会自动修改项目文件或构建设置。

如果您想了解更多关于为什么要在其他替代品上使用迦太基以及如何开始使用它的信息,我建议您阅读雷·温德利希(Ray Wenderlich)的这篇文章,它不会出错。

3个简单步骤:

1.安装自制软件

2.运行

 酿造更新 

3.运行

 酿造安装迦太基 

(即使这看起来太多了,在Wolox,我们也有脚本来安装一些有用的东西,其中包括迦太基。)

另外,我们建议您按照本指南添加自动完成功能。

有时,迦太基会给您类似“请更新到最新的迦太基版本…”之类的消息
在这种情况下,您需要通过运行以下命令进行更新:

 酿造更新 
酿造升级迦太基

如果出现错误,则可以运行:

 酿造更新 
酿造重装迦太基

向项目添加第一个依赖项

有史以来第一次依赖吗? 只需按照以下步骤。

1.创建一个Cartfile和/或Cartfile.private文件。

Cartfile就像Gemfile,Dockerfile,Podfile以及其他所有文件一样。 在这里可以指定所需的依赖项及其兼容版本。

Cartfile.private就像一个Cartfile,但是对于不需要运行该应用程序的私有依赖项(例如,用于测试的依赖项)。

迦太基使用语义版本控制,请查看如何使用它。

2.运行以下命令[更改所用操作系统的平台]

 迦太基更新--no-use-binaries --platform iOS 

此后,将下载依赖项并将其存储在Carthage文件夹中。 还将生成一个Cartfile.resolved文件,该文件存储为每个依赖项下载的确切版本。

update命令将搜索满足您的版本限制的最新版本并下载。

3.将下载的框架添加到带有库链接二进制文件构建阶段

在列表中,您应该添加出现在Carthage / Builds / 文件夹中的所有.framework软件包。 在其中,您会找到在Cartfile中声明的依存关系以及它们自己的依存关系。

4.在每个具有依赖项的目标中都有一个“迦太基”运行脚本构建阶段[仅当您的项目不是框架时才需要执行此步骤]

在脚本中,您应该编写:/ usr / local / bin / carthage copy-frameworks。

在“ 输入文件”列表中,应使用以下命令添加出现在Carthage / Builds / 文件夹中并与所讨论的目标相关的所有.framework软件包: $(SRCROOT)/ Carthage / Build / / MyDependency .framework

在“ 输出文件”列表中,应使用以下命令添加出现在Carthage / Builds / 文件夹中并与所讨论的目标相关的所有.framework软件包: $(BUILT_PRODUCTS_DIR)/ $(FRAMEWORKS_FOLDER_PATH)/MyDependency.framework

在安装应用程序时,这将有助于在设备上安装所有框架。

5.添加“迦太基过时?” 在每个具有依赖项的目标中运行脚本构建阶段

在脚本中,编写:

  / usr / local / bin / carthage已过时--xcode-warnings 

我要做什么? CartfileCartfile.privateCartfile.resolved并更改为.xcodeproj文件。 不要提交Carthage文件夹,将其添加到.gitignore文件。

引导项目

团队一名成员添加了一个依赖项,然后每个人都使用它。

由于我们不提交Carthage文件夹,因为它会占用大量空间并且可以在本地复制它,因此我们拥有的信息是Cartfile (和/或Cartfile.private )以及Cartfile.resolved创建, 它指定了我们在所有内容上需要的版本。

要使用与我的队友相同的版本来引导依赖关系,我们要运行:

 迦太基引导程序--platform  --no-use-binaries --cache-builds 

甚至更好:

 迦太基引导程序-平台 --no-use-binaries --cache-builds 

(因此,您仅构建新的依赖关系,而将其他依赖关系保留下来,我们知道它们已经正确了)。

bootstrap命令将从Cartfile.resolved中获取项目中最后使用的版本。 这样,您可以确保如果它对您的队友有效,那么它将对您有效。

需要新的依赖关系吗?

让您的一个队友添加新的依赖关系,让另一个队友像上一节中那样引导它。

要添加新的依赖项,步骤几乎与添加第一个依赖项时相同:

  1. 将其添加到CartfileCartfile.private
 迦太基更新 --no-use-binaries --platform iOS 
  1. 将其添加到相关目标的链接二进制文件与库构建阶段
  2. 将其添加到相关目标的迦太基运行脚本构建阶段(在“ 输入文件”和“ 输出文件”部分中)
  3. 再次提交相关更改

更新项目及其依赖项

有时,我们有一个正在运行的项目,但是我们想对其进行更新,因此我们拥有所有最新功能。 这包括更新我们的依赖项。

在这种情况下,您可能想要更改在Cartfile (和/或Cartfile.private )中指定的版本,但是如果您只想与您的兼容最新版本,这样您的项目就不会失败,则不需要。

您只需要运行:

 迦太基更新--platform  --no-use-binaries --cache-builds 

(您可以根据需要为特定的依赖项运行相同的命令,并避免更新所有依赖项。)

删除依赖

这是迦太基最棘手的事情,因为没有命令。 您需要考虑到需要对依赖项和依赖项的依赖项执行下一步,依此类推。

  1. CartfileCartfile.privateCartfile.resolved中删除对此的 提及
  2. 链接二进制文件库删除阶段中将其删除
  3. 从“ 迦太基运行脚本构建”阶段的“ 输入文件”和“ 输出文件”列表中将其删除
  4. 提交变更

如果这些步骤之后您或您的队友运行了一些迦太基命令,并且出现了旧的依存关系,则应从“ 迦太基”文件夹中删除它的所有外观及其依存关系:

  • Carthage / Builds文件夹中的.framework.dSYM
  • Carthage / Checkouts文件夹中的Dependency文件夹

为什么会这样? 事情如何运作? 如果您想成为迦太基专家,那么最好的学习场所就是迦太基本身。 特别是如果您要为OS X进行构建,因为与我已经解释的内容有些细微的差异。

同时,在这里您对我们在本文中命名的内容有一些小的解释。

为什么要使用这些命令?

让我们回顾一下。

  • 更新 :搜索符合您的版本限制的最新版本并下载
  • bootstrap :在Cartfile.resolved文件中搜索项目中最后使用的版本并下载

这两个命令可以选择接收一个或多个依赖项的名称,因此Carthage仅适用于该依赖项。

每次运行这些命令都会看到什么? 这些命令具有以下阶段:

  1. 正在获取 :[仅存在于更新中]检查可用版本以决定使用哪个版本
  2. 检出&&克隆 :获取与该版本相关的提交,分支或标签,并在该提交之前克隆存储库(如果之前未在计算机中完成)。
  3. 构建 :构建.framework文件。 请记住,迦太基使用您当前的XCode版本进行构建,因此请注意团队的XCode版本。

迦太基不仅有更多的命令,请检查出来。

为什么使用这些标志?

让我们再回顾一下。

  • –platform :迦太基支持,OS X,iOS,tvOS和watchOS。 如果不指定所需的版本,它将为所有平台构建。 所以不要忘记它!
  • –no-use-binaries :该标志指示Carthage不使用GitHub中发布的预构建框架,而是从头开始构建。 如果需要更多时间,为什么我们要这么做? 因为预构建的框架并不总是适合您的项目(它已损坏,或者它是使用另一个Swift或XCode版本构建的),并且它们不支持逐步调试。 再次, 不要忘记它!
  • –cache-builds :如果您具有想要的完全相同的构建,而Carthage之前已经在您的项目中构建过,那么Carthage将使用该构建而不是重新构建。 因此,请尽可能使用它!

同样,迦太基还有更多标志可供使用,因此请检查一下。

还有问题吗? 希望我能回答他们,如果不能随意发表评论!

  • 为什么需要“过时的迦太基”? 构建阶段? 如果您有任何依赖关系与预期的依赖关系(Cartfile.resolved)不同步,XCode会警告您!
  • 为什么需要“迦太基”构建阶段? 安装应用程序时,二进制文件必须复制到设备上,并且由于它们不是工作空间的一部分,因此您需要手动告诉xcode,因此这可以为您解决。
  • 为什么需要填写“ 输入文件”和“ 输出文件”部分? 您需要告诉Carthage他应该复制哪些框架,因为这不是“您找到的所有框架”。 例如,如果您像在Wolox一样使用Quick and Nimble进行测试,则不希望它们与您的应用程序捆绑在一起,而只是与您的测试捆绑在一起。 因此,这就是为什么需要指定Input Files的原因输出文件确实是可选的,但是如果完成它,迦太基将能够进行优化并花费更少的时间在设备上安装框架,而我们只需要更少的构建时间!
  • 我的项目有CocoaPods ,我可以使用迦太基吗? 当然! 迦太基与CocoaPods完全兼容,因为它不会影响您的项目结构。
  • 我的项目是一个框架 ,我希望它与迦太基兼容,我该怎么办? 您只需要使您的主要计划成为共享计划(在“管理计划”视图中)。 就这么简单!
  • CI花费很长的时间来建立迦太基依赖项,因为我们没有将它们提交给仓库。 我能做什么? 这是真的。 因此,Wolox的合作伙伴开发了此Carthage Cache工具,以便您将刚刚构建的框架发布到AWS S3存储桶,CI可以从那里下载它们,而无需编译和构建依赖项。
  • 我为什么不提交Carthage文件夹? 您可以,但是您会迷惑您的存储库,其中包含许多您可以直接下载的二进制文件,因为所有真正必要的信息都在Cartfiles中 。 此外,迦太基会使用您正在使用的XCode构建依赖关系,因此,如果不同的队友具有不同的XCode,并且使用两者构建项目,则它们在每个本地计算机中可能具有不同的.frameworks,但具有相同的Cartfile 。 (尽管在大多数情况下,项目无法与不同的XCode一起使用,所以相同的依赖项版本不适用于不同的XCode。)