Решена 15-летняя загадка: 20 байтов кода, исправивших Antennagate

Ах, 2010 год. Год, когда Apple выпустила iPad, но всё внимание было приковано к другому событию: Antennagate. Вскоре после выпуска iPhone 4 пользователи обнаружили, что при обычном хвате телефона во время телефонного разговора количество делений индикатора уровня сигнала резко падало.

Apple отреагировала по-разному, в том числе Стив Джобс знаменито предположил, что пользователи держат телефон неправильно, но проблема была решена изменением всего 20 байтов кода…

К сожалению для Apple, iPhone 4 сейчас больше запомнился не своим превосходным дизайном, а скорее скандалом, который вышел из-под контроля.

Apple была вынуждена предложить покупателям бесплатный чехол-бампер, а также урегулировать коллективный иск. Впоследствии компания улучшила антенну в iPhone 4S, но настоящая проблема заключалась не в аппаратном обеспечении, а в программном.

Apple заявила тогда, что допустила ошибку в формуле, отвечающей за отображение количества делений индикатора уровня сигнала.

После расследования мы были потрясены, обнаружив, что формула, которую мы используем для расчета количества делений индикатора уровня сигнала, совершенно неверна. Наша формула во многих случаях ошибочно отображает на 2 деления больше, чем следует для данного уровня сигнала. Например, иногда мы отображаем 4 деления, когда должны были бы отобразить всего 2. Пользователи, наблюдающие падение нескольких делений при определенном хвате своего iPhone, скорее всего, находятся в зоне с очень слабым сигналом, но они этого не знают, потому что мы ошибочно отображаем 4 или 5 делений. Их резкое падение делений связано с тем, что их высокие показатели делений на самом деле никогда не были реальными.

Мы точно не знали, что изменила Apple, но программист и дизайнер Сэм Генри Голд теперь выяснил это.

Я скачал обе прошивки и начал копаться. В фреймворке CoreTelephony я нашел перспективный бинарный файл: CommCenter. Просмотр строк дал мне довольно хорошее представление о том, что именно здесь находилась формула для расчета делений.

Собственно расчет очень прост. При преобразовании уровня сигнала в деления CommCenter загружает каждый порог из памяти и сравнивает, пока не найдет правильный диапазон. Этот код не является проблемой.

Вот он. Это таблица поиска.

Если построить это на графике, вы увидите, насколько значения искажены, поскольку они очень оптимистичны. В большинстве случаев вы видели бы 4-5 делений. Но когда вы хватали телефон, из-за такого резкого падения вы видели бы катастрофическое падение с 5 до 2 делений.

В версии 4.0.1 они изменили эти значения, сделав их гораздо более плавными. Нанесенные на график, вы можете увидеть, что для падения с 5 до 0 делений требуется многое. Видеть 5 делений сложнее, но и падать с делений сложнее. Вот так. 20 байтов.

Он опубликовал график, показывающий изменение количества отображаемых делений до и после.

В забавном психологическом приеме Голд отмечает, что Apple также увеличила высоту делений, чтобы уровни сигнала один и два не выглядели так плохо!

Это интересный взгляд на любопытный фрагмент истории Apple.

Избранные аксессуары

Фото: Бретт Джордан на Unsplash