从放弃到入门 iOS 编程,我写了一个到期提醒应用:如期而至

从放弃到入门 iOS 编程,我写了一个到期提醒应用:如期而至
2021年01月16日 14:30 少数派sspai

Matrix 首页推荐

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。

前言

今年年初的某一天,我突然兴致勃勃地又想写起 APP 来。把时间倒回到 3 年前,当时的我也是满怀兴趣的想写一个 APP,然后买了 MacBook、《iOS 移动开发从入门到精通》,开始抱着书想从基础学起 Swift 来,结果不用猜,我在学了一个月之后放弃了。

时间再回到今年年初,彼时 Apple 推出了全新的声明式 UI 开发框架 SwiftUI,对于我这种编程经验几乎为零,而又做过一些视频设计的人来说,应该就是重新入坑的不二选择。所以当时我重新换了一种方式出发,决定从项目直接开始来接触编程。

开发缘由

女友是个囤货小能手,常常在各种购物节的时侯囤够很多东西,久而久之,也就会容易出现不知道有买过某个东西,或者是哪些东西放了很久从来没用过,最后过期了只能丢掉;另一种情况就是我常面临的:厨房的油盐酱醋不知不觉就过期了,药箱的药过期了忘记处理,零食堆里总有被遗忘的食物。所以我像很多刚学编程的朋友一样,选择做一个日期管理的 TODO 类应用,专门用来记录日常生活中一些容易忘记并且有期限的东西。

1.0 版本

取名「如期而至」是因为当时脑袋里想到关于时间的成语,第一涌现出来的就是这个词,所以便以此为名开始了第一个项目的开发。大概在 1-2 月份的时侯,因为疫情的原因,阴差阳错多了很多在家学习的时间,那个时侯恶补 Swift 的知识,然后结合当时看的 design code 推出的《Build an app with SwiftUI》教程,写出了 1.0 版本。因为不会太专业的设计,所以基本没有什么 UI 素材,算是一个比较单调的 APP,后来实在不满意界面的设计,就被我弃用了。

2.0 版本

3 月份的时侯,决定回炉重造,开始新的界面设计,也就是目前 App Store 上架的这个 1.0 系列版本,虽然一开始只有简单的主页和添加页,也没有专门设计的原型图,但是经过慢慢的修缮之后,目前终于达到了自己暂时理想的样子。不过这是一段很漫长的时间,原因是当开发到满足我自己使用之后,我就开始放慢了节奏,再加上之后工作的原因,所以拖到拖着就到了年底,才想着说也差不多该发布了,顺便给自己的 2020 目标打上一个勾。

在 2.0 版本,加入了震动反馈和动画来增加交互,同时也使用 Core Data 来管理数据,所以整体体验好了不少。为了让工程文件简洁一点,整个项目里只使用了 Lottie 一个第三方库来实现动画效果。

被拒了 2 次的《APP Store 预览视频反面教材》

正文

接下来,我就从开发时的一些感悟来说说「如期而至」这款应用吧。

首页

进入 APP 后的首页使用了滚动的列表视图展示,左边的蓝色条状是包含时间的时间轴,可能有些人看到这样子的设计会想起「TimePage」这款应用,而我也是用这样子的设计,是因为我心目中的时间管理 APP 它就应该是时间轴这样子的,足够方便的进行滚动查看,又能把时间专门区隔而凸显出来。

顶部的标题可以点击进行分类切换,目前没有做专门的标签管理列表,所以是按照剩余物品里包含了的标签来显示,假如你想添加一个新的标签,那么就需要添加一个物品,并在标签里写上你想添加的标签。标签分类选择了带记忆的方式,即使关闭应用也不会被重置。

单击物品项可以展开显示详细信息,如果点击右边的方块或者圆圈,则是用完或者使用数量 +1 的操作。物品详细信息下方有 5 个操作按钮,可以根据实际需求选择,需要注意的是,这里的 「用完」 操作是可以选择具体日期的,而上方的方块 / 圆圈按钮操作,则是默认以当前日期进行记录;如果是过期的物品丢弃掉,可以选择这里的 「丢弃」 来结束这个物品。然后有朋友说 「删除」 按钮按了没效果,其实是我怕误点所以改成了长按才能删除,但是因为没有明确的指引,所以难免让人疑惑。

