仅用3天时间,一款名为Brush Tracker的iOS应用便开发完成,而在此之前,开发者对Swift——iOS开发的主要编程语言——几乎一无所知。尽管这款功能完备的应用已成功上线App Store,但开发者对Swift的掌握依然有限,这主要得益于其独特的“随心编码”(vibe coding)开发方式。
本文将详细阐述这一开发过程、所使用的AI工具,并分享在此期间积累的经验与见解。
Anything:Lovable的替代方案探究
此前,开发人员曾使用Lovable进行网络应用开发,但就目前而言,它似乎并非移动应用开发的理想选择。
当然,Lovable在应用开发领域也有其他替代方案。近期,一款名为Anything的工具进入视野。鉴于之前使用Lovable的良好体验,决定尝试用Anything开发这款应用。起初,Everything似乎表现不错,但整体开发体验并未达到预期的效率。
其中最困难的部分在于无法即时测试所做的更改、修复和改进。Anything虽内置了用于测试的UI界面,但其体验并不十分流畅。此外,它还会引导用户通过Expo应用进行代码测试,但这同样未能有效解决问题。
值得一提的是,该开发者此前并无移动应用开发经验。对于有一定编码背景的开发者而言,Anything或许能成为比该案例中更高效的工具。
从Anything导出代码后,尝试在Mac上的Xcode中进行测试,却遭遇了大量错误,未能成功运行。因此,决定转向其他替代方案,Cursor似乎是显而易见的最佳选择。
AI编程利器:Cursor
许多活跃的开发者朋友对Cursor赞不绝口,因此,也决定亲自尝试一番。
在Cursor中输入相同的指令,请求它构建应用。随后,利用Cursor生成的文件夹和文件创建了一个Xcode项目。首次启动Xcode模拟器时,应用便一次成功运行。
Brush Tracker的目标是帮助用户保持每日刷牙的习惯。它提供一个初始为100%的洁净度分数。如果用户有一天跳过刷牙,分数便会下降,应用中牙齿的视觉表现也会随之变得有些泛黄,以反映当前的洁净度分数。
注:本文所有图片均为Brush Tracker应用的截图。
首个版本仅包含应用的核心功能。这被认为是利用AI工具构建产品最有效的方式:在添加其他功能之前,先确保核心版本能够顺利运行。
为了在模拟器上测试应用的核心功能,需要修改模拟器的日期,且不完成“今日刷牙”,以检查洁净度分数是否会如预期下降,以及牙齿的可视化效果是否会相应更新。
Cursor曾建议修改Xcode模拟器上的日期,但新版模拟器已不再提供日期和时间设置功能。旧版本的Xcode模拟器曾拥有此设置,但现在已取消。
一种变通的解决方案是直接修改Mac电脑的日期。通过这种方式,模拟器上的日期也会随之改变,从而能够测试该功能。
注意到,当Mac的日期被手动修改后,Cursor无法识别账户并停止工作。将日期改回自动设置后,Cursor恢复正常。
刷牙计时器功能
内置的刷牙计时器被认为是Brush Tracker的一大亮点。用户可以简单地标记完成一次刷牙,或在刷牙时使用计时器。
为了实现设想中的功能,开发人员进行了多次尝试。虽然可以直接告诉Cursor添加某项功能,但通过调整提示词并精确阐述需求,效果会显著提升。一旦给予明确的指令,Cursor通常能出色地完成任务。
激励奖励功能
为了在用户完成每日刷牙后提供额外激励,设计了奖励功能。用户完成刷牙后,可以点击“获取每日奖励”,查看到一句简短的励志名言。这虽是一个小细节,却是对口腔健康的一个良好提醒。
“随心编码”中也能边学边做
Cursor不仅能编写代码,还能在过程中提供学习帮助。在尝试添加奖励功能时,最初的实现并不完全正确,未能正常运行。
将问题描述给Cursor后,它不仅解释了问题发生的原因,还提供了修复方案。以下是Cursor在开发过程中提供学习帮助的两个示例:
问题在于,第一次点击时rewardQuote为空,因为handleRewardTap()负责设置它,但弹窗却立即呈现。需要确保在显示弹窗之前,引言已被正确设置。
问题已修复!之前的问题是showReward = true在rewardQuote设置后立即执行,但SwiftUI的弹窗展示可能会在状态更新完全处理之前发生。
更高效地使用Cursor
Cursor无疑是一款强大的工具,但仍有一些方法可以进一步提升其使用效率。
假设代码出现故障或执行不正确。如果能明确问题所在,可将相关代码段高亮并添加到聊天中。这无疑会大大简化Cursor修复问题的过程。
在Brush Tracker中,设置通知时曾遇到问题。当时定义了问题并请求Cursor修复。Cursor告知已修复,但问题依然存在。随后,根据代码更改找到了问题所在,并将该部分内容添加到聊天中。
Cursor在下一次尝试中成功修复了问题:问题在于onTapGesture被应用于Picker,但在SwiftUI中,分段选择器(segmented pickers)对轻触手势的响应并不总是很好,因为它们有自己的内部手势处理机制。onChange修饰符只在选择值实际改变时触发,而不是在点击相同值时触发。
另一个值得注意的方面是Cursor中的“上下文使用率”百分比。它会自动从代码库中捕获相关上下文,因此无需手动指定要查看的文件。然而,聊天历史记录也会包含在该上下文中,有时可能包含旧问题或不相关的代码。
这种额外的冗余信息可能增加token使用量,或降低Cursor的效率。当上下文使用率百分比升高时,建议清除聊天历史记录。
将应用分发到App Store
一旦在模拟器或物理设备(例如开发者自己的iPhone)上完成应用测试,接下来就是将应用分发到App Store,让更多用户看到(并希望使用)该应用的时候了。
这并非一个复杂的过程,但涉及许多细节,特别是对于首次操作而言,可能会耗费较长时间。在YouTube上找到一段视频,其中详细解释了整个过程的每一步。
完成所有步骤后,提交了应用进行审核。审核通过后,收到了来自App Store Connect的电子邮件通知,告知应用已准备好进行分发。
需要指出的是,本文提及的所有AI工具,与该开发者均无任何关联。
