为iOS打开Sourcing ReactiveLists

在过去的几年中,PlanGrid iOS团队构建了许多内部API,使我们能够更快,更一致地发布新功能。

今天,我们将公开发布第一个组件-您现在可以在GitHub🎉上找到它。

我们的团队有许多开放源代码爱好者,并且我们还使用了大量开放源代码库,因此我们一直计划随着时间的推移发布这些组件。

使用UIKit进行声明式UI编程

ReactiveLists是一个类似React的API,建立在UITableViewUICollectionView 。 该API使我们能够编写无状态函数来生成用户界面。 根据我们的经验,这些无状态函数比*DataSource*Delegate类型更容易理解,后者是向UIKit组件提供数据的标准模式。

API的用法通常类似于下面的示例,您编写了一个将数据映射到ReactiveLists视图模型的函数,从而产生了一个非常易读的无状态函数:

这不仅使UI代码易于阅读和迭代,而且使其易于测试。 我们的团队成员Benjamin Encz在他的演讲“将UIKit内外翻”中深入讨论了这种声明性UI编程方法的优势。

从封闭到开放

我们团队中有很多人为开源项目做出了贡献,或者从头开始创建了自己的项目。 事实证明,将在现有代码库中演化的组件开放源代码采购的经验大不相同。 我们花了几天的工程时间将组件移至其自己的Swift框架中,删除了对核心应用及其单元测试助手的依赖,将ReactiveSwift集成移至扩展中,并花费大量时间重命名API,改进文档和重构了测试套件。 最重要的是,我们构建了一个示例应用程序,使该库更易于理解。

这是开放构建的另一个好处-它提高了在我们代码库的大部分中使用的组件的数量。

准备生产,但不准备1.0.0

我们没有等到该库完成后才将其发布给公众,因为我们相信它在当前状态下会增加很多价值。 我们发布的版本是已经在PlanGrid iOS应用程序中发布了近两年的版本。 因此,我们绝对认为该库可用于生产。 也就是说,我们期待大量改进,并且API不断变化,因此将此版本发布为0.1.0

结论

我们认为这是与iOS社区共享一些内部API的第一步。 我们每天都看到利用开源软件的好处,并且很高兴能够做出贡献。