Press "Enter" to skip to content

Huahua's Tech Road

【独立开发】我的第一个 Vibe Coding App 上线了!从零到 App Store 的两周“缝合”之旅

断断续续搞了两个星期,我的第一个完全基于 Vibe Coding(氛围编程/AI 辅助编程) 的 iOS App 终于成功上架 App Store 了!

作为一名纯粹的独立开发者,出于隐私保护,具体 App 的名字和链接这里就不公开了。只能坦白说:它又是一个 Days(倒数日)+ Todo List(待办清单)的“缝合怪”。 似乎现在 AI 辅助开发的独立项目,都逃不过这个产品怪圈。但没关系,市面上的同类 App 确实没法完全满足我的痛点,自己动手,量身定制,用起来才最顺手。

今天想聊聊这两周的心路历程,以及纯 AI 辅助开发、无后端架构在 iOS 生态里踩过的那些大坑。

🧠 从 SwiftUI 小白到“缝合大师”

最神奇的地方在于:在动工之前,我对 Swift 和 SwiftUI 的知识储备几乎为零。

经过这两周被 AI 疯狂“喂代码”,我竟然也能对着那些 .swift 文件看个七七八八了。虽然让我从头徒手写一个功能依然是不可能的(这辈子都不可能),但现在看着代码改改 View 的高度、换个颜色、调个 Padding,或者微调一下逻辑判断,居然已经轻车熟路。

这种“看不懂全貌但能改局部”的状态,大概就是 Vibe Coding 时代开发者的生存法则吧:只要 AI 框架搭得好,微调补丁没烦恼。

🛠️ AI 结对编程工具的“轮岗”心得

在这两周里,我高强度体验了市面上几大主流 AI 模型,可以说是“货比三家”:

  • Gemini:由于已经订阅了了,本想作为主力,但在 Xcode 环境中的实际表现实在有些差强人意。最搞笑的是,有次我让它优化一段逻辑,它贴心地在回复里写了一行:// keep the original code然后反手就把我原本那几百行代码全删了,只剩下一个空壳函数吐在屏幕上。 当时我盯着屏幕,CPU 都快烧了:我是让你优化,不是让你给我搞“极简主义”啊!
  • Claude Agent:聪明是真的聪明,代码质量极高,但太贵了!高频对话下那个 Token 的消耗速度,钱包高呼吃不消。
  • ChatGPT (Codex/Plus):最后只能转战Codex,Plus的每个月 $20 的订阅费,limit不高,一个小功能可能就要2%的周用量,但省省、省着用,勉强够用。性价比目前最高。

🫠 翻车现场:跟 AI 死磕“液态玻璃”特效

既然是量身定制,免不了想在 UI 上搞点视觉高光。我当时脑子一热,非要在主界面搞一个炫酷的液态玻璃(Liquid Glass/Gooey)交互特效

于是我开始指挥 AI 疯狂输出 SwiftUI 代码。结果这一折腾,直接死磕了好几天:

AI 一会儿给出一堆复杂的 Canvas 加上各种高级滤镜;一会儿让模拟器掉帧到卡顿;一会儿在实机上渲染出来一团浆糊。

跟 AI 在这卷了好几天,改了无数个版本后,我终于精疲力竭地悟了:现阶段的 AI 在处理这种极其玄学的、高阶定制的图形渲染和动效时,底层逻辑还是差了口气。 最后我心一横,直接把这堆花里胡哨的代码全删了,老老实实换回了系统自带的 TabView。嗯,真香,省电且稳定。看来现在的 AI 也就那样嘛,高难度整活儿的时候还是容易现原形。

☁️ 轻量级技术栈:StoreKit + iCloud Kit

因为是个人独立项目,为了省心和控制成本,我直接砍掉了服务器,做到无需注册、无需登录,纯本地加云端同步。

  • 存储与同步:采用 SwiftData + CloudKit 的方案。
  • 付费墙:接入 StoreKit 实现 App 内购买。

💡 踩坑:被 AI 模型“背刺”的 Data Model

刚开始的时候,我让 Gemini 帮我设计数据模型(Model)。AI 直接把某些数据类型给写死了,完全没有预留扩展空间。导致我后期硬着头皮写了一个 Migration(数据迁移),小心翼翼地把旧字段的数据全部搬到新架构上。

