Xcode。Interface Builder。iOS Simulator。一个有 47 个文件的完整 Swift 项目。全都在咖啡馆里通过我的 iPad Pro 运行。没有妥协,没有变通。下面是完整的故事。
“在 iPad 上写代码”的问题
每一年,Apple 都让 iPad 更强大。M 系列芯片。Liquid Retina XDR 显示屏。Magic Keyboard。而每一年,开发者们都在问同一个问题:我真的能用这东西写代码吗?
答案一直是“算是吧”。你可以通过 GitHub Codespaces 在浏览器里用 VS Code。你可以用 Blink Shell SSH 登录服务器。你可以用 Swift Playgrounds 这样的应用做些基础实验。但只要你需要真正的工具 - Xcode、Android Studio、Visual Studio,以及带着你 dotfiles 的像样终端 - 你就卡住了。
这些并非随意的限制。Apple 不允许在 iPadOS 上运行完整的 IDE。Xcode 永远不会原生运行在 iPad 上(至少不会是完整版)。而基于浏览器的编辑器,无论变得多好,从根本上都受限于浏览器标签页能做的事。
所以我换了个思路。我没有把 IDE 带到 iPad 上,而是把 iPad 带到了 IDE 面前。
我的配置:Remio + Mac mini + iPad Pro
我的配置简单得近乎让人不好意思:
- Mac mini M4 - 放在家里,常开,运行 Xcode 和我所有的开发工具
- 13 英寸 iPad Pro - 配上 Magic Keyboard 和 Apple Pencil,无论我在哪里
- Remio - 把两者连起来,零配置
我在 iPad 上打开 Remio,输入 Mac mini 上显示的 PIN 码,两秒钟内就看到了我的 Mac 桌面。完整分辨率。完整色彩。我的整个开发环境,原封不动地停在我离开时的样子。
不用配置 VPN。不用维护 SSH 隧道。不用创建账号。只需要一个 PIN 码和一次连接。
为什么这比基于浏览器的编码更好
所有替代方案我都用过。说真的,是全部。下面说说,为什么搭配一台真正 Mac 的 Remio,胜过我试过的每一种基于浏览器的方案。
GitHub Codespaces / VS Code Web
Codespaces 用于 Web 开发确实令人印象深刻。但它运行在 Linux 容器里。没有 Xcode。没有 Interface Builder。没有 iOS Simulator。没有 Core Data 模型编辑器。如果你在开发 iOS 或 macOS 应用,它根本不是选项。即使是 Web 开发,你也受限于浏览器沙盒 - 不能访问本地文件,没有原生终端,也不能运行任意后台进程。
SSH + 终端编辑器
我爱 Vim。真的爱。但在终端编辑器里构建一个有 47 个文件、xib、资源目录和 Core Data 模型的 SwiftUI 应用,这不是高效 - 是自虐。代码补全、重构、实时预览和可视化调试器这些 IDE 功能,是有存在的理由的。
云桌面(AWS WorkSpaces、Shadow PC)
你可以在云上租一台 Mac,每月大约 $50-100。但你已经拥有一台 Mac 了。为什么要花钱去租一台更差的?用 Remio,你用的是自己真正的机器 - 真正的文件、真正的工具链、真正的环境。而且延迟更好,因为你的 Mac 在你家的网络里,而不是在弗吉尼亚的某个数据中心里。
真实工作的一天
让我带你看看一个真实的工作日是什么样子 - 就拿咖啡馆里的某个周二来说。
上午 08:30坐下,连接,继续工作
我带着 iPad 和 Magic Keyboard 在咖啡馆坐下。打开 Remio。连接到家里的 Mac mini。Xcode 已经开着,里面是我昨晚的项目 - 每一个断点、每一个标签页、每一处未提交的改动,都原封不动。
上午 08:35编写 SwiftUI
我在写 SwiftUI 代码。代码补全完美运行,因为这是真正的 Xcode,运行在真正的 Mac 上,用的是真正的 Swift 编译器。每一次击键都感觉是即时的 - Remio 的原生输入处理意味着,从按下一个键到看到字符出现,没有任何可感知的延迟。
原生输入直接送达主机 - 局域网上约 8 ms 的处理时间,内部实测;其余部分是显示器自身 60 Hz 的刷新节奏。
上午 09:15在 iOS Simulator 上运行
我需要在 iOS Simulator 上测试。我按下 ⌘R。Simulator 在我的 Mac 上启动,我在 iPad 屏幕上看到它。我可以用 iPad 上的触控手势操作模拟的 iPhone - 出乎意料地自然。点按、滑动、滚动。直接就能用。
上午 10:00在 Interface Builder 中做界面
该做些界面工作了。我打开 Interface Builder。拖动约束、调整布局、在不同设备尺寸上预览。这正是在基于浏览器的编辑器里不可能完成的那类工作。可视化工具是无可替代的。
上午 11:30调试并发问题
我在调试一个棘手的并发问题。我设置断点、单步执行代码、在调试器中检查变量。LLDB 运行得完美无缺,因为我用的是真家伙,而不是基于网页的近似品。
下午 01:00切换到 Android
午饭后,我切换到我的 Android 项目。我关掉 Xcode,打开 Android Studio。同一个连接,同一套配置。Remio 不在乎我在运行什么应用 - 它串流的是整个桌面。
晚上 07:00当天小结
到一天结束时,我写了大约 400 行 Swift,修了三个 bug,向 TestFlight 提交了一个构建,还审阅了两个 pull request。全都是在咖啡馆里用一台 iPad 完成的。这一切都不需要任何特殊配置,也不需要任何妥协。
让这一切成立的细节
键盘快捷键
这是大多数远程桌面应用掉链子的地方。Remio 会正确转发每一个键盘快捷键。⌘B 构建。⌘R 运行。⌘⇧O 快速打开。⌃⌘Space 输入表情符号(对,连这个也行)。Magic Keyboard 的修饰键与 Mac 的修饰键一一对应。没有转换层,没有按键重映射带来的混乱。
文字渲染
代码就是小字,而且很多。一款会让文字模糊或产生瑕疵的远程桌面应用,对开发来说完全无法使用。Remio 的针对文字优化的 H.265 编码让代码锐利如刀。语法高亮的颜色准确。字重正确。在 iPad Pro 的分辨率下,看起来真的就像 Xcode 在本地运行。
在屏幕之间切换
在我的 Mac mini 上,我有一个虚拟的第二显示器。Remio 让我轻点一下就能切换查看哪块屏幕 - 一块放代码,另一块放 Simulator。在 iPad 上,我在它们之间滑动,或用台前调度来安排我的工作区。
剪贴板与文件传输
需要从控制台复制一条错误信息,留着稍后搜索?Remio 的剪贴板同步让这一切天衣无缝 - 在一台设备上复制文字,在另一台设备上粘贴。而当我想把一个参考文件放进项目文件夹时,我直接从 iPad 把它发送到 Mac。
我的工作流程小贴士
用这种方式写了六个月代码之后,我养成了一些习惯,让体验变得更好。
- 让你的 Mac 使用有线连接。我的 Mac mini 通过以太网接在路由器上。这消除了影响串流质量的最大变量。
- 让 iPad 使用稳定的 Wi-Fi 连接。咖啡馆里的 5GHz Wi-Fi 通常没问题。如果连接不稳,Remio 的自适应画质会自动调整 - 但稳定的连接意味着文字始终清晰。
- 把 Xcode 的字号设为 13-14pt。通过 Remio 在 iPad Pro 的显示屏上,这个大小阅读起来很舒适,不需要缩放。
- 一切操作都用键盘快捷键。在 IDE 操作中越少用触控/鼠标,你就越快。这对本地开发也是好建议。
- 在 iPadOS 设置中开启“减弱动态效果”。这会略微减少 iPad 一侧的动画开销,给 Remio 多留出一点点性能余量。
我做不到的事(说句实话)
为了做到完全坦诚,下面是它的局限。
- 你需要网络。如果你在没有 Wi-Fi 的飞机上,它就用不了。不过我在机上 Wi-Fi 下用成功过 - 很慢,但能用。
- 你的 Mac 需要保持开机。这不是云服务。如果有人拔了你 Mac 的电源,或者它因为更新重启,在它恢复之前你就会断开连接。
- 对延迟极其敏感的任务 - 比如游戏或实时音频制作 - 会有可感知的(虽然很小)延迟。对写代码来说,延迟是察觉不到的。
这些取舍是真实存在的。但对我来说,能把整个开发环境装进一台 700 克的平板里带着走,远远盖过了它们。
实现了的 iPad 开发者梦想
多年来,我一直在等 Apple 把 Xcode 带到 iPad 上。后来我意识到,它可能永远不会发生 - 至少不会是完整的专业版。于是我不再等待,找到了一个更好的答案。
Remio 并没有把 Xcode 放到你的 iPad 上。它把你整台 Mac 放到了你的 iPad 上。每一个应用,每一个工具,每一个文件。再加上让 Mac 感觉就在你面前的显示质量和输入响应 - 因为,在所有重要的方面,它确实就在你面前。
最好的开发配置,不是马力最强的那个,而是你真正随身带着的那个。
搭配 Remio 的 iPad Pro,是我拥有过的最好的开发机器 - 不是因为它的规格,而是因为它走到哪儿都跟着我,而我完整的开发环境也跟着它一起。
如果你是一位有 Mac 和 iPad 的开发者,试试 Remio。设置只需两分钟。无需账号。而如果你对游戏方面感兴趣,请看看我们的指南:在 iPad 上玩电脑游戏 - 让写代码成为可能的同一套低延迟技术,也让游戏体验变得出色。