iOS开发中的Ruby历史

该帖子最初发布在我的个人博客中 阅读原始帖子,这样您就不会错过任何内容。

今天,2月24日是Ruby编程语言诞生25周年,因为它由日本的Yukihiro“ Matz” Matsumoto命名。 自从1993年发布以来,它已成为最动态,易学且最时尚的编程语言。 在iOS开发领域,Ruby几乎已广泛用于包管理,自动发布或使用脚本管理Xcode项目的任何地方。 这是为什么? 即使在iOS和Ruby中没有什么共同点,Ruby在iOS开发领域中正在做什么。 在本文中,我们将尝试找出Ruby在iOS开发和部署中存在的一些历史原因。

如果您不使用Ruby,则可能会发现您的语言中的库,最佳实践,设计模式,工具或框架在很大程度上受到Ruby最佳实践的启发。 我目睹了如此多的Swift,PHP,JavaScripts库,这些库是从原始Ruby库直接实现的。 RSpec已在PHP(PHPSpec),JavaScript(Jasmine)和Swift(Quick)中实现。 可能还有许多其他示例已由Ruby用其他语言实现。 不知道为什么Ruby如此流行,但这是因为语言的简单性,社区和生态系统使Ruby成为优秀的编程和脚本语言。

现在,我们将介绍在iOS开发中使用哪种基于Ruby的工具。

由于各种原因,iOS应用程序开发中积极使用了各种基于Ruby的工具。 最近,有人在Twitter上问了一个真正的问题,

iOS Developer为什么经常使用Ruby?

这是一个有效的问题,因为除了苹果公司开发的项目外,几乎没有任何内部没有Ruby的iOS项目。 现在,我们将列出一些工具,这些工具在iOS开发人员中非常流行,并成为iOS开发的核心部分。

  • 游牧人
  • 可可豆
  • 快车道
  • 危险系统
  • xcpretty
  • xcov

这些只是一些基于ruby的精选工具,但在iOS应用开发中可能还会使用更多工具。 现在,我们将简要介绍这些工具的背景知识。

由于Nomad-cli已被Fastlane工具取代,因此最近没有积极使用nomad-cli,但是Fastlane工具受到使用Ruby编写的nomad-cli的启发。 这是基于红宝石的工具开始出现在iOS开发中的早期参与者之一。 该项目为可以在nomad-cli之上编写的命令行工具奠定了坚实的基础。 这是用于将iOS应用分发到App Store的纯命令行界面。 您可以在此处阅读有关nomad-cli的更多信息

在nomad-cli之前,通常用于使用本地Xcode存档的应用程序,或者需要使用xcodebuild工具进行复杂脚本编写的应用程序。 xcodebuild生成的脚本通常非常冗长且难以维护。 它接受很多参数,每个参数都需要在脚本中配置,这很繁琐。 nomad-cli的作者Matt精通Ruby,开发了此工具来使用命令行解决iOS二进制分发问题。

不确定nomad-cli的作者为什么开始使用Ruby在Apple的本机技术上构建包装器。 看着mattt的Github仓库,他对Ruby十分精通,这也许就是他选择Ruby作为nomad-cli的原因。

CocoaPods是Ruby涉足iOS应用开发的项目。 CocoaPods是Xcode项目的依赖管理系统。 它被用来创建和分发Swift和Objective-C包,并在其他项目中重复使用。 CocoaPods具有可在Xcode项目中使用的所有软件包的集中存储库。 CocoaPods不是单个项目,而是使用Ruby编写的项目的集合。 这些项目包括Xcodeproj,CLAide,Molinillo,CocoaPods Core,Master Repo等。您可以在此处找到项目的详细信息。

在使用CocoaPods之前,在Xcode项目中管理依赖项确实很痛苦。 iOS工程师必须在Xcode构建阶段中手动链接框架。 Cocoapods通过内部自动化所有这些任务解决了这个问题。

CocoaPods的主要作者Eloy Duran在此推文中回答了这个问题,为什么他选择Ruby来编写CocoaPods。 据他说,Objective-C和Ruby都受到Smalltalk的影响,这也是为什么他在Objective-C运行时之上开发各种Ruby实现的原因。 指定选择Ruby的原因包括

  • 易于与Bundler / RubyGems共享代码
  • 在早期阶段利用MacRuby(Objective-C运行时上的Ruby),因此我们可以使用本机的PropertyList(反序列化)API来读取/生成Xcode项目,并将纯Ruby解决方案推迟到以后。
  • 依赖管理通常很难适应每个人的情况,尤其是在刚开始时,尤其是在诸如Xcode项目之类的复杂本机环境中。 Ruby是让用户随便修补其项目所需的任何东西的好选择。
  • 对于进行大量字符串操作的CLI工具,Ruby是一种出色的语言。
  • 他们努力确保@ CocoaPods即使与未安装Xcode CLI工具的OS X一起使用的Ruby也可以使用。

CocoaPods使用Xcodeproj gem修改Xcode项目。 在Xcodeproj之后,有许多内置的ruby库,这些库使用命令行或脚本来处理Xcode项目。