搞崩心态的 App Store 上架改名风波

由于一开始没查重,快收尾时才发现想好的 App 名字已经被别人注册了

  • Bundle Identifier:这个是不能改的。
  • CloudKit Container:虽然可以修改,但伴随着极高的数据丢失风险。在没有后端备份的情况下,操作起来让人心惊肉跳。最后折腾了一大圈才理顺,建议大家开工前先去 App Store Connect 里把名字占了。

🛒 StoreKit 订阅审核与测试暗礁

第一次提交包含 Subscription(订阅) 的版本,苹果的审核要求比想象中严格得多。

Xcode 自带的 StoreKit Configuration 虽然方便,但它毕竟是个“模拟器”。强烈建议在打包前,必须用 Sandbox(沙盒环境)再完整测试一遍。 很多关于收据验证、跨设备恢复购买的细节,只有在沙盒里才能暴露出真实问题。

🤫 留给自己的“后门”:隐藏的开发者模式

为了方便测试和截 Demo 图,我在代码里做了一些“小手脚”:

  • Debug 模式下:开启了内购豁免,直接绕过 Subscription 限制。
  • 数据工具箱:内置了大量的数据导入导出、一键生成测试数据的功能。

重点来了——为了方便我在正式版里排查问题,这个“开发者模式”在 Release 模式下其实也可以进入! 至于触发方式嘛……极其隐蔽,一般人我是不会告诉他的(笑)。

结语

两周的 Vibe Coding,虽然一直在跟 AI “扯皮”、被动效折磨、最后跟苹果的生态规则“死磕”,但看到 App 成功上线的那一刻,成就感还是满格的。

这个 App 完美地实现了我对 Days 和 Todo 的所有幻想。接下来就是自己深度使用,然后继续让 AI 帮我打补丁了。

最终花费:ChatGPT Plus $20 + App 开发者年费 $99 = $120。看来还是要多做几个App才能回本啊~能回本吗?

困在郊区的青春期:当城市规划剥夺了我们的“双腿”

随便一个周末,如果你去观察那些宽阔的林荫大道或是大型Plaza的停车场,你会发现一个有趣的现象:这里的主力司机往往是疲于奔命的中年父母。看着小孩一天天长大,我有时会忍不住想象十几年后的场景——在他拿到驾照之前的漫长青春期里,我大概率会化身为他的“全职Uber司机”,穿梭在学校、补习班、球场和同学家之间。

在湾区这样典型的美国郊区(Suburbia),汽车几乎是参与社会生活的“唯一门票”。对于青少年,或是因为各种原因无法驾车的成年人/老年人来说,这种缺乏公共交通的城市形态,往往意味着一种隐形的“软禁”。

无车群体的“隐形软禁”

1. 独立性与自主权的剥夺 在郊区,去任何地方都需要“请求许可并预约司机”。青少年无法自发地探索世界,生活轨迹被死死限制在家庭和学校的固定两点一线。每一次出门都不再是一次随性的决定,而是一个需要全家协调的物流项目。这种对成年人的高度依赖,在很大程度上延迟了他们独立人格的建立。

2. 社交隔离与心理健康 心理学上有一个词叫“Suburban Isolation”(郊区孤立症)。在这里,见朋友的物理成本极高,导致线下的、非结构化的社交大幅减少。郊区极其缺乏“第三空间”——那些适合闲逛的安全街区、步行可达的街角咖啡馆或便利店。这种物理上的孤立,无形中加剧了青少年的孤独感。

3. 机会的不平等 没有车,意味着你连去快餐店打份零工、去社区图书馆做志愿者,或者参加一个不在校内的兴趣小组都变得异常困难。出行的壁垒,直接转化为了社会参与度的壁垒。

历史溯源:为汽车而建,而非为“人”而建

这种极其依赖汽车的城市形态并非自然演化,而是刻意规划的结果。

二战后,伴随着汽车工业的崛起和《联邦资助公路法案》的推行,美国迎来了轰轰烈烈的郊区化狂潮。人们逃离拥挤的市中心,在广袤的土地上建起了带有大草坪的独栋别墅。

然而,真正将公共交通“赶尽杀绝”的,是区划法(Euclidean Zoning)。这种严苛的城市规划制度将居住区、商业区和工业区进行了绝对的物理隔离。结果就是,买一瓶酱油你可能都需要开车3英里跨越几个街区。在这种极低的人口密度和高度分散的布局下,建立覆盖面广、班次密集的公共交通系统在经济上变得完全不可行。

