DO NOT MERGE: Issue 2106: Live Preview Snapshot

This is a PR for issue #2106.
It's super recommended to use `instancetype` rather than `id`, since it helps the code analysis stage to early-catch invalid assignments.