今天我更新了 Manico 2.7,解决了一个在 Catalina 下无法切换至 Emacs 等多窗口 App 的问题。本来这只是一个常规的维护版本,没什么值得一提的。想到 Manico 作为一款 7 岁的 App,这么些年维护下来,也是有点感触,于是随意聊点。
Manico 的主要特性在过去几年都没有什么大变化,可以说是相当稳定了。我的发布与维护也不太频繁,毕竟已经没有严重的 Bug,于是就通过比较低频率的更新去修复一些早就存在的小 Bug,这些 Bug 基本上与特定的 macOS 系统版本没有关系。
然而过去半年,因为更新到了 Catalina 以后,陆续收到了不少只有在 Catalina (macOS 10.15)下会遇到的问题,这些 Bug 偏偏和 App 的核心功能有关——切换至对应的 App,比如有一个比较严重的:无法切换到「微信开发者工具」,一切换就会造成系统失去响应,只能重启电脑。
开发和维护 Manico 这么多年,还是第一次遇到这么严重的问题。我不敢肯定这是 Manico 的 Bug、Catalina 的 Bug 还是微信开发者工具的 Bug,我只能说:这些组合造成了触发了 Catalina 的系统级 Bug——这在 Mojave 下是没有这个问题的,所以严格来说还是 Catalina 的问题。
从开发者角度去分析的话,基本是这样:Manico 是一个最低运行环境是 macOS 10.12 的 App,它调用了一个比较经典的 API 去启动和切换 App,这个 API 已经在 macOS 10.15 下被设置成 deprecated 了并有了新的替代,但是 Apple 没能处理好老 API 的兼容性,于是就触发了这个 Bug。
总之,最后我还是解决掉了这个问题,由此也有了新的思考:如果自己的 App 在某天因为操作系统升级,主要功能突然无法工作了,某种程度上对它来说是一种「死亡」,有两个办法让它活下去:
- 用新的 API,重构或重写 App,不再支持老版本的系统;
- 去研究 Workaround 绕过无法工作的问题,重新让它活过来。
无论使用哪个办法,这就是标题我所说的「维护成本」。当然我举的例子比较极端,是 App 主要工作无法运行的情况下,我们日常开发中,会遇到大量相对比较轻的维护问题,但是累计起来工作量也是比较可观的。
做了这么多年的 Apple 生态圈的开发者,也越来越熟悉和了解 Apple 生态的特质。Apple 在最近几年的动作比较大,用一句话来形容,就是:move fast and break things。我越来越能强烈的感受到这点。
对于需要不断迭代、提升体验的软件产品来说,这是正确并且必要的,只是 Apple 近几年让我感觉「break things」常常大于「move fast」。也难怪 macOS Catalina 落下了「macOS Vista」的美名…
自己开发过软件都知道,即使是迭代一个小产品,在迭代特性、修复 Bug 过程中,又要保证当前已有的用户也不受这个过程的影响,是一个挑战很大的事情。更何况 Apple 这种体量的公司呢!
好了,就这样随意聊聊最近的开发感受。最后期望 Apple 在 move fast 的过程中,少 break things 吧。这也是对自己的勉励。
附:Manico 下载和更新地址 App Store。
感谢开发了Manico,用起来很不错。
同感,前天更新了自己 app 的新版本,然而到了昨天收到了大量的崩溃反馈,昨晚研究了一晚上,最终发现 iOS 13 以下的 iPhone 都会出现这个 crash bug,但是这个代码也已经稳定运行了两年多了,最后只好找了个 workaround 解决了,虽然不影响 UI 和 UX,但是破坏了代码的完美性,心理很不舒服……现在更新一个版本的测试工作量太大了,需要测试三个系统版本和不同尺寸的设备,🥱
铁粉,马上更新了
同铁粉
如果兼容比较困难的话。 建议直接两个版本,一个支持老的,一个支持新的。