与此同时,“以车为本”的街道设计让宽阔的马路占据了主导,人行道变得断断续续,甚至完全消失。对于没有包裹在钢铁外壳里的人来说,外面的世界充满了敌意。

镜像对比:如果生在别处?

为了更直观地理解郊区规划的影响,我们不妨看看其他几种截然不同的城市形态:

  • 纽约市(轨道上的“城市游乐场”): 纽约拥有极高的密度和24小时运作的MTA地铁系统。这里的青少年极度独立,城市就是他们的游乐场。他们从小学习如何看地图导航、如何与各色人群打交道,社会化程度极高。当然,代价是他们也需要过早地面对复杂城市环境中的安全隐患。
  • 微型小镇(步行乌托邦): 想象一个方圆只有1公里的小镇。这里的尺度极小,一切都在步行或自行车的辐射范围内,根本不需要公共交通。这种环境催生了强烈的熟人社会属性和社区凝聚力,青少年依靠双腿就能获得完全的自由。缺点在于资源的上限很低,可能只有一家小卖部和一个球场。
  • 中国二三线城市(混合规划的胜利): 这是与美国郊区反差最强烈的形态。住宅区与底商高度融合——楼下就是便利店、理发店和小吃街。再加上极其发达的廉价公交网、随处可见的共享单车和“小电驴”,青少年的出行自由度极高。放学后可以和同学走路去买烤肠,或者坐几站公交回家。同样,非驾驶的老年人也能完全独立地买菜、逛公园,生活自理能力不受年龄或驾照的限制。

结语

自由出行的权利,本不应该与是否拥有一辆车和一本驾照强制绑定。

当我们审视今天的郊区时,或许应该更多地思考如何引入“15分钟城市”的理念,如何在漫无边际的住宅区中融入微型商业,以及如何建立安全的微观出行(Micro-mobility)网络。

把街道的连接权还给那些没有方向盘的人,才是真正人性化社区的开始。

HDR Brightness Standards vs. Reality

花花:

1000nit hlg推荐的纸白95% reflection 只有203nit,给高光留了2.5档左右。但203nit远远低于一般的sdr显示器的标准亮度,300-450nit,会让人觉得HDR怎么这么暗啊。Apple MBP 1600nits xdr的屏幕,在显示75% HLG信号的时候大概是450nits,给高光留了大概留了2档,个人觉得是不太够了。而最新的iPad Pro和Studio Display XDR SDR都干到了1000nits,HDR则是2000nits,差距只有1档(当然HDR时的纸白应该不会到1000nits)你是怎么看待这个问题的。

Gemini:

这是一个非常核心且击中当前 HDR 发展痛点的问题。你观察到的现象,正是目前影视工业界标准与消费级显示设备(尤其是追求高亮度的移动端和 PC 端设备)之间产生的剧烈摩擦。

我们可以把这个问题拆解为“规范与环境的脱节”、“厂商的妥协”以及“高亮时代的 HDR 究竟应该怎么做”三个层面来看。

1. 规范与环境的脱节:为什么 203 nits 会让人觉得暗?

ITU-R BT.2408 规范将 HDR 的参考白(Diffuse White / 纸白)定在 203 nits,并在上面留出巨大的空间给高光(Specular Highlights)。这个标准的制定有一个非常严格的隐藏前提:暗室环境(通常是 5 nits 甚至更低的背景光)。

在符合标准的专业调色室里,203 nits 的纸白是非常舒适且有足够反差的。但问题在于,绝大多数消费者是在明亮的办公室、客厅甚至户外使用屏幕。在这些高环境光下,人眼瞳孔会缩小,人们早已经习惯了将 SDR 显示器的亮度拉到 300-450 nits 甚至更高来对抗反光。

当播放严格按照 203 nits 纸白制作的 HDR 视频时,整体的平均图像亮度(APL)瞬间掉到了消费者习惯的 SDR 亮度的一半以下。所以,普通观众最直观的感受就是:“怎么一切换到 HDR,画面反而变暗了?”

2. Apple 的妥协:以牺牲动态范围换取环境适应性

