Issue #158

谁是 AI-relay App 的真正威胁

Cover for Weekly Issue 158

上周应邀去北京参加了首届 Apple 应用孵化器(Apple App Incubator)的活动,期间蒂姆·库克也亲自出席并为优胜者颁奖。

与侧重于校园创意选拔与基础编程教育的既有赛事不同,Apple 应用孵化器是苹果公司在中国为开发者、设计师和创业者设立的专项孵化与技术支持项目,为已有一定产品基础的团队提供深度的技术、设计及商业化扶持。因此,最终入选的项目无论在完成度还是商业成熟度上都相当出色,其中既有已获得数百万乃至千万美元投资的团队,也不乏单人或几人规模的精巧作品。

如果一年前看到这些设计精美的应用和服务,我会毫不犹豫地为其喝彩,并预祝他们取得好的商业回报;但在今天,我却陷入了一种难以言说的复杂情绪。

现场的参赛作品绝大多数都引入了 AI 能力。除个别基于端侧运行外,多数采用“云端 LLM 大模型 + 订阅制”的商业逻辑。抛开少数具备独特商业壁垒的项目,相当一部分应用的底层逻辑可以概括为:精美的 UI + 可被提炼的规则 + 第三方云端模型。我把这类产品称之为 AI-relay App。

随着生成式 UI 和预设能力的 Plugins/Skills 的普及,通用 AI 工具正以极低的边际成本为用户提供类似的能力。面对综合订阅支出,越来越多的用户可能会倾向于选择一份全能的大模型一揽子订阅,而不是为每一个垂直场景分别付费——即便后者的最终呈现和打磨程度或许更好。这意味着,这类 AI-relay 应用真正的竞争对手,正悄然从传统的商业模仿者,转变为基础大模型服务商本身。

这种感受最近愈发明显。对于我的个人 AI 工具,随着交互频次的增加,Claude Code 已经完全理解了它的调用与协作逻辑。现在在实际使用中,无需任何额外提示,它就能依循我的个人习惯自动开启新上下文并推进整个工作流。原本我打算专门编写一个 runner 脚本来充当确定性工作流的调度器,现在发现完全没有必要了。虽然这与面向普通消费者的 App 场景有所不同,但它至少印证了一点:当 Agent 能够记忆、学习并适应个人偏好后,它完全有能力为你动态“生成”专属于你的应用体验。

进一步说,如果一个商业应用的核心价值大多是可以被抽象和提炼的规则与 Prompt,那么哪怕模型厂商本身无意主动复制,在庞大的用户基数与社区分享欲的驱动下,这套设计精巧的核心逻辑也可能被迅速复刻并广泛分发。而当复刻不再依赖直接复制代码或设计素材时,原创者想通过法律手段保护自己的成果,也将面临更加复杂的挑战。

对独立和小团队开发者而言,在欣喜于 AI 带来强大赋能的同时,或许更需要清醒地审视:自己的产品究竟还有多少来自“非 AI 模型端”的壁垒?面对被通用模型“替代”的潜在威胁,又能为用户提供哪些不可轻易“替换”的独特价值?

“AI 给你赋能”与“AI 给你的产品赋能”,从来都是两件截然不同的事。

本周赞助

Swift Pro —— 喜欢 Swift,却不想用 Xcode?

Swift Pro 将 Swift 开发带入 IntelliJ IDEA:原生编辑、编译器辅助、SwiftPM 与 Xcode 工作流、调试、测试和 SwiftUI 预览,再加上你早已熟悉的 JetBrains 导航与重构。一个插件,仅需 4 美元。

试用 Swift Pro ->

近期推荐

iOS 27:通过 AppIntentsTesting 验证系统级集成 (iOS 27: App Intents Testing)

对于 App Intents,直接调用 perform() 的单元测试只能验证 Swift 实现本身,却无法保证 Siri、Shortcuts 或 Spotlight 能够正确发现、构造和执行这些 Intent。iOS 27 引入的 AppIntentsTesting 为此提供了新的测试方式:让 App Intents 的测试从验证单个 Swift 方法,扩展到验证应用与系统之间的集成契约。

