用于iOS开发的库和框架

729

在GitHub上查看或搜索解决方案时,有很多iOS应用开发的库、工具和框架可供选择,但由于iOS是一个小众技术,评估解决方案是否值得你花时间总是一个问题。

GitHub上的星星是一种衡量标准,但500颗星星算多吗?对于网络开发来说,这可能是沧海一粟,但对于iOS来说,这可能足以让你对该解决方案感兴趣。但实际上,仅仅通过星星的数量来评估库的质量是不准确的。

另一个衡量标准是通过知名的iOS社区博客和出版商,看看他们使用什么或提供什么教程。尽管如此,还是有一个问题:如何评估出版商/博客作者是否被认为是专家,是否在iOS圈子里受欢迎?或者出版商只是出于个人喜好而喜欢这个库?

为技术做出最佳选择的关键其实不在于具体的库和它们的受欢迎程度,而在于 它们解决的基本概念。听起来很不直观?可能看起来是这样,但在这篇文章中,我将试图证明,一旦你理解了库所要解决的问题,评估它们是非常容易的。

库是极其重要的

因此,让我直接进入与iOS相关的技术清单,这些技术被用于成千上万的项目中。这个列表决不是详尽无遗的。它是一组在工作内容中非常常见的例子,是我的一些经验总结。

RxSwift/RxCocoa/ReactiveSwift。这个库提供了反应式异步序列的API和与UI的绑定。根据我的经验,现在大约有50%的现代项目使用这个,所以当加入一个项目的时候,这是个很好的机会。

谷歌地图/MapKit/OpenStreetMaps。如果你正在开发的应用程序中确实有地图,它可能使用了这三个库中的一个。我认为你只需要知道其中一个,因为它们非常相似。

CoreData/Realm。当你想在本地存储数据,而UserDefaults又过于简单的时候,iOS提供了CoreData作为解决方案。虽然CoreData没有什么问题,而且很多人喜欢它,但也有人喜欢用Realm作为替代。

Firebase Cloud Messaging / UserNotifications + APNS:第一个是由谷歌制作的用于接收和发送通知的整个系统。它允许你通过Push Notifications和Websockets发送消息。第二种是苹果公司的解决方案,在FCM的引擎下使用。Firebase解决方案的最大优点是,你可以在推送通知之外获得网络套接字连接,而且你不必在你的后端从头开始实现APNS(苹果通知服务)。

Mixpanel / Google Analytics。这两个是应用程序的事件跟踪的主力军。如果你想知道用户与应用程序的互动情况,这项服务可以让你跟踪和收集数据。

Alamofire。当你需要复杂的网络时,这是一个可供选择的库。如果你的联网很简单,建议坚持使用URLSession。

Kingfisher/SDWebImage。如果你想显示从网络上获取的图片,并对其进行缓存(以避免每次显示时都下载),你可以写一大堆代码并重新发明轮子,或者使用其中一个。前者比较新,而且只适用于Swift,而后者是一个古老的、经过验证的Objective-C库。

Swinject。如果你有一个庞大的应用程序,而且很难跟踪对象的创建流程,以及数据是如何传递的,这是一个很好的选择。

快车道。当涉及到为iOS应用开发带来持续集成时,它是一个绝对的主力军。因此,对于需要定期发布测试构建的人来说,它值得了解。

XCTests / Quick&Nible。 前者是一个内置于Xcode的单元测试和UI测试库。后者允许你编写行为驱动的测试。Nimble也可以与XCTests一起使用,用于更简单、异步和更有表现力的断言。

我提到的每一个库都以它自己的方式来解决编程问题,但大多数时候它们实际上是基于更普遍的概念。了解这些基本概念是非常重要的。我认为这是每一个应用程序开发人员最关键的技能。库和技术栈瞬间就会发生变化,但底层概念是相对稳定的。许多想法甚至来自70年代和80年代,将它们熟记于心,实现它们的库就会立刻变得不言自明,而且评估起来也很简单。

让我们举几个例子。

Swift(或任何编程语言)?面向对象的编程和函数式编程

当你学习一种编程语言时,获得另一种编程语言的熟练度确实是一件微不足道的事情。为什么呢?因为所有语言的基本概念都是一样的,你所需要了解的只是语法和方法上的差异

如果你了解面向对象的编程,那么在Swift中如何实现封装或继承是如何工作的,这些都是简单的话题。功能性编程也是如此,"为什么Optional类型有一个flatMap?"或者 "为什么在我的闭包中捕获的实例必须是常量,如果我想改变值,该如何处理?"这样的问题。

RxSwift/Combine/Reactive Swift?功能性范式,反应性范式

RxSwift和其他类似的框架是功能范式知识的闪光点。根据我的经验,不了解RxSwift的人经常会说这样的话:"啊,这只是另一个库而已。我会在项目中学习它的"。很抱歉要告诉你,但它不是,你也不会。是的,它 "只是一个库",但这个库需要你了解Functional和Reactive范式。还记得学习面向对象范式,了解封装、多态性、类和实例以及所有这些东西是多么的麻烦吗?还记得当一切都最终 "咔嚓 "的时候,感觉有多大的突破吗?要想做好RxSwift,你还需要有两个这样的突破,一个是函数式编程,一个是反应式编程。组合或ReactiveSwift也是如此,它们或多或少都是一样的。

CodeData/Realm?关系数据库,对象数据库,ORM,SQL,noSQL,存储库模式

数据库是一个庞大的话题,而且很容易把它搞乱。虽然移动开发者不必担心诸如可扩展性之类的问题(手机上不会有一百万个连接到数据库,只有一个,来自使用该设备的用户),但有许多问题是移动开发者与数据库专家共同面临的。 ACID的缩写就是一个很好的例子。数据规范化是另一个例子。当你有大量的数据集时,直接使用SQL查询的能力也能让你走得更远。如果你想从这些数据集中创建Swift对象呢?这就涉及到了ORM的概念(虽然CoreData不仅仅是一个ORM,但它也可以作为一个ORM来使用)。那么如何决定具体的信息应该从本地数据库还是从后端获取呢?存储库模式来帮助你!

XCTest,快速/敏捷?单元测试和嘲弄

为了正确地编写单元测试,你必须理解 测试替身 (通常被错误地称为mocks)和依赖的 概念 。一旦你看到你的代码中的依赖关系的所有问题,以及有时用测试替身来填补它们是多么困难,你会很快看到所有这些库都是不言而喻的你还可以深入研究不同的测试方法!Quick库所提倡的行为驱动测试就是一个很好的例子。

那么我究竟应该如何学习iOS库呢?

每个人都有自己的过程,所以我不能给你一个放之四海而皆准的建议,你应该自己决定。也就是说,在吸收了库本身的基础知识后,马上学习底层概念,将保证你的知识不会 随着这个具体的库的实现而被淘汰!一旦你了解了某一领域的所有问题,为iOS开发选择正确的库和框架就非常容易了。

最后一件事

我曾经提到过,关注博客是评估解决方案的一个相对较好的方法,所以这里是我的清单。这些资料贯穿了我的职业生涯,帮助我理解具体的库和基础概念。这份名单并非详尽无遗,但我保证,如果你的谷歌搜索指向这些网站之一,它值得一查。

原文链接:itnext.io/libraries-a…