Bluesky 会在截图中添加其标志。
How Bluesky draws its logo on screenshots

原始链接: https://timmarinin.net/2026/bluesky-screenshots/

作者发现,当用户在 Bluesky 应用中截图时,该应用会巧妙地将“关注”按钮替换为 Bluesky 的图标。出于对这种无需实时“切换”即可实现该效果的好奇,作者查阅了该应用的开源代码,发现了 `expo-privacy-sensitive` 程序包。 这一技巧利用了 iOS 的一项特定行为:通过将内容置于启用了 `isSecureTextEntry` 的 `UITextField` 中,开发者可以触发系统在截图时对该区域进行遮盖。当系统屏蔽掉这个受保护的字段时,底层的 Bluesky 图标便会显示出来。虽然这种技术在 Signal 和 Telegram 等应用中常被用于保护隐私以防止敏感数据泄露,但 Bluesky 将其用于品牌推广的做法引发了用户的争议。尽管存在争议,但作者认为这一实现方式在技术上令人印象深刻,并且由于它利用的是标准的、有据可查的 iOS 安全 API,预计该方法将持续有效。

Hacker News 最新 | 过往 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 Bluesky 在截图上绘制其徽标 (timmarinin.net) 15 分,gavide 发布于 12 分钟前 | 隐藏 | 过往 | 收藏 | 1 条评论 3form 4 分钟前 [–] 嗯,我从未发现任何一款会响应截图并以任何方式干预该过程的应用,对我而言不是怀有敌意且令人厌烦的。这个也不例外。它在某种程度上完美体现了现代软件工程在我看来是如何误入歧途的。我设备上的一项功能,却完全为了提供该软件的一方而服务。我希望,也只能祈望,这种趋势能在某个时候消失。 回复 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:
相关文章

原文

Sometimes I take a screenshot of a post I like, either to send it to friends/meme channel or to save a “durable” copy. Like this one (I’ve cropped out the rest of the interface):

A screenshot of Bluesky post by @eroston.bsky.social, the important part is that Bluesky logo is visible in the top right corner
Original, if you want to reskeet it

I noticed the Bluesky logo in the right corner and thought that it was weird that the logo doesn’t bother me when I use the app. Then I looked at the post in the app again—logo wasn’t there, replaced by the “Follow” button.

I remembered that a few apps hide their logo where the iPhone notch is, so that it doesn’t stick out, unless you take a screenshot. But here the logo is placed in the open, so how do they do it?

I tried to take another screenshot, this time mid-switching to the other app:

Screenshot of zoomed out version of Bluesky app mid-switching, Follow button is visible
The “Follow” button is visible when I take the screenshot mid-switch.

Did they somehow set up a listener for two buttons I’m pressing to take a screenshot and do a switcheroo at the last moment? I’m not an iOS developer, so I’m not sure what’s possible and what is not over there.

At this point I was mildly intrigued. Thankfully, I remembered that Bluesky app is open source (or at least the code is available to look at).

The answer was in the file literally called GrowthHack.tsx , introduced in January 2026 by mozzius. But it merely used a dependency, so to understand I looked into package expo-privacy-sensitive, also by them.

The package creates UITextField with isSecureTextEntry property set to true and renders the actual content (the button) into that field’s .layer. When I take the screenshot, iOS hides this UITextField by blanking the layer, allowing the Bluesky logo to flutter its wings through (it was here the whooole time). For other platforms it simply renders content as-is, without masking.

Why doesn’t it work when I switch between the apps? I suppose that iOS takes a snapshot itself at the start of the gesture (without triggering blanking), and when I do a screenshot, there is no live UITextField instance to react to that, only the inert snapshot. But once again, I’m not an iOS developer.

Nifty trick or an abuse of API meant for privacy? The people in the thread adding the behavior mostly didn’t like it, before the thread got locked. I think it’s cute.

I googled a bit, and the trick is well-known. Telegram implemented similar thing for its "secret" chats, as did Signal, so I don’t expect it to be patched by Apple any time soon.

联系我们 contact @ memedata.com