diff --git a/Sources/Pow/Infrastructure/Haptics.swift b/Sources/Pow/Infrastructure/Haptics.swift index dc74313..22acefb 100644 --- a/Sources/Pow/Infrastructure/Haptics.swift +++ b/Sources/Pow/Infrastructure/Haptics.swift @@ -6,14 +6,20 @@ import CoreHaptics internal struct Haptics { private static var engine: CHHapticEngine? = { let engine = try? CHHapticEngine() + addHapticEngineObservers() + return engine + }() + + private static func addHapticEngineObservers() { + // Without stopping the CHHapticEngine when entering background mode, haptics are not played when the app enters the foreground. + // See https://github.com/EmergeTools/Pow/issues/69 NotificationCenter.default.addObserver(forName: UIApplication.didEnterBackgroundNotification, object: nil, queue: nil) { _ in engine?.stop() } NotificationCenter.default.addObserver(forName: UIApplication.willEnterForegroundNotification, object: nil, queue: nil) { _ in try? engine?.start() } - return engine - }() + } private static var supportsHaptics = CHHapticEngine.capabilitiesForHardware().supportsHaptics