I am wondering how we could check if the new iOS 10 API UIFeebackGenerator
is available on the current device. There are some more things we would need to check:
The first two checks can be achieved using #available(iOS 10, *)
statement and a (hacky) device-detection, but the latter one doesn't seem to be checkable.
Does someone know a solution for this? Or maybe we need to file an Apple Radar for this one. Thanks!
There's some undocumented "private thing":
UIDevice.currentDevice().valueForKey("_feedbackSupportLevel");
it returns 2 for devices with haptic feedback - iPhone 7/7+ so you can easily use this to generate Haptic feedback:
let generator = UIImpactFeedbackGenerator(style: .heavy)
generator.prepare()
generator.impactOccurred()
returns 1 for iPhone 6S, here's a fallback to generate taptic:
import AudioToolbox
AudioServicesPlaySystemSound(1519) // Actuate `Peek` feedback (weak boom)
AudioServicesPlaySystemSound(1520) // Actuate `Pop` feedback (strong boom)
AudioServicesPlaySystemSound(1521) // Actuate `Nope` feedback (series of three weak booms)
and returns 0 for iPhone 6 or older devices. Since it's kind of undocumented thing it might block you during the review stage, although I was able to pass review and submit the app with such check.
More details: http://www.mikitamanko.com/blog/2017/01/29/haptic-feedback-with-uifeedbackgenerator/