在日本旅行期间,我通过手机开发并发布了一款iOS应用。
我和我的妻子在没有写一行传统代码的情况下,构建并发布了一个简单的iOS应用。<p>她讨厌我在旅行时带着笔记本电脑,而我喜欢创造东西。这成了我们的妥协。<p>我一直想尝试使用Claude Code构建一个iOS应用。我之前从未为iOS开发过,而通过AI辅助开发来探索这个领域对我来说感觉像是一个新的前沿。但再次把笔记本电脑带到日本显然不会被忽视,而且不会是好事。<p>所以我制定了一个计划。<p>在离开西班牙之前,我将我的Mac配置为永不休眠。我设置了VPN,以便能够安全地从手机SSH连接到它。我安装了Zellij,以便在连接中断时保持持久的终端会话。我还准备了一个部署管道到TestFlight,这样我可以远程触发构建,并在大约15分钟后从世界另一端进行测试,异步进行。<p>这是我们第二次访问日本,我们一直想学习更多的语言。因此,我们决定构建一些我们真正会使用的东西:一个轻量级的短语应用,包含有用的旅游句子和内置的文本转语音功能。比如在餐馆点餐、询问某物的价格或导航火车站。<p>有趣的是它是如何演变的。<p>当我在城市间开车时,我的妻子坐在副驾驶座上,通过SSH连接到我家Mac的Terminus,在我的iPhone上口述更改和功能。我们使用语音输入来修改提示、优化UI文本和生成新功能。这变成了一场共享的游戏。<p>开发是在短暂的时间段内进行的,在停车场、休息站和火车上。我们会发布一个构建版本,在真实的餐馆或商店测试,发现问题,再在同一个晚上从旅馆或小酒店房间进行调整。<p>反馈循环几乎紧密得令人难以置信。我们在现实世界中使用它,发现措辞不当,进行改进,重新部署,然后第二天再测试。<p>我们从未在本地打开Xcode。在旅行期间,我们从未实际接触过Mac。所有一切都是通过跨洲的手机远程进行的。<p>最初为了避免带笔记本电脑而采取的变通方法,最终变成了我经历过的最有趣和轻便的构建体验之一。这并没有让我觉得是在度假工作,而是像是共同创造了一些对旅行本身有用的东西。<p>到旅程结束时,这个应用不仅仅是一个原型。它稳定、可用,并且是我们真正依赖的东西。<p>比起应用本身,这个实验更有趣:远程协作编码、持久会话、AI辅助迭代,以及在真实世界反馈循环中构建,而不是模拟的反馈。<p>这让我重新思考了开发环境的意义。<p>欢迎提问关于设置、工具、工作流程或在过程中遇到的问题。
查看原文
My wife and I built and shipped a simple iOS app without writing a single line of code in the traditional sense.<p>She hates when I bring my laptop on trips. I love building things. This was our compromise.<p>I had been wanting to experiment with building an iOS app using Claude Code. I had never built for iOS before, and the idea of exploring it through AI-assisted development felt like a new frontier for me. But bringing a laptop to Japan again would not go unnoticed, and not in a good way.<p>So I made a plan.<p>Before leaving Spain, I configured my Mac so it would never sleep. I set up a VPN so I could SSH into it securely from my phone. I installed Zellij to maintain persistent terminal sessions in case the connection dropped. I also prepared a deployment pipeline to TestFlight, so I could trigger builds remotely and test them about 15 minutes later from the other side of the world, asynchronously.<p>This was our second time visiting Japan, and we have always wanted to learn more of the language. So we decided to build something we would actually use: a lightweight phrase app with useful tourist sentences and built-in text to speech. Things like ordering in restaurants, asking how much something costs, or navigating train stations.<p>The funny part is how it evolved.<p>While I was driving between cities, my wife would sit in the passenger seat dictating changes and features into Terminus on my iPhone, connected via SSH to my Mac back home. We used voice input to modify prompts, refine UI text, and generate new features. It became a shared game.<p>Development happened in short bursts, in parking lots, at rest stops, during train rides. We would ship a build, test it in real restaurants or shops, notice friction, and tweak it again that same evening from a ryokan or small hotel room.<p>The feedback loop was almost absurdly tight. We would use it in the real world, find awkward phrasing, improve it, redeploy, and test again the next day.<p>We never opened Xcode locally. We never touched the Mac physically during the trip. Everything happened remotely from a phone across continents.<p>What started as a workaround to avoid bringing a laptop turned into one of the most fun and lightweight building experiences I have ever had. It did not feel like working on vacation. It felt like co-creating something useful for the trip itself.<p>By the end of the journey, the app was not just a prototype. It was stable, usable, and something we genuinely relied on.<p>More than the app itself, the experiment was the interesting part: remote vibecoding, persistent sessions, AI-assisted iteration, and building in real-world feedback loops instead of simulated ones.<p>It made me rethink what a development environment even means.<p>Happy to answer questions about the setup, tooling, workflow, or what broke along the way.