CBPeripheralManager can't keep running when app loses foreground

I have an iOS app that implements CBPeripheralManager to perform as a BLE heart rate monitor. When a workout session is running on our companion Apple Watch app, everything works well. The central device subscribes to our heart rate characteristic and we update the value every second.

However without the workout session, when I dismiss the app to the background while a central is subscribed, the runloop that updates the characteristic value is frozen.
iOS has built-in support for background operation of CBPeripheralManager, and I have added the "bluetooth-peripheral" Background Execution Mode but the documentation merely says

the system wakes up your app to process read, write, and subscription events

That doesn't address apps that need to actively update an already subscribed characteristic! I'm looking for a way to allow my app to continue running while I have a subscribed central.
CBPeripheralManager can't keep running when app loses foreground
 
 
Q