一个视觉设计师的iOS APP 开发失败记录:用Cursor做儿童AI日记APP,最终停在设计页
正如大家所知,我不仅是个网络安全讲师,同时我还是个纯视觉设计师,做UI和交互对我来说很简单,但是代码对我来说就像“外星文字”。上半年想做个针对小朋友的AI写日记APP——界面要软乎乎的,点麦克风能语音输入,拍段小视频能自动生成文字日记,还有小恐龙贴纸能贴在日记里。听说Cursor能“说话出代码”,我兴冲冲地以为自己能跳过学开发,直接把设计稿变成能跑的APP,结果折腾两周,只留下满屏的设计文件和一堆没看懂的报错。
一开始:我以为“设计稿+Cursor”= 能上线的APP
做这个APP的初衷很简单:我邻居家的小朋友总爱拿着妈妈的手机拍日常,但记日记又嫌写字麻烦。我就想,要是有个APP能把他说的话、拍的视频变成带插图的日记,肯定很受欢迎。
先把设计稿画完了:浅粉色底,顶部是“小恐龙日记”的标题,旁边有个会眨眼睛的恐龙图标;中间是云朵形状的输入区,点一下会弹出两个按钮——“说说话”(语音输入)和“拍一拍”(视频输入);底部是日记列表,每条日记前面都有小朋友的头像缩略图。交互也想好了:点“说说话”会有小太阳旋转的动画,录完音恐龙会“吐泡泡”显示文字;拍视频时边框会闪彩虹色,保存后自动加个可爱的滤镜。
画完设计稿,我搜“设计师怎么快速做APP”,刷到有人说用Cursor,“不用学代码,描述需求就能生成iOS项目”。我当时眼睛一亮:这不就是为我准备的吗?
第一次打开Cursor,我把需求写得特别细:“做一个iOS APP,名字叫‘小恐龙日记’,浅粉色背景,顶部有恐龙标题,中间有云朵输入区,包含语音输入和视频输入功能,语音用系统麦克风,视频拍完能自动转文字,用AI识别生成日记内容,底部是日记列表,点击能查看详情。”
Cursor很快回复了一大段代码,还附带了“项目结构说明”,说“已生成ViewController代码,包含语音识别和视频拍摄的基础逻辑,需在Xcode中运行”。我当时觉得“也太简单了吧”,赶紧下载Xcode,按照Cursor说的“新建项目,粘贴代码”,然后点了那个蓝色的“运行”按钮。
第一个坎:Xcode里的“红色警报”,我连报错都看不懂
结果刚点运行,Xcode界面一下子红了——左边“问题导航器”里列了12个错误,全是英文。我盯着最上面的报错看:“No such module ‘Speech’”,后面还跟着一行路径。
我完全懵了:“Speech”是什么?是我漏了什么文件吗?赶紧回去问Cursor,它说“需要在项目中导入Speech框架,用于语音识别功能”。我又问“怎么导入?”,Cursor给了步骤:“1. 在Xcode中选中项目 -> 2. 选择Targets -> 3. 点击Build Phases -> 4. 展开Link Binary With Libraries -> 5. 点击+号添加Speech.framework”。
我跟着步骤点,在Xcode里找“Build Phases”,找了半天没找到——原来我新建的是“SwiftUI项目”,而Cursor给的是“UIKit代码”,界面结构根本不一样。我又跟Cursor说“我建的是SwiftUI项目”,它说“那需要调整代码,适配SwiftUI框架”,然后又给了一长串新代码。
这次我先把旧代码删掉,粘上新的,再点运行——红色报错少了3个,但又多了新的:“Cannot find ‘UIImagePickerController’ in scope”。我又去问Cursor,它说“UIImagePickerController是UIKit的类,SwiftUI中需用UIViewControllerRepresentable包装”。后面跟着的代码里有“struct ImagePicker: UIViewControllerRepresentable”,我根本不知道这行字是什么意思,只能照猫画虎粘进去,结果报错更多了。
那时候我才发现,Cursor给的代码总是“默认我懂基础”,比如它会说“需配置info.plist添加麦克风和相机权限”,但我连“info.plist”在哪个文件夹里都找不到,更别说怎么“添加权限”了。
卡壳核心功能:语音和视频,连“打开麦克风”都做不到
最让我崩溃的是核心功能——语音输入。我想实现“点云朵按钮,打开麦克风录音,录完转文字”,但不管怎么调代码,要么点按钮没反应,要么一按就崩溃。
有一次Cursor给的代码里有这段:
func startRecording() {
let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "zh-CN"))!
let request = SFSpeechAudioBufferRecognitionRequest()
// 后续录音逻辑
}
我粘进去运行,APP一打开就闪退,报错是“Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value”。
我把报错复制给ChatGPT,它解释说“这是强制解包nil导致的,SFSpeechRecognizer可能在某些设备上返回nil,需要先判断是否为nil”。然后给了修改后的代码,加了“guard let speechRecognizer = SFSpeechRecognizer(…) else { return }”。我照着改了,这次不闪退了,但点麦克风按钮还是没反应——ChatGPT又说“可能是没申请麦克风权限,需要在info.plist中添加NSMicrophoneUsageDescription键”。
我花了半小时在Xcode里找info.plist,终于在“项目 -> Info -> Custom iOS Target Properties”里找到这个列表,点“+”号添加键值对,键填“NSMicrophoneUsageDescription”,值填“需要麦克风权限来录制语音”。改完再运行,终于弹出“是否允许使用麦克风”的弹窗,但点“允许”后,还是录不了音——Cursor说“可能是Speech框架没正确链接”,我又回去检查框架,来回折腾两小时,还是没搞定。
视频功能更惨:我想让小朋友拍10秒视频,结果Cursor生成的代码要么只能拍照片,要么录完视频保存不了。有次代码里写着“let videoURL = outputFileURL”,我根本不知道“outputFileURL”是哪个路径,为什么视频存不进去。每次问Cursor,它都会给新的代码片段,但这些片段像“零散的零件”,我拼不起来——比如它给了“视频录制的代码”,又给了“视频转文字的代码”,但没说这两部分怎么连起来,也没说AI接口怎么调用。
试错成本压垮我:两周只改对3个按钮颜色
最磨人的是“试错成本”。我每天下班花3小时折腾:先跟Cursor描述问题,等它给代码,粘到Xcode里运行,看报错,复制报错给ChatGPT,再根据解释改代码,再运行——循环往复。
有次为了让“云朵输入框”点击时变浅粉色,我跟Cursor说“点击云朵按钮时,背景色从#FFE6F2变成#FFCCE5”。它给了一段代码:
Button(action: {
self.isTapped = true
}) {
Text("说说话")
.background(self.isTapped ? Color(hex: "#FFCCE5") : Color(hex: "#FFE6F2"))
}
粘进去后报错“Cannot call value of non-function type ‘Color’”,ChatGPT说“Color没有hex初始化方法,需要自定义扩展”。我又让Cursor生成“Color的hex扩展代码”,粘进去后又报“Ambiguous reference to member ‘init(red:green:blue:alpha:’”——原来扩展代码里的RGB计算有问题。
就这么一个“按钮变色”的小功能,我改了4个小时,最后还是用Figma截了个变色的图,做成图片按钮才勉强实现。
两周下来,我没搞定语音输入,没搞定视频拍摄,甚至连“日记列表怎么显示保存的内容”都没弄明白。Xcode里的项目文件夹乱得像垃圾堆,有Cursor给的“ViewController.swift”“ContentView.swift”,还有我自己瞎建的“DinosaurView.swift”,不知道哪个有用哪个没用。
最后一次尝试时,我点运行,APP终于能打开了——显示出我设计的浅粉色背景和小恐龙标题,但点“说说话”没反应,点“拍一拍”直接闪退。我盯着屏幕看了5分钟,突然觉得特别累:我能画出好看的界面,能想清楚交互逻辑,但这些“代码零件”我根本拼不起来,Cursor给的代码像“没有说明书的乐高”,我连第一步“插哪个零件”都不知道。
最后:停在设计页,但也不算完全白折腾
现在我的“小恐龙日记APP”,只留下了Figma里的完整设计稿:从启动页到日记列表,从语音输入动画到视频滤镜效果,每个页面的尺寸、颜色、字体都标得清清楚楚。我甚至做了个高保真原型,点一下麦克风按钮,能模拟出“小太阳旋转→语音转文字→生成日记”的整个流程——但也只能到这了。
我后来想通了,不是Cursor不好用,是我太天真了:我以为“描述需求”就能跳过“学代码”这个核心步骤,但iOS开发根本不是“写几行界面代码”这么简单——要懂框架(UIKit还是SwiftUI)、要懂权限配置、要懂数据存储、要懂接口调用,这些对纯视觉设计师来说,根本不是“用个AI工具”就能绕过去的。
更多推荐


所有评论(0)