如今,Fastlane被广泛用于自动构建,测试和分发iOS应用程序。 Fastlane用于将基础架构脚本化为可以在任何Continuous Integration服务器上运行的代码。 它具有用于自动化各种iOS开发任务的工具。 您可以在此处阅读有关Fastlane的更多信息。 所有Fastlane工具都是使用Ruby构建的。 最近,Google的Fastlane团队正在使用Ruby构建Fastlane-CI。

如前所述,Fastlane工具在很大程度上受nomad-cli的启发。 Fastlane已将大多数iOS开发和部署活动自动化,例如构建,测试,代码签名,屏幕截图,测试飞行等等。 Fastlane在Apple的本机技术上构建了广泛且可扩展的包装器,通常很快就可以采用Apple在本机工具中所做的任何更改。

根据Fastlane工具作者Felix的说法,他最终也使用了Ruby,以便能够直接访问和使用他们已经编写的类来支持以前的工具(例如CocoaPods和nomad-cli)中的Xcode项目。 Felix认为有以下几个原因:

  • mattt是iOS工具领域的早期玩家,他在Ruby中建立了nomad-cli(这对他来说是巨大的灵感)
  • CocoaPods是用Ruby编写的,因此在开始Fastlane时,他想从第一天开始就将这两个工具集集成在一起。

Danger是另一个非常流行的内置工具Ruby,它通过自动执行请求请求的简单规则来加快代码审查过程。 然后,Danger也已在Javascript和Swift中实现,但最初的灵感来自Ruby。

Orta是Danger的主要作者,他还贡献了许多其他开放源代码工具,包括CocoaPods,Fastlane并构建了库。 大多数有趣的基于Ruby的库都是由Artys公司开发的。 您可以在Github上关注Artsy或关注他们的博客进行有趣的项目。

xcpretty是xcodebuild的格式化程序,可用于生成不同格式的美观报告。 当前,它支持junit,html和json格式。 它还有助于使xcodebuild日志更具可读性。 我们不讨论为什么作者选择在Ruby中构建此工具的细节。 我们可以安全地假设主要工具是在红宝石中构建的,因此他们可能希望将所有工具对准红宝石。

xcov是一种以用户友好格式显示代码覆盖率报告的工具。 它以HTML,JSON和Markdown格式生成报告。 xcov也用Ruby编写。 您可以在此处阅读更多xcov。 我们不讨论为什么作者选择在Ruby中构建此工具的细节。 我们可以安全地假设主要工具是在红宝石中构建的,因此他们可能希望将所有工具对准红宝石。

答案是是和不是。 如果iOS开发人员花时间了解和使用Apple的本机iOS工具进入他们自己的工作流程,则可以。 但是,我认为这不会很快发生。 苹果的本机工具非常复杂且难以学习。 苹果公司一直在尝试通过在本机技术之上在Xcode中引入一些基于GUI的功能来使开发人员满意,但到目前为止还没有成功。

为了成为没有Ruby的iOS项目,有人需要为CocoaPods和Fastlane编写替代工具,这似乎很辛苦。

有一些项目(例如Carthage,Swift项目管理器)可以代替CoacoPods使用,但它们都有一些局限性,因此必须在iOS工作流程中完全采用。 迦太基有太多手动步骤,Swift Package Manager仍未准备好运行iOS项目。 Fastlane工具的一种可能替代方法是在Apple的本地命令行工具之上编写自定义脚本。 这需要对Apple的技术和出色的脚本编写技巧有深入的了解。 对于iOS开发人员而言,默认情况下很少具备该技能。 Fastlane工具已经完成了很多工作,无法自动执行大多数iOS开发工作流程,因此可以直接使用。

您可以将Ruby从iOS项目中完全删除,但是您需要了解有关Apple的本机技术的更多信息,努力工作并重新发明轮子。 如果您有时间和金钱去做,那是值得的。

Ruby通过创建CocoaPods,Fastlanes等工具解决了苹果开发人员工具的复杂问题。 大多数iOS开发人员已经在他们自己的工作流程中接受了Ruby,因此Ruby不会很快退出iOS应用程序开发。 因此,每个iOS开发人员都应该花一些时间学习Ruby。 看看Apple开发人员工具如何应对Ruby在iOS世界中的统治地位,将是一件很有趣的事情。 您在iOS项目中使用Ruby有什么经验? 在下面的评论中分享

像XCBlog的 XCTEQ 发布的帖子一样 您可能还喜欢我们的一些服务,例如访客博客或Mobile DevOps(CI / CD)或测试自动化。 Github 搜索我们的 服务 ,开源项目, 或者在 Twitter Facebook Youtube LinkedIn 上关注我们 下载我们的 XCBlog iOS应用程序以离线阅读博客。

X CTEQ 一家专门从事基于Mobile DevOps,CI / CD,Mobile,AI / ML的测试自动化Checkout XCTEQ产品和服务的公司, 网址 http://www.xcteq.co.uk 或写信给我们info@xcteq.co。英国..