Apple's Stolen Device Protection delays password changes but doesn't touch the content of an unlocked phone. So I wired a few things together:
- CMMotionManager at 20Hz for grab detection. I tried CMMotionActivityManager first - total waste of time. It reports "Unknown" instead of "Running", flickers between states and has a much bigger delay.
- FamilyControls + ManagedSettings for system-level shields. As there's no way to lock the phone programmatically I came up with the idea of locking the desired apps. The shield overlay persists after force-close and there's no way to dismiss it without opening the app and passing Face ID.
- Background location at kCLLocationAccuracyThreeKilometers to keep the accelerometer alive when the app is suspended. The data is never transmitted — coordinates are stored locally only when a snatch triggers so you can see where it happened.
Main weakness I should mention: deleting the app removes the shields. You can mitigate this with Screen Time passcode + disabling app deletion in Settings, but it's not automatic.
No analytics, no tracking, no network calls.