Bundler是iOS开发人员的好朋友

这是“ 一切都与工具有关 ”周期 的第2条 所以,

抽象

Bundler是一个简单而强大的Ruby gem依赖管理器。 等等,为什么标题为“ iOS developer”的Ruby? 答案很简单-两种最流行的iOS开发工具(cocoapods和fastlane)几乎完全用红宝石编写,并以Ruby gem的形式分发。 尽管您可能尚未使用fastlane,但您肯定已经听说过cocoapods,并且我99.99%的人肯定在开发过程中使用了cocoapods(或使用了它,但停止使用Carthage)。

所以,让我告诉您一些有关上述宝石的故事…

故事1

最近,我意识到我的机器上确实堆满了XCode游乐场:

其中一些是Swift独立的,另外一些则必须嵌入XCode项目中,因为它们应该与Alamofire,ReactiveSwift等3d方库一起使用。 我决定为此目的创建一个XCode项目“ PlaygroundsHost”,用我正在使用的最广泛使用的Pod填充它,然后将所有Playground缓慢移入该项目以将它们保持在单个位置。 将3d-party库集成到游乐场的流程很简单:

  1. 创建一个新项目。 关闭它。
  2. 在根文件夹中创建一个Podfile。 装上必要的豆荚(例如Alamofire)
  3. 运行pod install
  4. 运行open *.xcworkspace打开新创建的工作区
  5. 创建一个新的Playground,将其放置在项目文件夹中的某个位置(在我的情况下为$PROJECT_DIR/Playgrounds/MyPlayground.playground
  6. 将创建的Playground拖到XCode中。您将看到类似以下内容:
  7. Cmd + B构建所有Pod和项目
  8. 完成后,您现在可以在操场上使用import Alamofire了。

您的XCode Project Navigator选项卡如下所示:

好吧,我做到了……

  错误:无法查找符号: 
  __T09Alamofire7requestAA11DataRequestCAA14URLConvertible_p_AA10HTTPMethodO6methods10DictionaryVySSypGSg10parametersAA17ParameterEncoding_p8encodingAJyS2SGSg7headerstFfA3_ 

我很困惑,尝试使用Google问题,结果发现可可足类1.4.0和1.5.0之间的游乐场集成出现了问题。 我的本地版本是1.5.2。 一个人可以将可可豆的版本降级到某个版本吗? 绝对可以。 在项目之间进行切换时,是否值得一直上下使用版本? 绝对不…

故事2

我的开发人员几天前曾问我,我是否现在正面临一个奇怪的问题,即他正在CI配置上,而在导出存档时却遇到了“ Lottie.framework不支持配置文件”的构建失败。

我们聊了一会儿,猜测该问题可能与cocoapods更新及其Copy Frameworks构建阶段有关。

OTOH他使所有在本地计算机上运行的cocoapods 1.5.3都能顺利运行。 但是,他无法存档,因为代码签名身份位于远程CI机器上。 同样,他也没有远程访问权限来更改可可足类的远程版本,就像我在故事1中一样。

到了晚上,已经太晚了,无法联系对ssh工人计算机使用ssh的维护工程师。

故事3

大约一年前,我还遇到了CI存档构建的问题。 我们在一个只有几个工作人员的大型TeamCity集群上运行,我突然意识到,所有时间的构建都是在一个稍有不同的环境(cocoapods版本,fastlane版本)中的给定池中的随机工作者计算机上运行的,这很好,直到出现一些运输商问题向ITunesConnect提交构建时出现。

我也没有本地证书和规定,所以我最好的尝试是google,我发现几天前我的问题已在最新的fastlane中修复。 如何在没有ssh / vnc的情况下更新远程上的fastlane? 好…

打包机来了

将捆绑程序集成到您的开发/部署工作流程中非常简单,如ABC:

Gemfile在项目的根文件夹中创建一个Gemfile 。 用以下内容填充它:

  #Frozen_string_literal:是 
来源“ https://rubygems.org”
 宝石“ cocoapods”,“ 1.4.0” 

B.保存并运行bundle install 。 Bundler将生成Gemfile.lock ,其目的与cocoapods宇宙中的Podfile.lock相似。 实际上,Podfile / Podfile.lock和整个cocoapods概念都受到捆绑器和红宝石的强烈启发,因此从历史上讲,它们甚至更早就已经存在

C.从现在开始,使用命令bundle exec pod install ,而不仅仅是pod install

在根文件夹中另外两个文件和命令行中另外两个单词的交换中,您得到了什么?

  1. 跨所有环境(开发,登台,生产,无论您拥有什么)的一致性。 Bundler向您保证,在您的环境中运行的软件将在共享相同GemfileGemfile.lock远程环境中Gemfile.lock (因此,如果还不太明显,请将它们提交到您的版本控制中
  2. 简单的版本更改。 操场上不能使用可可足1.5.2吗?
    gem "cocoapods", "1.4.0", bundle install, bundle exec pod install, Cmd+B
    想检查项目是否对cocoapods-prerelease有效吗? gem "cocoapods", "1.5.0.beta.1" 。 最新的通道出现问题了吗? gem "fastlane", "2.94.0"
  3. 在进入p.1之前,您和您的项目伙伴不再需要使用来自不同cocoapods版本的pod安装差异,这仅仅是因为您共享Gemfile / Gemfile.lock并具有相同的开发环境。

使用简单的可配置和易于使用的工具,您现在可以控制版本,而不是它们来控制您。

使用显式版本控制还有其他好处,例如

  • 整个团队中版本更改的可见性。 无论谁进行更新,都会有明确的理由这样做,而其他人会检查更改
  • 合理的版本更改→更好地控制3d-party代码库,因为开发人员需要在更新之前研究变更日志/发行说明

总结思想和深入阅读

在软件开发中,版本控制是最重要的概念之一,即使具有较高资历的工程师也经常忽略版本控制。 如果您想要更安全并生产更可靠和稳定的软件,请更加注意依赖项和版本。

本文涵盖的主题不是任何新知识,它已通过https://guides.cocoapods.org/using/a-gemfile.html、https://docs.fastlane.tools/getting-started/ios/进行了讨论设置/#use-a-gem文件。 另外,Felix Krause也尝试创建Wiki项目,涵盖iOS应用程序的版本控制,网址为:https://ios-factor.com/dependencies-绝对值得一看。

我现在完成了,谢谢您的阅读。 希望您能通过捆绑器享受自己的开发生活!

附注:我提到的所有三个故事都在捆扎机的帮助下迅速解决。

Interesting Posts