Have you ever taken a screenshot of a Bluesky post and noticed a subtle app logo magically appearing in the corner where the "Follow" button normally sits? This article explores the clever technical trick behind this behavior. By leveraging iOS security features meant for password fields, developers can swap interface elements specifically for screenshots—a clever, if somewhat controversial, growth-hacking technique also utilized by apps like Telegram and Signal.
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):
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.
我记得有些 App 会把它们的 Logo 藏在 iPhone 的“灵动岛”或刘海屏附近,这样平时不会突兀,除非你截图。但这里的 Logo 可是大喇喇地摆在显眼位置,他们究竟是怎么做到的?
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?
我试着再截一次屏,这次我选在切换到另一个 App 的半途中:
I tried to take another screenshot, this time mid-switching to the other app:
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.
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.
行业先例与结论
Industry Precedent and Conclusion
这是一个绝妙的技巧,还是对原本用于隐私保护的 API 的一种滥用?在添加该行为的讨论串被锁定之前,大家基本上对它持反感态度。不过我觉得挺有意思的。
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.