你提到 MBP 1600-nit XDR 屏幕在显示 75% HLG 信号时把亮度推到了约 450 nits,这正是 Apple 针对上述痛点做出的“强行干预”。

这其实是一种基于环境光和设备特性的映射策略(Tone Mapping)。Apple 知道用户在日常环境中无法接受 203 nits 的纸白,所以他们拉高了 APL,让中性灰和纸白看起来和高亮 SDR 一样通透。

但正如你敏锐察觉到的,这个做法付出了惨痛的代价:高光余量(Headroom)被严重挤压。

  • 如果纸白是 203 nits,到 1600 nits 峰值,你拥有接近 3 档 的高光动态范围,画面中的阳光、金属反光、火焰会极具爆发力和立体感。
  • 如果纸白被拉到 450 nits,到 1600 nits 峰值,只剩下不到 2 档

这就导致 HDR 失去了它原本的意义——它不再是“高动态范围”,而变成了“全局高亮度的 SDR”,失去了那种扎实的中耀度和刺眼的高光反差带来的真实临场感。

3. 1000 nits 纸白?高亮面板时代的 HDR 悖论

关于最新的 iPad Pro(Tandem OLED)和 Pro Display XDR,SDR 全局能推到 1000 nits,HDR 峰值 2000 nits。如果真的把纸白放在 1000 nits,距离峰值确实只剩下了可怜的 1 档

但从影像创作和调色逻辑来看,我们绝不能把纸白推到 1000 nits。 * HDR 的本质是对比度,不是瞎眼: 1000 nits 的漫反射白(比如画面里的一张白纸、一件白衬衫)在视觉上是非常刺眼且不自然的。面板提供 1000 nits 的全屏持续亮度,其核心目的是为了在户外强光下依然能看清屏幕内容(对抗极端的环境光),或者是为了真实还原雪山、明亮天空等极高 APL 的宏大场景,而不是用来提高 UI 或基准肤色的亮度。

  • 正确的映射逻辑: 即使在能输出 2000 nits 峰值的屏幕上,如果你在进行影视化创作,基准的肤色和纸白依然应该被压制在 200-300 nits 左右(最多根据环境光做轻微的动态补偿)。这样你才能保留足足 3-4 档 的空间,去展现画面里真正的光源和高光细节。

总结

你看到的实际上是“显示器硬件狂飙”和“影像创作者的意图”之间的冲突。面板厂商(如 Apple)为了让产品在各种复杂光线下都“看起来很亮很清晰”,往往会篡改映射曲线,拉高纸白,但这破坏了 Cinematography 中对于光影反差的精心设计。

对于习惯了专业影像标准的人来说,这种为了迎合大众观感而牺牲高光细节的做法,确实让人觉得“不太够”甚至有些遗憾。

当 “Air” 不再轻盈:从 MacBook Neo 看苹果刀法精准的“阶级森严”

这几天刷遍全网,发现大家都在吐槽刚刚发布的 MacBook Neo。说实话,看到大家都在骂,我就放心了——这说明大家的审美和对产品力的直觉还没被苹果的营销完全“洗脑”。

这款定价 599 美元、打着“重塑入门级体验”旗号的 MacBook Neo,在很多人眼里不仅没能承接 12 寸 MacBook 的轻薄遗志,反而像是一个充满妥协的怪胎。但也正因如此,它才显得如此“苹果”。


规格迷思:尺寸缩了,重量却没减?

很多人心心念念 12 寸 MacBook 的“还魂”,本质上是想要一个能塞进信封、拿在手里轻若无物的极致便携设备。然而,MacBook Neo 给出了一个令人困惑的答案:

  • 屏幕尺寸: 从 Air 的 13.6 英寸缩减到了 13.0 英寸。
  • 机身厚度: 甚至比 MacBook Air 还要厚一点(Neo 是 1.27 厘米,而 M5 Air 只有 1.13 厘米)。
  • 整机重量: 2.7 磅(约 1.23 kg)

发现华点了吗?它和 13.6 英寸的 MacBook Air 重量一模一样。

这意味着,你在牺牲了屏幕面积、牺牲了 MagSafe 接口、牺牲了更窄的边框和更好的显示素质(Neo 仅支持 sRGB 色域)之后,换来的便携性收益几乎为零。在物理空间上,它确实比 Air 短了一点、窄了一点,但在最重要的负重感上,它并没有带来任何质变。

