← 全部项目
📸

DualCam · 前后双摄

一个念头、一个对话,做出一个真的上了 App Store 的双摄相机

✅ 上线了 · 想同时记录"我"和"我看到的"的人 访问 →
Swift / UIKitAVFoundationCore Image / MetalVision / StoreKit 2
产品介绍 →

📊 实时数据接入中(App Store Connect 自动同步)

🎉 DualCam 已经正式上线 App Store,现在全世界都能下载了:点此下载 一个最初只存在于脑子里的念头,从写第一行代码到躺进 App Store,核心就是一段对话。这篇记录它怎么一步步走到这里。

起心动念

有些瞬间,值得被两面同时记下来——旅行时眼前的风景,和我看到风景时的表情;开箱时手里的东西,和我惊喜的那一下;讲解时身后的场景,和正在说话的我。

手机明明有前后两个摄像头,却总让我二选一。所以我想做一件最简单的事:前后一起拍,合成一条视频,所见即所得。

从”能跑通”到”能上架”

它不是一次写完的,是一步步长出来的:

  1. 先证明技术可行 —— 后置 + 前置同时开,把两路画面实时合成成一条带声音的 mp4,存进相册。这是整件事的地基。
  2. 再做得好用 —— 画中画 / 上下分屏 / 左右分屏三种布局,小窗可拖动、双指缩放、磁吸对齐。
  3. 然后做得好玩 —— 美颜、把脸换成动物面具(不愿出镜也能拍)、背景虚化 / 换虚拟背景、把自己抠出来”站进”后置场景里。
  4. 最后加了点灵魂 —— 「震惊模式」:前置盯着你的脸,你一张嘴做出震惊表情,后置画面”啪”地猛拉近 + 抖一下 + 漫画集中线特效。纯粹因为好玩。

底层上,预览和录制走的是同一条渲染管线,所以你在屏幕上看到什么,录出来就是什么。所有 AI 能力(人脸检测、人物分割)都跑在设备本地,不联网、不收集任何数据。

真机才会暴露的坑

PPT 上的功能都”能用”,真正的工程是把真机上才冒出来的问题一个个填平:画面上下颠倒、录完存不进相册(写入器在收尾前被提前释放)、小窗一大块白边(位图按 3 倍渲染)、翻转一点就崩(Swift 的独占访问冲突)、加了水印后整个 App 卡死(两个线程并发写同一个缓存把字典写坏了)……

这些不是套模板能绕过去的。能把它们一个个定位、修掉,才是”做出来”和”演示一下”的区别。

走向全球:12 种语言 + 会员

要上架,光功能不够:

上架 App Store:真正的”最后一公里”

写完 App 只是一半。要让别人能在 App Store 下载到,还要:

每一步都踩过、查过、填过。

上架审核记:一次问询,三天通过

提交之后没有秒过,苹果在审核里发来一条问询——核心是隐私:这是一个会检测人脸(动物面具、震惊变焦都用到)、还会抠人像的相机 App,审核员要确认:你到底拿用户的人脸 / 生物特征数据做了什么?是否上传、是否留存?

这其实是相机/人脸类 App 最常见的一道关。我的回复很直接,因为产品从第一天就是这么设计的:

同时把这一条明确写进了隐私政策。在 App Store Connect 的”解决方案中心”回复说明 + 更新隐私政策链接——没有重新打包、没有传新版本,纯粹是回复澄清。

约三天后,状态变成”已上架”。 一道问询,一次回复,过了。

经验:相机/人脸类 App,隐私问询几乎必问。与其等被问,不如一开始就把”全部本地处理、不留存、不上传”做成产品事实,并写进隐私政策——回复时就是一句话的事。

这是用 AI Coding 做出来的

从第一行代码到提交 App Store,这个 App 是我 + 一个 AI 编程助手用对话做出来的。

它到达的程度不是 Demo,是真东西:原生 iOS App、分层架构、实时计算机视觉跑在手机上、完整会员系统、12 国语言、修复了一串真·疑难 bug,并且真的上了 App Store

从一个念头,到一个上了架、能被全世界下载的成品——核心就是一段对话。 AI 没有取代”想做什么”和”好不好”的判断;但”怎么把它做出来、怎么送上架、怎么过审”,它真的能扛下来。

状态

已上线 App Store画中画相机 · 前后双摄同录,现在就能下载。海外区已上架,中国区备案进行中。

V2.0 已更新上线:新增照片模式相册多选删除 + 保存动效、重做的会员页、一轮性能与发热优化;并把”不支持双摄的设备”从一堵”不支持”墙,改成优雅降级为可用的单摄相机——这正是这次过审的关键(见下方构建笔记)。

构建笔记

翻车

🧩 被苹果拒了两次,最后我没有'挡住 iPad',而是让它也能用

DualCam 2.0 是个大更新(照片模式、相册管理、全新会员页、性能优化),结果连续被苹果拒了两次。第一次是订阅缺 EULA 链接(元数据补一下就行);第二次是审核员在 iPad 上"找不到内购"——因为 DualCam 依赖前后双摄,iPad 不支持,App 直接弹了一个"此机型不支持"的墙,付费入口根本到不了。我的第一反应是在那个墙上加个按钮糊弄过去,但越想越不优雅。最后做了正确但更费劲的事:不支持双摄的设备不再被挡在门外,而是优雅降级成一个能用的单摄相机,付费页也按设备如实展示能用的功能。这篇讲这次过审拉锯,以及"优雅降级"为什么比"弹个不支持"更值得做。

工具链

🌍 用 AI 做多语言有多爽 —— DualCam 一个人做出 12 种语言

DualCam 上架时支持 12 种语言:英语、简繁中文、日、德、法、阿拉伯(从右往左)、葡、西、泰、印尼、俄。界面文案、系统权限弹窗、付费页、内购商品、App Store 描述、隐私协议和用户条款,全都本地化了。放在以前,这是一笔翻译预算 + 一套 TMS 流程 + 每个语言的 QA;现在我一个人 + AI,几乎是顺手就做完了。这篇梳理我到底把哪些东西做了多语言、用 AI 做多语言的工作流(在上下文里直接生成 + 脚本灌进字符串表 + 程序化校验覆盖率),以及为什么"要不要支持多语言"这道题,已经不再需要纠结。