Anton Gubarenko⁠ 展示了如何在 UI Testing Target 中,借助 IntentDefinitions 动态查找 Intent 和 Entity,并通过真实的 App Intents 基础设施完成进程外测试。整个过程不需要导入应用的 Intent 类型,也不需要操作 UI。除了验证 Intent 执行结果,还能测试 Entity 查询、持久化标识符解析,以及不同 Intent 之间的参数传递。

虽然测试运行在 UI Testing Target 中,却不需要模拟用户点击或操作 Shortcuts 界面。这也展示了 UI Testing 的另一种用途:利用进程隔离能力完成系统级集成测试,而不局限于传统的 UI 自动化。


面向命令行与 Coding Agent 的 Xcode 工程 (Xcode Projects for the Command Line and Coding Agents)

Xcode 27.2 不仅引入了新的 JSON 工程配置格式 project.xcproj,还提供了两款配套命令行工具:xcodeproj 用于创建和修改工程,管理 Target、Build Phase、Build Settings 和 Swift Package;xcprojformatter 则负责格式规范化与基本结构验证。

⁠Artem Novichkov 介绍了这两款工具的用法、常见陷阱,以及它们与 Xcode MCP 的能力差异。他特别建议通过 AGENTS.md 或 Skill 约束 Agent 优先使用 xcrun xcodeproj,而不是直接修改工程文件。毕竟,JSON 格式虽然让配置更加易读,却不意味着直接编辑就足够安全。相比让 Agent 自行理解和维护复杂的工程结构,使用具备明确操作语义、约束检查和错误反馈的专用工具,往往是更可靠的选择。


Swift 6.4:让可选的 some 和 any 类型告别括号 (some View? without parentheses in Swift 6.4)

在 Swift 中声明可选的不透明类型或存在类型时,我们一直需要额外添加一组括号,例如 (some View)? 或 (any Delegate)?。这是由于 Swift 对 some、any 与可选类型后缀 ? 的语法解析规则,导致编译器无法按照开发者的直觉理解 some View?。

Swift 6.4 通过 SE-0521 调整了这一规则,让 some View? 和 any Delegate? 成为合法写法。Sarun Wongpatcharapakorn 介绍了这项改进的背景、适用范围及仍需保留括号的情况,并将这项改进与 Swift 未来可能强制使用 any 的方向联系起来:随着 ExistentialAny 特性的推进,SE-0521 提前消除了这项迁移过程中不必要的语法负担。


HomeView 和 Apple TV 4K 2026

苹果上周推出了两款面向家庭场景的新硬件:⁠HomeView 和 ⁠Apple TV 4K 2026。相比延续既有产品路线的 Apple TV 4K,HomeView 更值得关注。它试图将智能家居控制、家庭信息展示与日常交互整合到一个新的设备入口。⁠Michael Tsai 分别汇总了两款产品的相关报道与社区观点。尤其是围绕 HomeView 的定位、使用场景,以及缺少独立 App Store 所引发的讨论,值得开发者进一步参与。

HomeView 的出现,或许会意外地让 CarPlay 受益。尽管 HomeView 没有开放独立的第三方应用商店,但苹果允许现有的 CarPlay 音频和视频应用无需修改便可在 HomeView 上运行。过去,一些开发者可能缺乏适配车载场景的动力,但家庭场景的加入改变了这笔投入的价值。如果开发者为了进入 HomeView 而开始适配 CarPlay,那么 CarPlay 也可能因此获得更多应用支持。


端侧与私有云摘要对比 (Comparing On-Device and Private Cloud Compute Summaries)

苹果在 Apple Foundation Models 中同时提供了端侧和云端(Private Cloud Compute)的处理能力。尽管后者能够处理更长的上下文,但是否意味着生成的文本摘要质量就一定更好?

Tiago Henriques 延续了⁠ Making On-Device Summaries Work for Real Issue Lengths 关于 Token 预算与内容截断的实践,利用 Xcode 27 提供的 Evaluations 框架,对两种方案进行比较。这项实践最值得借鉴的并非某个模型的表现,而是作者的评估方式:不预设更大的模型或更完整的上下文必然带来更好的结果,而是通过可重复的测试,为是否引入更复杂的技术方案提供依据。


