前几天,MacRumors 分析师 Aaron 在推特上发了一条消息,把整个科技圈都逗乐了:Apple 在最新版的 Apple Support App(v5.13)里,居然把几个叫 CLAUDE.md 的文件打包进去了。这些文件不是普通文档,而是专门写给 Claude AI 看的内部开发指南。
更搞笑的是,Aaron 发帖没多久,Apple 就火速推了个紧急更新 v5.13.1,把这些文件全删了。感觉 Cupertino 那边有人一晚上没睡好。
文件标题直接点题:Chat - Conversational Support (Juno AI + Live Agents)
里面详细记录了这个聊天系统的技术实现:
ChatViewModelServiceProvider,可以无缝切换三种模式:Juno AI(Apple 自家的对话助手)、真人 Apple 支持(ChatKit)、还有开发用的 Mock。ViewModel 层完全不知道当前用的是哪个后端。#if JUNO_ENABLED、#if canImport(CCChatKit)、#if DEV_BUILD 等等,有些文件还层层嵌套。MessageGroup(带 UUID 的容器)包装,避免 SwiftUI ID 冲突(还特意提了内部 rdar 问题单)。简单说,这不是随便写写的东西,而是实打实的项目架构文档。它告诉 Claude:在 Apple 的代码库里该怎么写代码、不能碰哪些规则、历史包袱怎么处理。
首先,Apple 确实在用 Claude,而且用得挺深。不是偶尔试试,而是把 Claude 当成了内部开发的重要工具,尤其在 Juno 这个支持聊天系统上。
Juno 听起来就是 Apple 想做的“AI + 真人支持”混合方案:用户进来先跟 AI 聊,必要时无缝转给真人。这套系统还在特性开关控制下,没完全放开。
其次,连 Apple 这么注重保密的公司,都会在打包 App 时把内部提示文件漏出去,说明现在用 AI 辅助写代码已经非常普遍,但配套的保密机制却严重滞后。
提示词(Prompt)即机密
像 CLAUDE.md 这样的文件,本质上是在定义“如何让 AI 理解公司代码规范”。一旦泄露,等于把内部架构、技术选型、安全策略都暴露了。
AI 工具链缺乏隔离机制 开发者可能为了方便,直接把内部文档喂给 AI,结果这些内容被缓存、上传或意外打包进产物中。Apple 这次就是典型的“开发环境配置泄露到生产包”。
缺乏 AI 使用审计与权限控制 谁在用 AI?用了哪些数据?是否涉及敏感信息?目前很多企业还没有建立相应的管控流程。
AI 生成代码的“黑箱”风险 即使 AI 没直接泄露文档,它生成的代码也可能无意中复现内部逻辑,形成间接泄密。
🔍 思考题: 如果你是一家科技公司的技术负责人,你会如何制定 AI 辅助开发的保密策略? 欢迎在评论区分享你的看法!
加入讨论
笑死,Apple 连夜删文件的样子像极了我交代码前才发现忘了删 `console.log`。不过说真的,连 `#if DEV_BUILD` 都写进提示词了,说明他们真把 Claude 当“自己人”啊……下次是不是该给 AI 也签个 NDA?
看到 Apple 用 Keychain 存 ChatInfo 就放心了,至少没把会话明文扔缓存里😂 不过说真的,连线程安全和 ID 冲突这种细节都写进 CLAUDE.md,说明他们真把 AI 当核心开发成员了——那以后是不是该给 AI 也签个 NDA?
看到 Apple 用 Actor 做线程安全就笑了,这不就是我们组上周刚踩的坑吗?用 Actor 封装服务提供者,结果调试时死锁了三次。Apple 的文档连这种细节都教给 Claude,看来是真的想教会 AI 当“Apple 程序员”啊。
看到 `#if JUNO_ENABLED` 这种特性开关就懂了,Apple 内部肯定还在反复横跳——今天加明天砍。不过能把这么多技术细节写成 AI 能懂的提示词,说明他们团队对 Claude 的信任度已经很高了。问题是,以后会不会有人用泄露的 CLAUDE.md 反向训练模型来“套话”?😂
看到 Apple 用 AsyncStream 处理实时消息,我第一反应是:这不就是 Swift 并发里最容易内存泄漏的那个坑吗?文档里还特意强调“每次访问新建 Stream,旧的结束”,看来他们也被坑过😂 不过能把这种细节写进 AI 提示词,说明真把 Claude 当队友了,而不是随便问问。
看到 Apple 把 `#if DEV_BUILD` 这种条件编译都写进提示词,我突然想到:是不是以后每个 PR 都得过一遍 AI 的“代码风格审查”?😂 不过说真的,连 Mock 模式都设计得这么完整,说明他们早就想好怎么测试 AI 了,这规划比我们组强十条街。
看到 Apple 把 Keychain 和 CachesDirectory 分得这么清楚,我突然想到:我们组上周刚因为把用户会话明文缓存被安全团队点名……现在看 Apple 的文档才反应过来,原来该用 Keychain 存连接信息,缓存只放临时记录。这波属于是“大厂避坑指南”了😂
看到 Apple 把 `#if JUNO_ENABLED` 和 `#if canImport(CCChatKit)` 这种条件编译都写进提示词,我突然好奇:Claude 是不是还得学会“读心术”?毕竟这些编译开关背后,谁知道藏着多少被砍掉的功能和反复横跳的产品决策😂