iOS应用程序要求清单

当我们开始开发新应用时,通常会经过客户定义的要求,并开始考虑概念,体系结构和估计。 这些要求的范围可以从用几句话写成的模糊概念到带有模型,用例和接受标准的详细规范(很少有)。

但是,即使定义了产品的所有功能需求,也有一些事情被假定由客户完成,或者在定义规范时甚至没有考虑。 这可能是由于缺乏技术知识,假设或认为工作量太低而无法在以后定义的想法。 不幸的是,这些事情通常不会那么小,并且可能对项目成本产生重大影响。 这篇文章将探讨几种类似的情况,因此您可以粗略地概述并核对清单,以了解在项目开始时需要询问的内容。

在没有互联网连接的情况下使用应用程序可能会引起最大的误解之一。 如今,应用程序通常连接到后端系统上的REST服务,以获取所需的数据并将其呈现给用户。 当您有互联网连接时,一切都很好。

但是,需要尽快定义应用程序在您无法访问互联网时的行为方式,因为这会对项目的时间表和成本产生重大影响。 这里有几个选项。

这是最简单,最便宜的选择-如果没有互联网连接,该应用程序将无法运行。 每当对后端的请求失败时,应用程序应显示一个弹出窗口,指出发生了错误,并且需要显示该数据的屏幕为空。

这是一个更复杂的选项-您应该在连接可用时存储最新保存(或预先捆绑)的数据,并将其呈现给用户。 在这种情况下,您可以实现文件系统缓存,使用许多数据库选项之一,或者如果数据量很小,则可以摆脱“用户默认值”。 但是,您执行的任何需要在后端进行更改的操作(例如,我要离线添加产品)都是不可能的,并且会显示一个弹出窗口,您需要具有互联网连接才能执行此操作。

这是最复杂的选项。 它支持上面的只读模式,但是即使没有互联网连接,它也支持对数据进行更改。 为此,通常,您将需要在后端的数据库与移动电话上的本地存储或数据库之间实现同步机制。

同步机制需要进一步定义,因为其各种可能性会对项目的复杂性和成本产生不同的影响。 这里最复杂的部分是当移动应用程序和后端对同一组数据进行更改时会发生什么。 执行同步时,手机和服务器上的数据之间存在冲突。 有几种解决冲突的方法。

其中之一总是胜利

例如,可以说我们的冲突解决机制是从后端(或电话)获取最新更改并仅使用这些更改。 另一侧的更改将被丢弃。 这是最简单的选择,但它会导致丢失丢弃的数据,这对用户可能至关重要。

更好的选择是保留更改的时间戳。 当发生冲突时,我们将采用较新的更改并丢弃较旧的更改。 这种方法是对前一种方法的小升级,但是仍然会丢失数据。 两种方法中的快速优势就是要求用户选择他们想要保留的数据。

最复杂的方法是合并有冲突的数据,并以一种易于理解的方式将其呈现给用户,因此他们能够根据所做的更改查看要合并的数据。 它还应允许用户放弃合并并选择一侧或另一侧的更改。 类似于git或svn冲突解决方案。

如您所见,离线使用的复杂性从非常简单到非常复杂的实现不等,可能需要数周的开发时间。

很常见的误解。 如果该应用程序可以在iPad上运行,则应提前知道。 尽管每个负责任的开发人员都应使用自动布局,大小类和所有其他UI技术来实现灵活的布局,但这种要求需要事先知道,因为这可能会影响项目的组织和工作量。 另一个问题是iPad的屏幕要大得多,这意味着如果仅将iPhone应用程序缩放到iPad屏幕,则该应用程序的UI可能会非常空白。 要求iPad设计可以帮助计划和构建项目。

这同样适用于横向支持,在这种情况下,您始终应谨慎使用自动布局约束和对应用程序进行连续测试。

也应在项目开始时阐明受支持的最低iOS版本。 例如,请考虑以下情形:您需要开发增强现实应用程序。 您选择ARKit,开发所有内容,然后将要测试的应用程序发送给客户端。 但是,他们无法安装该应用程序。 他们的设备是装有iOS 10的iPhone 6。 您可以要求他们安装iOS 11,这已经引起了人们的注意,因为客户会急于检查市场上发行的OS版本。 iOS 10才使用了2年,因此缩小了该应用程序的市场规模。

当您最终说服他们安装iOS 11时,您意识到iPhone 6S及更高版本支持ARKit。 在这些不幸的情况下,客户会占上风,因为一开始您并未提出正确的问题。

为较旧的设备和OS版本开发定制的AR解决方案是疯狂的,这将需要大量的工作,计算机视觉知识,并且永远不会像ARKit那样出色。 但是,如果一开始就牢记这一点,则可以说最低支持的版本是iOS 11,最低支持的设备是iPhone 6S。 低于此价格的费用将多出100倍。 这样,球就在客户的手中,他们可以决定小的市场份额是否值得努力。

每个优秀的开发人员都应将应用程序中的文本存储在单独的文本文件中,并仅引用代码中的键。 这使得在应用程序中添加不同的语言变得更加容易,而无需更改代码。

但是,即使您这样做,也需要询问支持哪些语言。 例如,如果其中之一是阿拉伯语,则工作量可能会更大。 这是因为阿拉伯语是从右到左。 尽管在选择阿拉伯语时操作系统支持将所有内容从右向左更改,但是您仍需要注意并检查是否需要新图像,是否需要重新组织视图层次结构等等。

动画不是规范文档中可以描述的东西。 用于创建模型的软件可以产生一些动画,但是可能性有限。 客户端通常都有一个示例应用程序,无论是针对UI还是功能,都可以从中启发他们。 请确保找出该应用程序是什么,并检查动画效果。 有些动画可能需要几天的开发时间,并且从一开始就拥有正确的视图层次无疑可以节省时间和成本。

了解应用程序的业务方面和意图对于项目的成功至关重要。 您需要了解客户开发该应用程序的目标。 这对于定义系统的适当体系结构很重要。 举例来说,假设客户想以白色标签产品的形式将应用出售给其他企业,且对不同功能的定价不同。 这意味着您应该设计系统,使其真正易于打开和关闭功能。 这也意味着样式,字体和图像应易于替换。

另一方面,如果客户不需要或不打算这样做,则应使该应用程序更简单,更易于配置,并节省时间和金钱。 确定采用哪种方法并非易事,需要深入了解应用程序的业务逻辑以及以往的经验。 有关此主题的更多信息。

这些是项目开始时要记住的一些事情。 还有很多,但是这些是我遇到的最常见的。 了解需要开发什么至关重要,因此您可以清楚地了解所需的工作。

您如何看待这些不那么明显的要求? 您过去有遇到麻烦吗? 请在评论部分分享您的经验。


最初于 2018 年10月8日 发布在 martinmitrevski.com

这个故事发表在中等规模最大的企业家精神出版物The Startup上,其次是+ 377,643人。

订阅以在此处接收我们的热门新闻。