重新审视 iOS 的“极简模式” (Assistive Access — iOS Easy Mode, Revisited)

Assistive Access 是苹果从 iOS 17 开始提供的一项辅助功能,通过更大的界面元素、更简单的导航和更精简的功能选择,帮助有认知障碍的用户降低使用设备的复杂度。从 iOS 26 开始,第三方应用也可以通过 AssistiveAccess Scene,为这一模式提供专门设计的界面与交互流程。

⁠Bas Broek 介绍了相关 API 的用法,以及如何利用 SwiftUI Preview 测试辅助访问界面。他同时指出,辅助访问并非简单地放大现有 UI,而是需要重新审视哪些功能真正必要、哪些导航可以省略,以及如何通过减少选择和操作步骤来降低用户的认知负担。

工具

iPhone Use:让 AI 助手通过 USB 操作真实 iPhone

由 ⁠ZhongErXin 开发的 iPhone Use 基于 Appium 生态中的 WebDriverAgent(WDA),将真机自动化能力封装为本地 MCP 工具,并提供配套的 Skills。Agent 可以通过 USB 连接并操作真实 iPhone,结合界面控件树与截图判断操作目标;控件定位失败时,也可以根据截图改用坐标点击。用户还可以在实时预览中直接点击、拖动和滚动,参与操作过程。

iPhone Use 并不限于测试自己开发的 App,还可以操作手机上其他已安装的应用,例如备忘录、微信、微博等。这让它不仅是一款自动化测试工具,也为探索 AI Agent 与真实移动设备的交互提供了新的可能。


yomado:为 AI 智能体准备一块虚拟工作屏

当 AI 智能体开始通过截图、鼠标和键盘操作桌面软件时,为它准备一块专用的工作屏幕,或许能减少对用户日常操作的干扰。由 ⁠GuoYu 开发的 yomado 是一款 macOS 原生工具,可以创建虚拟显示器,将任务所需的应用窗口移入其中,为视觉自动化提供相对独立的工作空间,无需额外的硬件显示器欺骗器。配套的 Skill 让 Agent 具备自行完成虚拟显示器创建、窗口迁移、环境验证,以及任务结束后的窗口恢复等能力。


Sill:在 iPhone 和 iPad 上操作 Mac 窗口

由 Noah 开发的 Sill 是一款免费开源的远程窗口操作工具,可以将 Mac 的单个窗口或整个桌面传送到 iPhone、iPad,并通过触控、Apple Pencil、键盘或触控板进行操作。它支持局域网、USB 和近距离无线直连,也可配合 Tailscale 等自有 VPN 远程访问,无需注册账户,无需依赖第三方云端中转服务。

Sill 的有趣之处,在于它围绕“在移动设备上使用一个 Mac 窗口”打磨了一套交互:窗口缩略图切换、手机竖屏触控板、窗口尺寸调整,以及 Mac 应用菜单访问,让桌面应用更便于在小屏幕上操作。


SwiftDataSync:为 SwiftData 应用构建 CloudKit 同步与共享

SwiftData 一直欠缺跨 iCloud 账户数据共享的能力,⁠Mark Battistella 在这方面做了探索。SwiftDataSync 以本地 SwiftData 存储为数据基础,通过 CKSyncEngine 对接 CloudKit 的私有数据库与共享数据库,支持同时管理多个 Record Zone。同一设备既可以拥有自己的项目,也可以参与他人共享的工作空间,分别维护各自的同步与共享状态。

与 SwiftData 内置的自动同步机制不同,SwiftDataSync 并非开箱即用的框架。它要求开发者自行实现数据模型与 CloudKit 记录之间的映射,并明确处理删除、冲突与合并策略。框架则负责同步状态管理、变更持久化、失败重试及共享关系维护,为需要精细控制同步行为的应用提供了另一种选择。

相关周报

订阅 Fatbobman 周报

每周精选 Swift 与 SwiftUI 开发技巧,加入众多开发者的行列。

立即订阅