我不会写代码,但我做了一款 iOS App
晚上下班回家想看一部电影,打开各种视频 App,面对铺天盖地的推荐列表,反而不知道该看什么了。在沙发上翻了二十分钟,最后什么也没看,直接睡了。
我在 Qoder 团队做运营,不会写代码。但有个念头:我能不能做一个 App,每天就给我推荐几部电影,我刷一刷就能决定今晚看什么。不喜欢就换,喜欢就收藏。不要那些”猜你喜欢”的算法,不要社区,就是每天五部,看海报做决定。
受同事们启发,中午吃完饭,我决定不再光想了,打开 Qoder 不服就干。
后面的事让我挺意外。我确实做出来了,一款叫《Daily Movie》的 iOS App,能在 iPhone 上跑,体验还不错。但过程远没有想象中顺利:环境配置折腾了两小时,分享功能直接导致 App 闪退,界面做出来一看就是“AI 做的”。之后刷小某书,看到一个很火的比喻:Vibe Coding 能赚钱,就像买了咖啡机就以为能开咖啡厅。我觉得挺贴切的。纯靠感觉让 AI 干活,能起步,但跑不远。后来帮我把坑填上的,是把需求说得更清楚,以及给 Agent 加载专业规范(Qoder 和行业都叫 Skills,后面细说)。
从想法到能跑的 App
01、用 Quest 模式搭建 App 框架
打开 Qoder,从左上角选择 Quest 模式,

进入后界面上有三个模板可以选:
-
Spec 驱动(Code with Spec) 适合有明确需求和方案的开发任务
-
原型探索 (Prototype Demos) 适合快速把想法变成可预览的原型
-
创建工具 (Create Tools) 适合做工具类应用

我要做的是一个 App 原型,所以选了 Prototype Demos。
这三个模板的分法值得说一下。Prototype Demos 适合”我有个想法,先跑起来看看”,本质上就是结构化的 Vibe Coding:你描述一个模糊的目标,Agent 帮你快速探索。而 Code with Spec 走的是另一条路:先写清楚你要什么、验收标准是什么,Agent 再按 Spec 执行。一个是从模糊到清晰,一个是从清晰到完成。后面会讲到,我这次用 Prototype Demos 起步,但真正让项目没有失控的,恰恰是我在过程中逐渐学会的那些“Spec 式思维”。
跟 Agent 协作有个容易踩的坑:你越想控制每一步,反而越容易走偏。更好的做法是描述目的地,而不是规定路线。组内有个开发同学说得好:澄清好意图,Spec 会自然而然就长出来。所以我没有去说“先创建一个 React Native 项目,然后配置导航路由…”,而是把《Daily Movie》的整体构思、想要的功能一股脑倒了出来:每天推荐 5 部电影,支持上下滑动,能收藏,要有电影院的感觉。意图越具体,Agent 第一版的完成度就越高。Qoder Quest 1.0 反应很快,给我输出了两套方案:一套是在 QStudio 内运行,另一套是生成一个独立的 React Native 项目。我没怎么犹豫,选了方案二。

没过多久,Quest 就把 App 的原型搭出来了,并告诉了我该项目的位置。
然后问题来了:运行环境怎么配?
我对着 Quest 一顿刨根问底。这一步折腾了大概两个小时,主要卡在两个地方:一是 Node.js 版本不对导致依赖装不上,二是 iOS 模拟器需要单独下载,Xcode 里的操作对我来说完全是天书。中间有个瞬间我盯着 Xcode 那个巨大的界面,满屏都是我不认识的按钮和菜单,真的想关掉电脑算了。好在每次报错我都直接截图丢给 Qoder,它都能帮我定位原因和给出解法。
说来讽刺,“写代码”这件事 Qoder 几分钟就搞定了,真正折腾我的全是代码之外的东西:iOS 模拟器怎么装、Xcode 里那些天书般的选项等。Agent 能帮你写代码,但这些环境和工具的问题,Quest 只能给你建议,拍板还得靠你自己。
最后在 iOS 模拟器上用 Expo Go 成功启动了《Daily Movie》。

App 第一次跑起来的时候,我愣了几秒,然后截了个图发到工作群里。同事回了一句“这是你做的?”,我说“严格来说是 Quest 做的,但想法是我的”。虽然用的还是 Mock 数据,但主界面和详情页都有了,整体框架已经像那么回事了。
02、接入真实的电影数据
假数据终究是假的,得换成真实的电影信息才行。数据从哪来呢?
我让 Qoder 推荐合适的数据源,它建议用 TMDb(The Movie Database),提供免费的电影数据 API,全球几百万部电影的信息都能拿到,注册就能用,非常适合个人项目。我按照流程去注册了账号,申请开发者权限,拿到 API Key 后告诉 Qoder 去做对接,很顺利地就把真实数据拿到了。
打开 App,看到一张张真实的电影海报加载出来,感觉一下子就“活”了。

