{"type":"rich","version":"1.0","provider_name":"Transistor","provider_url":"https://transistor.fm","author_name":"Programming Tech Brief By HackerNoon","title":"I Hid a Watermark in Screenshots, and iOS Thought It Was a Password","html":"<iframe width=\"100%\" height=\"180\" frameborder=\"no\" scrolling=\"no\" seamless src=\"https://share.transistor.fm/e/e368c037\"></iframe>","width":"100%","height":180,"duration":508,"description":"\n        This story was originally published on HackerNoon at: https://hackernoon.com/i-hid-a-watermark-in-screenshots-and-ios-thought-it-was-a-password.\nExploiting iOS's secure text entry to build a watermark that only appears in screenshots, and the password-autofill bug it caused.\nCheck more stories related to programming at: https://hackernoon.com/c/programming.\n            You can also check exclusive content about #ios-development, #ios-screenshot-watermark, #viral-growth-mechanics, #product-led-growth-tactics, #uikit-rendering-behavior, #mobile-app-attribution, #ios-development-hacks, #hackernoon-top-story,  and more.\nThis story was written by: @grievouz. Learn more about this writer by checking @grievouz's about page,\n            and for more stories, please visit hackernoon.com.\nScreenshots were the app's biggest sign-up channel, so I built a watermark that's invisible in the app but appears when users take a screenshot, using iOS's secure text entry flag, which strips content from screenshots to protect passwords. It worked. It also made iOS think every chat message was a password field, breaking autocorrect and triggering \"Save to Keychain\" prompts. Fix: drop the UITextField entirely and set the underlying disableUpdateMask flag directly on a CALayer via reflection (with the private-API name base64-encoded to survive App Store review). Same screenshot-hiding behavior, no password heuristic firing. Lesson: iOS has way more hidden heuristics reading your view hierarchy than you'd expect, and private APIs are a recurring tax, not a one-time cost.\n        \n        ","thumbnail_url":"https://img.transistorcdn.com/KhCapPSRkLGL2Xw8888yuChkNRWthaKapLYTvNdu4W4/rs:fill:0:0:1/w:400/h:400/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS9zaG93/LzQxMTY2LzE2ODM1/ODIzMzAtYXJ0d29y/ay5qcGc.webp","thumbnail_width":300,"thumbnail_height":300}