内部构建里的 TargetRelease 写着 WWDC2099,意思是还没排期。读代号和开关,先分清代码直出与推断拼接。
先说一个字段。
在一份 iOS 内部构建的配置里,功能开关有一栏叫 TargetRelease。它记的不是「这个功能会在哪个版本发布」,是「这个功能被排在哪个内部里程碑窗口里」。当一行写着 WWDC2099 的时候,它不代表 2099 年,也不代表任何一年,意思是「还没排进任何窗口」,一个长期占位符。
这是这批材料里最诚实的一个标签:它承认自己不知道。我想借它回答一个问题:工程文件里出现一个名字,到底证明了什么,又被外面读成了什么。
一、一次错位是怎么发生的
同一年里,两种说法同时流传:一份内部构建既被叫成 iOS 19,又被叫成 iOS 26。看起来像有人在撒谎。
实际发生的是时间上的打结。build 号有先后(23A5234w 早于 23A5260n),可内部标签当时还写着 iOS 19;等到 2025 年 6 月的 WWDC 正式改名 iOS 26,这批早期材料便同时有了两个身份。谁先看到、谁后看到,决定了一条爆料里的版本号是哪一套。
所以从今天回看,那些「版本号打架」的争论,多半出在命名上,跟立场无关。
二、在代码里看见未来,为什么经常不准
功能开关这份材料,是一张按域划分的开关面板:SiriUI、AppKit、Messages、SpringBoard、InCallService、Kettle,每个域下面挂着一串条目。
有意思的地方在名字上。SpringBoard 那一栏里,有四条只用代号命名,看不出功能是什么;Kettle 域里有一条干脆叫 SensitiveUI。这些名字是工程内部的语言,写给工程师自己看。
更要紧的是:开关存在,只能说明有人在为它写代码。它不说明这个功能会发布,更不说明它会在哪一台设备上首发。把开关当作路线图,是这类爆料最常见的错误。
同一个事实,也可以带上两种不同的标签。「这份构建里有这个开关」属于代码直出,是可以说死的高置信事实;「所以这个功能明年会发布」属于推断与拼接,只能算中低置信。分界线画在这里,读材料的人就不会把两句话当成同一句话。
三、读码示范:一枚芯片的四个名字
想理解命名为什么容易出错,看一颗芯片就够了。
在一份内部表格里,同一颗芯片同时有四层标签:SoC 编号、平台代号、项目代号,以及面向市场的名字,比如 T7000/H7/Fiji/A8,或者 S8001/H8G/Elba/A9X。表格甚至专门留了一列写「根据谁的资料」,因为连苹果内部也不是每一层都同时公开。
四个名字说的是同一件事,只是分属四层。媒体引用其中一层,就得承担这一层原本的语境;把项目代号当成产品名,是张冠李戴的第一步。内核调试工具包里还留着按 SoC 分类的目录路径,那是一份公开可得、可以自己去看的脚注。
四、层级纠偏:一个字符串证明不了什么
无线芯片这一条线最能说明问题。
同一段时间里,自研的代号与第三方的型号同时出现在材料里,叙事就分了岔:一边说全面自研势不可挡,一边说第三方还在供应商名单里。两种说法都找得到出处,却彼此冲突。
材料里其实留了提示:这类标识必须和 ProductType 等其他标识放在一起看,才能判断一台设备到底用的是哪颗芯片。单个字符串什么都证明不了,它只是一次押注的痕迹,而押注可以并行,也可以撤回。Centauri 与 Proxima 这类平台层级被混用的时候,也是同一个毛病。
末:三份材料,三种读法
同一批代号,可以被写成三条完全不同的叙事:一份写成路线图,一份写成供应链转向,一份写成「下一代确认」。
三份的加工方式很像:先挑一个名字,再替这个名字安排时间,最后把时间说成结论。
我更愿意把这些痕迹放回原来的语境里。工程文件里写下的,是「曾经被押注过什么」,不是「即将发布什么」。有些押注会兑现,比如那份测试排期里出现的 J427 与 J527,半年之后真的成了两台显示器;有些押注会被撤回,连名字都不会留下。
判断一条押注是否还活着,办法很朴素:看它在下一个 build 里还在不在,看它的目标窗口是不是一直停在占位符上。名字消失、窗口不动的,多半是撤回了;名字留着、窗口开始往具体里程碑收拢的,才值得继续跟。这套办法不需要谁给你结论,下一个 build 出来,自己打开 TargetRelease 那一栏就能复核。
演示磁盘
这篇文章配有演示磁盘,可以在 AI System 6 里打开。