啊,2010年。那是苹果推出iPad的一年,但风头却被另一件事完全抢走:“天线门”。iPhone 4发布后不久,用户发现当他们以典型的通话姿势握住手机时,显示的信号强度格数会立即急剧下降。
苹果以多种方式回应,包括史蒂夫·乔布斯那句著名的建议——用户握持手机的方式不对,但最终这个问题仅通过修改20字节代码就解决了……
对苹果不幸的是,如今人们提起iPhone 4,大多记住的不是其出色的设计,而是一场彻底失控的争议。
苹果被迫向购买者免费提供保护套,并了结了一场集体诉讼。该公司随后在iPhone 4S中改进了天线,但真正的问题并非出在硬件,而是软件。
苹果当时表示,他们在负责显示信号强度格数的计算公式上犯了一个错误。
经过调查,我们惊讶地发现,我们用来计算显示多少格信号强度的公式完全错误。在很多情况下,我们的公式会错误地比实际应显示的格数多显示2格。例如,有时我们本应只显示2格信号,却显示了4格。用户以某种方式握住iPhone时观察到信号格数骤降,很可能是因为他们处于信号强度非常弱的区域,但他们并不知道这一点,因为我们错误地显示了4格或5格信号。他们的信号格数大幅下降,是因为他们之前看到的高格数信号从一开始就不是真实的。
我们过去并不确切知道苹果修改了什么,但现在软件工程师兼设计师 Sam Henry Gold 找到了答案。
我下载了两个固件版本并开始研究。在 CoreTelephony 框架中,我找到了一个看起来很有希望的二进制文件:CommCenter。查看其中的字符串让我基本确定这里就是信号格数公式所在之处。
实际的计算非常简单。在将信号强度转换为格数时,CommCenter 会从内存中加载每个阈值进行比较,直到找到正确的范围。这段代码本身没有问题。
问题在这里。这是查找表。
当你将这些值绘制成图表时,你会发现这些数值有点问题,因为它们过于乐观了。大多数时候,你会看到4-5格信号。但当你握住手机时,由于信号衰减非常剧烈,你会看到信号格数从5格灾难性地跌至2格。
在版本4.0.1中,他们修改了这些值,使其变化平缓得多。在图表上可以看到,信号从5格降到0格需要经历一个缓慢得多的过程。虽然看到满格5格信号变难了,但信号格数也更难急剧下降了。就是这样。20个字节。
他发布了一张图表,显示了修改前后所显示信号格数的下降情况。
Gold 还指出了一个有趣的心理学细节:苹果还增加了信号格的高度,使得1格和2格信号看起来不那么糟糕!
这是对苹果历史上一个有趣片段的一次愉快回顾。