另外比较遗憾的一点就是,iOS 13 的列表展示效果会更差一些。因为在今年 6 月份的时候 SwiftUI 升级到了 2.0,2.0 的一些代码无法支持到 iOS 13 的设备上,所以在这里我只能选择了一些差异化的方式来写。比如为了解决物品数量逐渐增多,列表过于冗长,在 iOS 13 的设备上列表是使用 List 来显示的;iOS 14 的设备则用了显示效果更好的 LazyVStack + ScrollView 来显示。这样子 iOS 13 设备会牺牲一些动画交互效果,来换取加载时的更加流畅。

添加页 / 编辑页

添加 / 编辑物品详情的页面采用了票据的样式进行设计,因为添加 / 编辑都用了同样的页面,所以顶部标题会显示当前的模式,减少使用时的困惑。添加物品最少只需填写名字即可,这样子默认的截止日期即为今天。当然也可以根据物品实际情况,每项都进行填写。

填写名字之后输入栏右边会出现网页搜索的按钮,点击可以直接百度搜索当前名称的物品保质期,适合于一些无保质期物,比如水果之类的,不过搜索结果也需要自行甄别。日期选择上提供了二选一的方式,如果选择了 「生产日期」 则一定要填写 「有效期」,然后会自动算出 「截止日期」,因为每个物品都必须有 「截止日期」 才能如期而截止。

回顾页

回顾页面是当时在想做不做时侯最纠结的,原因是本来设计初衷只是记录容易忘记的物品,如果做成使用物品详细统计的话,对于有强迫症的人来说就想全部都去记录,但是有很多买回来很快就会用掉的东西,是没必要去记录的。后来突然又想到,对于误操作想要恢复回去的物品,似乎又需要这么一个归档的入口,所以还是硬着头皮做了。

左边的月份和年份都可以滑动点击选择,右下角的列表每一个项目可以右滑进行恢复操作。而右上角的热力图其实是我最拿捏不准的,对于用户来说,这一块的显示是否有意义?所以暂时留着等用户的反馈来决定是不是留着,或者换成其他更有意义的统计图来呈现。

设置页

这一页面应该是代码写得最整洁的了,一行一行,想到什么功能就往上一加。为了更好的体验,应用通知权限申请也是在这里开启之后才会弹出弹框,尽量做到要什么功能才开什么权限。然后 iCloud 同步目前可能用处还不大,因为 iPad 版还没有推出,如果是多持 iPhone 或者有 M1 芯片电脑的用户,那还是很有用的。也加入了导出导入 CSV,方便进行手动备份 / 还原。

不满意的地方

最主要的就是添加页面的键盘输入体验不一致,主要原因还是我不熟悉 UIKit 的写法,SwiftUI 提供的键盘样式也无法满足,所以我用 SwiftUI 的写法写了一个数字键盘,但是与传统的键盘切换之间体验很差,目前已经找到了一些解决方法,应该会在最近的更新中解决。

另外一个就是推送提醒视图的问题,因为目前提醒视图只能用 UIKit+StoryBoard 来写,我又再一次栽倒,推送视图就只能做成底图 + 文字展示。所以就目前来说,SwiftUI 还是不能完全支撑一个应用的开发,或者是我比较弱吧。

未来的计划

目前算是个入门小白,对 iOS 开发的流程很多还不熟悉,就好像第一次上架 APP 这事,也才让我知道什么是版本迭代。这是我独立开发的第一个 APP,我会尽量多尝试一些 APP 开发的不同部分,所以接下来暂定的计划主要有:支持国际化语言(起码有个英语)、支持无障碍操作、推出 iPad 版、接入 Siri 实现语音输入、Face ID、推出 Watch 版 ...... 等这些功能都熟悉之后,再考虑下一款应用,可能要很久了。

「如期而至」目前已经上架简体中文的 iPhone 版,可在 App Store 搜索下载,提供内购完整版,可解锁无限条目、同步、备份导出等功能。欢迎大家下载体验~

有任何疑问的话,可以用以下方式和我联系:

微博:叽里呱啦大麦邮箱:icebarley@outlook.com

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部