不是玄学,是 UITextField 在"演"为什么切换 App 时截图又露馅了这招其实早就是公开的秘密技术无罪,看怎么用
你有没有过这种经历:刷到一条喜欢的帖子,截个图想发给朋友,结果图里莫名其妙多出一个 App 的 Logo?最近就有人发现,Bluesky 的截图里右上角总会带着自家的 Logo,可你在 App 里看那个位置,明明是个"Follow"按钮。
![]()
截图里有 Logo,界面里是按钮——这俩居然能共存?扒了一下它的源码,发现背后藏着一个挺有意思的 iOS 机制,今天拆开聊聊。
先交代背景。Bluesky 的 App 是开源的,有人顺着代码找到了一个叫的文件,里面用了一个叫的包。这个包干的事乍一听有点绕:它创建了一个,把属性设成,然后把真正的 UI 内容(也就是那个 Follow 按钮)渲染到这个文本框的 layer 上。
GrowthHack.tsx
expo-privacy-sensitive
UITextField
isSecureTextEntry
true
是什么?说白了,它就是 iOS 给密码输入框用的那个属性——你输密码时显示成圆点、截图时内容会被系统自动抹掉的那玩意。iOS 出于安全考虑,只要检测到屏幕上存在安全输入框,截屏时就会把这个区域的内容打码,防止密码泄露进截图里。
isSecureTextEntry
Bluesky 的操作就是"借刀杀人":把按钮塞进这个安全文本框里,平时正常显示;可一旦你按下截屏键,iOS 系统出于保护机制,自动把文本框的内容抹掉——按钮消失了,藏在底下一直没走的 Logo 就露出来了。你截图里看到的 Logo,其实一直都在,只是平时被按钮盖住了而已。
有人会问:那为什么我切换到别的 App 的瞬间截图,Follow 按钮又出现了?
![]()
作者的推测是:iOS 在应用切换手势一开始就自己拍了快照,这个快照是系统层面的静态图,压根没经过"截屏触发隐藏"那一步。你截的是系统快照,而不是活着的界面,安全文本框还没来得及响应,按钮自然就原样留在图里了。说白了,这套机制只在真正触发截屏事件时才会"变魔术",快照这种旁路它管不着。
别以为这是 Bluesky 首创的骚操作。Telegram 的"私密聊天"早就用了类似的思路——在敏感聊天界面套一层安全输入框,截图时内容直接变黑;Signal 也有自己的实现。说白了,这套"用密码框属性实现防截屏"的玩法,在 iOS 圈子里算是老手艺了,Apple 大概率也不会去修它,毕竟它本来就是系统自带的安全能力,只是被人换了个用法。
ScreenshotBlocking
说实话,这招挺妙的:没黑进系统、没调用任何私有 API,纯粹是"把系统安全机制换个场景用"。当然争议也有——Bluesky 那个 PR 底下不少开发者不太买账,觉得这是在钻空子,把给用户隐私保护的功能拿来给自己打广告。
我个人觉得,抛开营销动机不谈,这个案例对开发者挺有启发:iOS 里很多看似"限制"的机制,换个角度就是现成的能力。安全输入框能防密码泄露,也就能防任何你想在截图里藏起来的内容。你在项目里用过类似的技巧吗?评论区聊聊。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.