15年谜团终破仅20字节代码拯救“天线门”

Kommentarer · 6 Visninger

啊,2010年。那是苹果发布iPad的一年,但真正抢走风头的却是另一件事天线门。iPhone 4推出后不久,用户发现当他们以常规的通话握姿握住手机时,信号强度的格子条数会立刻骤降。苹果随后采取了多种应对措施,甚至史

  

  啊,2010年。那是苹果发布iPad的一年,但真正抢走风头的却是另一件事天线门。iPhone 4推出后不久,用户发现当他们以常规的通话握姿握住手机时,信号强度的格子条数会立刻骤降。

  苹果随后采取了多种应对措施,甚至史蒂夫·乔布斯曾著名地暗示是用户握法不对,但最终问题仅通过修改20字节的代码得到了解决……

  不幸的是,iPhone 4如今大多数人记住的不是它出色的设计,而是一场失控的争议。

  苹果被迫为购买者提供免费防摔套,并与集体诉讼达成和解。随后公司在iPhone 4S中改进了天线,但真正的根源并非硬件,而是软件。

  当时苹果表示,导致问题的是用于显示信号格子条数的公式出现错误。

  经过调查,我们惊讶地发现用于计算显示多少格信号强度的公式完全错误。在许多情况下,该公式错误地多显示了2条格子。例如,我们有时会显示4条格子,而实际应该只有2条。用户在特定握持方式下观察到的格子骤降,往往是因为他们所在区域的信号本就非常弱,只是因为我们错误地显示了4条或5条格子导致他们误以为信号很强。格子的大幅下降,是因为原本的高格子根本不是真实的。

  我们并不清楚苹果究竟改动了什么,但软件工程师兼设计师Sam Henri Gold现在已经找到了答案。

  我下载了两个固件并开始钻研。在CoreTelephony框架里,我发现了一个看起来很有希望的二进制文件CommCenter。查看其中的字符串,我大致判断这里就是格子条公式所在的地方。

  实际的计算非常简单。将信号强度转换为格子条时,CommCenter会从内存中读取每个阈值并逐一比较,直到找到匹配的区间。这段代码本身没有问题。

  真正的问题在这里——这就是查找表。

  把它画在图表上,你会发现这些数值其实有点离谱,因为它们过于乐观。大多数情况下,你会看到4‑5条格子。但一旦你握住手机,由于下降曲线太陡,就会出现从5条骤降到2条的灾难性掉档。

  在4.0.1版中,他们把这些阈值改得更加平滑。映射到图表后,你会看到要从5条掉到0条需要很大的信号衰减。要看到5条格子更难,而格子骤降也变得不那么容易。于是,问题就这样解决了——只用了20字节。

  他在推特上发布了一张对比图,展示了格子条数在修改前后的掉档情况。

  映射到图表后,你会看到要从5条掉到0条需要很大的衰减。要看到5条格子更难,格子骤降也更不容易。

  — sam henri gold (@samhenrigold) October 7, 2025

  在一次有趣的心理学观察中,Gold还指出,苹果在4.0.1版里把低格子的高度调高了,这样一格和二格的信号看起来就不那么糟糕了!

  哦,还有在4.0.1里他们把低格子的高度调高了,笑死

  — sam henri gold (@samhenrigold) October 7, 2025

  这是一段有趣的回顾,带我们重新审视这段苹果历史中的奇闻轶事。

  图片来源Brett Jordan/Unsplash

Kommentarer