1000%. Apps should not even be able to know that I've taken a screenshot - let alone change the contents of it.

The app doesn't know. It just produces a widget tree, and the OS-provided renderer renders it this way or that way. In particular, it chooses not to render controls marked as "security-sensitive" when the rendering is intended for a screenshot; it could instead put empty boxes in their place, etc. The app has no idea and no control, AFAIK.

Even having never developed on iOS before, I was able to find this in the first google search result for "ios api to detect screenshot": https://developer.apple.com/documentation/uikit/uiapplicatio...

Don't apps like Snapchat notify the other person if you take a screenshot of your messages?

Yes, iOS has userDidTakeScreenshotNotification for that.

https://developer.apple.com/documentation/uikit/uiapplicatio...

Would be nice if the user could disable that.

Yes, Snapchat does this. Apps absolutely have the ability to know when a screenshot is taken.

Snapchat advertises that they detect screenshots. They try. But they're well aware that they can't actually know.

For example, their bug bounty program policy helpfully informs you that "screenshot detection avoidance" is not considered a vulnerability: https://hackerone.com/snapchat . That's because it's always possible.

The apps definitely know. Horsemen example: If you screenshot on Amazon (and Business version) iOS apps, it “helpfully” pops its own share sheet.