Rather than build a passcode directly into my app and potentially require the user to enter a passcode twice (once for the device and again for my app); I thought I might out-clever myself and do something along the lines of:
if (device has passcode)
continue into my app
else
make user enter my app passcode
I don't want to set the device passcode, I don't want to force a screen lock, not encrypting anything - all I really want is an API just to detect if a device passcode is in effect. Something like:
BOOL notReally = [UIDevice isUserSlightlyMoreSecureBecauseTheySetDeviceLockOn];
or maybe if I'm feeling lucky:
BOOL isPasscodeEnabled = [UIDevice isPasscodeEnabled];
BOOL isSimplePasscode = [UIDevice isSimplePasscode];
NSInteger minutes = [UIDevice requirePasscodeAfter];
I'm guessing not based on this question (but is a few years old) "programmatically check for iPhone's Passcode in settings bundle" or this might be the answer; "Lock Unlock events iphone" which isn't exactly what I want but might work "after the fact".
For iOS 9+ you can detect it using the new LocalAuthentication
class, and it works on Simulator as well as devices:
import LocalAuthentication
private func devicePasscodeSet() -> Bool {
//checks to see if devices (not apps) passcode has been set
return LAContext().canEvaluatePolicy(.deviceOwnerAuthentication, error: nil)
}