03、用 Skills 干掉“AI 味”
数据有了,接下来就是设计界面。
我跟 Qoder 说想要那种电影院暗场的感觉,电影卡片要大,海报是主角。因为这个 App 的核心就是看海报做决定,海报看不清整个体验就垮了。点击卡片之后能看到完整的电影信息,包括评分、导演、演员表和剧情简介,还要有收藏按钮和跳转到 TMDb 网页的链接。
界面设计这块,调整了三四轮:
-
第一版卡片太小了,海报看不清 → 「把卡片高度调大一点,占屏幕 2/3 的高度」
-
评分数字太小 → 「评分数字再大一号,加粗」
-
底部文字和海报之间过渡太生硬 → 「在海报底部加一个渐变,从透明过渡到黑色」
结果调了三轮还是觉得差点意思,说不上哪里不对,就是有一股“AI 味”。布局没问题,但细节上缺乏设计感。
这种感觉很多人应该有共鸣。AI 生成的界面往往间距均匀到机械,颜色搭配正确但缺乏节奏,就像一道按照菜谱做的菜,调料克数都对,但就是少了那口”锅气”。Y Combinator 创始人 Paul Graham 有个观点:当你不能提供装饰时,你必须提供实质内容。AI 恰好相反,什么装饰都能给你,但缺少的是判断力,比如这个间距到底该 12px 还是 16px,这个字该加粗还是调灰。“能用”和“想用”之间,差的就是这层品味。
AI 本身没有品味,但你可以给它加载品味。有人说让 AI 拥有品味可能是下一个 transformer 级别的突破,我不知道是不是,但至少在我这个项目里,给 AI 装上“品味”(也就是 Skills)带来的提升,比让它多写十轮代码都大。
这时候我想到可以试试 Skills。简单说就是给 Qoder 加载特定领域的专业知识包。我装了一个叫 frontend-design 的 Skill,然后让 Qoder 按照里面的设计规范重新优化界面。
这里有个小技巧值得分享:装了 Skill 之后,指令要写得具体。

Skill 给了 AI 具体的设计标准,你的指令越精准,出来的东西就越靠谱。
但说实话当时我没想那么多,只是觉得:装了 Skill 之后效果好太多了。Skill 跟普通文档不一样的地方在于,它不是写完就扔在那里落灰,而是 AI 每次干活都会读取的“活规范”,用一次就生效一次,不存在过期的问题。

效果差别挺明显的。之前的界面像是“能用”,加了 Skill 之后的界面像是“想用”。卡片的圆角、字体层级、间距节奏都更舒服了,不再是那种千篇一律的 AI 审美。
就这样,Quest 负责搭建和实现,Skills 负责把控品质,最终做出来的效果让我挺惊喜的。


04、收藏夹功能
这个功能的需求很直接:“我想把喜欢的电影保存到一个收藏夹里,下次打开 App 还能看到。收藏夹是一个单独的页面,展示收藏过的所有电影。”
Quest 用了一个叫 AsyncStorage 的东西,简单理解就是手机本地的一个”小仓库”。收藏的电影数据就存在这个仓库里,关掉 App 再打开还在,不需要联网也能看。这个功能实现得很顺利,没踩什么坑。

05、分享功能踩坑
这一步踩大坑了,最初我跟 Qoder 说:”我想做一个精美的图片分享卡片,带电影海报和二维码,用户可以保存图片分享。” Qoder 很快帮我实现了一个方案:用 react-native-view-shot 截图,用 expo-sharing 分享。
结果装上之后,App 直接闪退了。就是那种点一下、黑屏、弹回桌面的闪退,干净利落,没有任何挣扎。
我把报错信息甩给 Qoder,它分析完告诉我:这些功能依赖的原生模块在 Expo Go 环境中跑不了,需要构建独立的 App 版本才行。而构建独立版本意味着要搞 Apple Developer 账号、签名证书之类的东西,对我来说太复杂了。
我不死心,又试了两三种替代思路,每种都有各自的问题。来回折腾了两个多小时,说实话挺沮丧的,因为分享卡片是我一开始就特别想做的功能。但最后还是认了,简化方案:改用纯文字内容加 React Native 原生分享组件。
最终分享内容长这样:

没有精美的卡片,但能用、稳定。
这件事给我最大的教训就是:先做一个能跑的版本,复杂的后续继续迭代。
AI 在“标准路径”上效率确实高,但碰到平台边界(Expo Go 的原生模块限制、Apple Developer 的证书体系这些),它只能告诉你问题在哪,没法替你决定怎么办。最后把我从坑里捞出来的就是一个字:砍。砍掉图片分享卡片改用纯文字,省下时间去打磨真正重要的功能。说实话砍的时候挺不甘心的,但回头看这个决定做的也对,不然我就卡死在这儿了。
06、细节打磨与性能优化
基本功能做完之后,我又花了一些时间跟 Quest 打磨细节:
-
「不感兴趣」按钮: 每天推荐的 5 部电影里有不想看的?点击「Not for me」换一部。但每天只能换 3 部,次数用尽就会提示「明天再来」。这个设计是故意的,如果无限换,推荐就变成了随机播放器,”每日精选”的仪式感就没了。而且适当限制选项,反而能帮你更快做决定。对抗选择困难症,有时候少即是多。
-
每日刷新逻辑: 五部电影的刷新时间按 UTC+8 来算,也就是北京时间零点更新。这个 bug 是我自己用出来的,凌晨一点打开还是昨天的片单,以为算法坏了,排查半天才发现是时区的问题。运营的直觉终于派上用场了。
-
触觉反馈: 滑动切换、点击按钮、收藏电影的时候,手机会有轻微的震动反馈,这个效果加上去之后体验提升很明显,操作手感接近 iPhone 原生应用。
功能细节调完之后,我发现一个问题:App 在快速滑动切换电影卡片的时候,偶尔会有一点点卡顿,海报图片加载也不够流畅。这时候我想起之前装 frontend-design 的经验,去 Skills 里找了找,发现有一个叫 vercel-react-native-skills 的 Skill,是 Vercel 团队出的 React Native 和 Expo 最佳实践合集,专门解决移动端性能问题。
装上之后,我跟 Qoder 说:”参考 vercel-react-native-skills 的规范,优化电影卡片列表的滑动性能和海报图片加载。”

Quest 根据这个 Skill 里的规则做了一整套优化:海报图片换了更高效的加载方式,打开 App 时先显示一个模糊色块,然后平滑过渡到高清图,不会出现白屏闪烁;背景大图做了智能压缩,体积缩小了好几倍但在手机上看不出画质差别;滑动列表的底层逻辑也做了清理,划过去的内容会自动释放内存,不会越刷越卡。这些东西我完全不懂原理,但效果是实打实的,优化之后再在真机上滑,明显比之前顺畅了,海报图片几乎是即刷即出。
frontend-design 让界面不再像 AI 模板,vercel-react-native-skills 让滑动和加载跟得上手速。两个 Skill 配合下来,App 的质感确实上了一个台阶。
07、做完之后想了想
社媒上,发现好多人也在聊类似的事。有人说 Vibe Coding 很快就会撞墙,项目一大就开始“漂移”,Agent 改着改着连自己改了什么都说不清。也有人在说只有 SDD(Spec-Driven Development)是 YYDS,先把需求和架构文档写清楚再让 Agent 动手。我回顾了下,这不就是我这一路的经历吗?一开始纯靠感觉让 AI 干,速度确实快,但碰到环境配置、平台限制、设计品质这些问题就卡住了。后来慢慢学会把需求说得更具体,再给 Agent 装上 Skills,效果才上来。
还有条特别逗的:产品经理说有了 AI 不用等设计师出图了,设计师说有了 AI 不用等开发写代码了,开发说有了 AI 不用等 PM 写需求了。我看完想,那我一个运营,是不是把这三位全绕过去了?毕竟用户有需求和反馈是永恒的。
此外有句话我挺有感触的:“如果 Agent 能写代码,它也能更新计划。就让它做。” Skills 就更进一步了,Agent 不用自己猜什么是好的 SOP,直接读规范照做就行。
我现在倾向于觉得,Vibe Coding 是很好的起点,但光靠它走不完全程。如果当初我从 Code with Spec 开始,先花 10 分钟把需求和验收标准写清楚,分享功能那个坑可能根本不会踩。当然,没有最初那股“先试试看”的冲动,我可能到现在还在想而已。所以两个都需要,只是顺序和比例的问题。
Karpathy 说未来的软件会变得高度个人化,每个人根据自己的需求让 AI 现场生成一个 App,用完就扔,不需要去 App Store 下载别人做好的通用产品。他管这个叫 “bespoke software”,还打了个比方:现在的软件像用砖头砌的城堡,以后更像一锅沸腾的汤,代码随用随煮,喝完就没了。