苹果的逻辑很简单:绝对不会做出“以下犯上”的产品。 如果 Neo 真的做到了 1kg 以内,那起售价 1099 美元的 MacBook Air 还怎么卖?苹果的产品线分级,从来不是靠“更好”来驱动,而是靠“阉割得更精准”来维持阶级森严。


A18 Pro:是“清库存”还是“神来之笔”?

这次 Neo 搭载了 iPhone 16 Pro 同款的 A18 Pro 芯片,而不是 M 系列芯片。这让很多唯参数论的玩家大呼坑爹。

但平心而论,A18 Pro 真的差吗?

从目前的跑分来看,A18 Pro 的单核性能甚至能和 M4 掰掰手腕,多核性能则基本对标老当益壮的 M1。最关键的是,它的功耗控制比 M1 还要出色。在 MacBook Neo 这种散热空间更局促(且为了拉开差距可能连散热片都给得极其吝啬)的模具里,一颗手机端的顶级芯片其实是合理的选择。

有人怀疑 M1 是不是没库存了?大概率是的。与其重新生产过时的 M1,不如利用 A18 Pro 成熟的 3nm 产能。而且别忘了,A18 Pro 拥有比 M1 强得多的神经网络引擎(NPU),在 Apple Intelligence 已经全面铺开的 2026 年,这才是这台“入门机”能够流畅运行的核心保障。

但槽点依然存在:8GB 内存起步且不可选配,只有两个 USB-C 接口(其中一个还是 USB 2.0 速率)。这种精准到“刚好让你难受”的配置,是库克时代的典型印记。


“Air”之名,名存实亡

其实,真正让我感到不忿的,不是 Neo 的平庸,而是整个 MacBook Air 甚至 iPad Air 系列的“名不副实”。

在 2008 年,乔布斯从牛皮纸袋里抽出的那台第一代 MacBook Air 惊艳了世界。那时候,“Air”代表的是对物理极限的挑战。但看看现在的 MacBook Air,1.24kg 的重量在 2026 年的轻薄本市场里,只能说是“平庸”。隔壁 Windows 阵营的各种碳纤维、镁铝合金本早已杀进了 900g 甚至 800g 俱乐部。

同样的尴尬也发生在 iPad Air 上。现在的 iPad Air(M4 版)和 Pro 的重量差距微乎其微,甚至在某些维度下,因为 Pro 采用了更先进的串联 OLED 模具,Air 反而显得笨重。

“Air”已经从一个代表“轻盈”的技术指标,变成了一个代表“中端/入门”的营销标签。 现在的 Air,其实就是“普通版”。


展望 2027:新模具的曙光?

全网都在骂 Neo,其实是在宣泄一种期待落空的挫败感。我们太想要一台像 2015 年 12 寸 MacBook 那样、拿在手里像一本杂志、重量在 0.9kg 左右、却能拥有现代 Apple Silicon 效率的机器了。

有传闻说,苹果正在研发一种全新的模具,可能会在明年(2027 年)正式亮相。这套模具将彻底抛弃目前从 M2 时代沿用至今的方正设计,转而追求极致的轻量化。

想象一下:

  • 重量: 低于 1kg(甚至 900g 左右)。
  • 材料: 引入更轻的钛合金中框或更高级的回收铝材。
  • 架构: 配合 M6 芯片(或者能效比更恐怖的 A 系列变种),完全取消风扇,甚至进一步压缩主板体积。

如果苹果真的能做出一台 1kg 以内的 MacBook,那才是真正的“Air 还魂”。到时候,现在的 MacBook Neo 可能会被迅速边缘化,成为一个短命的、过渡性的教育市场特供机。


结语:别急着买,除非你是为了那个 Logo

对于 MacBook Neo,我的建议非常直接:如果你不是预算极度敏感的教育用户,或者单纯为了买个最便宜的苹果 Logo,那就请绕道。

它存在的唯一意义,是让那些原本打算买 Chromebook 或低端 Windows 本的人,再咬咬牙加两百美元进入苹果生态。对于已经习惯了 MacBook Air 体验的人来说,Neo 是一种全方位的倒退。

我们要等的,是明年那个可能会换上新模具、真正重塑“轻薄”定义的革命性产品。至于 Neo?让它在吐槽声中完成它作为“阶梯垫脚石”的历史使命吧。