Bluesky показывает логотип только на скриншотах: разгадан трюк с приватным полем iOS

Автор блога заметил на своих скриншотах постов Bluesky логотип сети в правом углу, хотя при обычном просмотре того же поста в приложении на этом месте стоит кнопка «Подписаться» (Follow), а не логотип. При попытке снять новый скриншот прямо во время переключения между приложениями эффект тоже не воспроизводился.

Поскольку приложение Bluesky имеет открытый исходный код, автор нашёл ответ в файле с говорящим названием GrowthHack.tsx, который в январе 2026 года добавил в репозиторий разработчик под ником mozzius. Файл использует зависимость, пакет expo-privacy-sensitive, тоже написанный mozzius. Пакет создаёт на iOS объект UITextField со свойством isSecureTextEntry, выставленным в true (то есть помечает поле как содержащее приватные данные вроде пароля), а реальное содержимое, кнопку «Подписаться», под которой расположен логотип, отрисовывает внутри слоя (.layer) именно этого поля. На других платформах (не iOS) пакет просто рендерит содержимое как есть, без какой-либо маскировки.

Смысл трюка в поведении самой iOS: когда пользователь делает скриншот, система прячет ("затемняет", blank) содержимое таких приватных текстовых полей, и именно так работает трюк: во время съёмки скриншота слой поля с кнопкой гаснет, и из-под него виден логотип, который, по выражению автора, "выпархивает" наружу. При обычном просмотре в приложении маскировка не срабатывает, и в поле видно его настоящее содержимое, кнопку «Подписаться», а не логотип. Почему трюк не срабатывает при переключении между приложениями, автор объясняет собственной догадкой (прямо оговаривая, что не является iOS-разработчиком): iOS делает снимок экрана для анимации переключения в самом начале жеста, без запуска механизма затемнения приватных полей, и в этот момент нет «живого» экземпляра UITextField, который мог бы среагировать, есть только статичный, уже отрисованный снимок.

Автор пишет, что в комментариях к обсуждению, где добавляли эту функцию (прежде чем ветку обсуждения закрыли), реакция большинства была скорее негативной, люди сочли это либо хитрым приёмом, либо злоупотреблением API, который задуман для приватности, а не для маркетинга. Сам автор относится к находке с симпатией. Он также отмечает, что трюк хорошо известен: похожую технику Telegram применяет в «секретных» чатах, то же самое делает Signal, поэтому автор не ожидает, что Apple в обозримом будущем закроет эту возможность патчем.

Ключевые факты

  • Логотип Bluesky виден на скриншотах поста, но не виден при обычном просмотре того же поста в приложении, там на его месте кнопка «Подписаться»
  • Причина, в открытом исходном коде: файл GrowthHack.tsx (добавлен в январе 2026 разработчиком mozzius) использует пакет expo-privacy-sensitive того же автора
  • Пакет рендерит кнопку «Подписаться» внутри UITextField с isSecureTextEntry=true, приватного поля, которое iOS «затемняет» при съёмке скриншота, но не при обычном просмотре
  • На других платформах, кроме iOS, пакет никакой маскировки не применяет и просто показывает содержимое как есть
  • Похожую технику для «секретных» чатов используют Telegram и Signal, поэтому автор не ждёт, что Apple быстро закроет эту возможность

Почему это важно

История показывает неожиданное применение API, задуманного Apple для приватности (защита паролей и других чувствительных полей от попадания в скриншоты): вместо того чтобы что-то прятать, Bluesky использует его, чтобы, наоборот, что-то показывать, но только на скриншотах, то есть там, где контент расходится дальше, за пределы приложения. Логотип на скриншоте, это бесплатный маркетинг при пересылке постов в мессенджеры и соцсети, не мешающий обычному просмотру. Случай интересен и тем, что был раскрыт не самой компанией, а сторонним наблюдателем через чтение открытого исходного кода приложения.

Кому это важно

iOS-разработчикам, как пример нестандартного, не описанного в официальной документации способа использовать системный API; продуктовым и маркетинговым командам приложений, как готовый приём для брендирования контента, попадающего в скриншоты; пользователям Bluesky и внимательным читателям HN, как объяснение того, откуда на их скриншотах вообще взялся логотип, которого не было видно в приложении.

Как это применить

Технически приём воспроизводим в любом iOS-приложении: элемент интерфейса рендерится не напрямую, а внутри слоя (.layer) UITextField с isSecureTextEntry, выставленным в true. Тогда при съёмке скриншота iOS автоматически "затемняет" это поле как потенциально приватное, а во время обычной работы с экраном показывает его реальное содержимое. Автор публикует находку как техническое объяснение чужого кода, а не как инструкцию, но механизм описан достаточно, чтобы его можно было повторить.

Можно ли доверять

Источник, личный технический разбор блогера, который сам не является iOS-разработчиком и явно это оговаривает там, где переходит от фактов к предположениям (например, объясняя, почему трюк не работает при переключении между приложениями). При этом ключевые технические утверждения, название файла GrowthHack.tsx, автор изменения (mozzius), использование пакета expo-privacy-sensitive, применение UITextField с isSecureTextEntry, опираются на чтение открытого исходного кода Bluesky, а не на догадки, что повышает надёжность разбора. Официального подтверждения или комментария от самой компании Bluesky в источнике нет.

Риски и подводные камни

Источник прямо ставит вопрос: это ловкий трюк или злоупотребление системным API, предназначенным для защиты приватных данных. По его словам, участники обсуждения, где добавляли этот код, в основном отнеслись к находке неодобрительно. Остаётся открытым, санкционировала ли компания Bluesky такое использование API осознанно как маркетинговый приём или это решение отдельного разработчика; источник ответа на этот вопрос не даёт. Также неясно, что произойдёт, если Apple со временем изменит поведение системы затемнения приватных полей, эффект может перестать работать.

«Ловкий трюк или злоупотребление API, задуманным для приватности? Мне кажется, это мило.»

— автор блога (не назван в источнике)