我一看就觉得,这说的不就是《Daily Movie》吗?每天五部电影、上下滑、看海报做决定,这种需求太具体了,App Store 里不可能有人专门做一个完全符合我心意的给我用。但我花了一天就做出来了,虽然只给自己用,体验却比那些“大而全”的电影 App 合我心意得多。
不过做完之后回想,有个事挺讽刺的:我花时间最多的,不是“做”这件事,而是“做成一个 iOS App”这件事。代码 Qoder 很快就写完了,剩下的时间全在跟 iOS 生态搏斗:Xcode、模拟器、Expo Go 的原生模块限制、Apple Developer 证书。2026 年了, 99% 的服务还没有 AI 友好的接口,用户还得手动操作网页,”What am I, a computer?”。我深有同感,对着 Xcode 的时候就是这个心情。
如果按 Karpathy 说的,未来的软件不需要是 App,不需要 App Store,不需要签名证书,代码按需生成用完就没了,那这篇文章里一半的坑根本不会存在。但今天还没到那一步,我们卡在一个过渡期:AI 写代码的能力已经到了,代码要跑起来的那套基础设施还是老一套。但是对于有特定需求又愿意折腾的人来说,门槛确实比以前低太多了,而且还在快速降低。
08、最终成果
到这里,《Daily Movie》的开发先告一段落,我在 iPhone 真机上安装了 Expo Go,扫码运行了一下,整体体验比我预期的要好不少,滑动流畅,交互丝滑。
总结一下最终版的 App 体验:
-
打开就能用,不需要注册登录
-
每天 5 部精选 TMDb 评分 6 以上的电影,上下滑动浏览
-
点击查看详情,一键收藏和分享
-
触觉反馈加持,操作手感接近原生
后续我打算继续研究怎么把 App 正式打包安装到自己的 iPhone 上,脱离 Expo Go,真正”拥有”这款属于自己的 App。这个坑,等我踩完了再来写。
09、给想用 AI 做 App 的朋友几条建议
-
先选对模板:如果你是想验证一个想法、做个能看的 demo,选 Prototype Demos;如果你有明确的功能需求和技术方案,选 Code with Spec。
-
描述目的地,而不是规定路线:”做一个电影推荐 App” 远不如 “做一个每天推荐 5 部电影、支持上下滑动浏览、可收藏的 iOS App”。你说清楚”要什么”,让 AI 自己决定”怎么做”,第一版的完成度会高很多。
-
遇到报错别慌:截图或复制报错信息直接发给 Qoder,大部分环境配置问题它都能定位。
-
装几个 Skills:如果你做前端页面,装个 frontend-design;如果你做内容类项目,装个 seo-content。装之前和装之后的效果差距肉眼可见,早装早受益。去 skills.sh 看看有什么适合你的。
-
Vibe 起步,Spec 收尾:快速验证想法用 Prototype Demos 没问题。但如果你要做的不只是 demo,认真考虑从 Code with Spec 开始。花 10 分钟把需求写清楚(要什么功能、不要什么功能、验收标准是什么),比后面花两小时踩坑划算得多。意图越清晰,AI 走偏的概率越低。
回头看
从打开 Qoder 到做出一个能在 iPhone 上流畅运行的 App,全程我没有写过一行代码。
整个过程中有一点让我挺意外的:我没有那种“被 AI 拖着走”的焦虑感。想了想,可能跟 Quest 模式的节奏有关系,它先问你要做什么,不清楚的会弹出问题卡片让你快速澄清意图,确认了再自主执行。
回头看,Qoder Quest 帮我把想法变成了能跑的代码,Skills 则在设计和性能这些我完全不懂的地方兜了底。没有 Skills 的话,App 大概率还是那种一眼就能看出“AI 做的”的水平。
过程中踩了不少坑:环境配置折腾了两小时,分享功能最后不得不砍需求。但每次撞墙,回过头看原因都差不多:要么是我没想清楚自己到底要什么,要么是低估了现实的限制。解决办法也没什么花样,就是停下来,重新想清楚,再让 Agent 去干。
《Daily Movie》不算完美,但它是我做出来的(好吧,是 Quest 做出来的,但想法是我的)。做完之后最大的感受不是“原来我也行”,而是发现跟 Agent 协作这件事,会不会写代码真的没那么重要。重要的是你能不能把自己想要的东西说清楚。
如果你手里也有一个想做很久的 App,不用等“准备好了”。打开 Qoder 切换到 Quest 模式,把你的想法说出来,从能跑的版本开始。中间肯定会撞墙,到时候停下来想想:我到底要什么,什么可以先不要。
一个不会写代码的运营,给自己做了一款专属自己心意的 App。想想还挺有意思的。

关注我,掌握Qoder最新动态
夜雨聆风
