I have an ios app that takes audio from the phone microphone, performs some processing on the mic data in real time and sends the result to headphones
In Project -> Capabilities -> Background modes, I have selected Audio, AirPlay and Picture in Picture
I want the app to continue to read microphone data and send audio to headphones when the app is in background (user presses home button) and when the phone screen is locked using the lock button
All of this is happening, so I don't think there are any problems with the app permissions, but I have noticed that after the app is backgrounded, it suddenly gets killed, usually in less than a minute
I managed to catch an instance of the app getting killed in the background in the xcode console and the message was
Message from Debugger: terminated due to signal 9
Looking around in google indicates that this simply means that the app was destroyed by the OS using SIGKILL
Is there any way to find out why the app was killed? Is it just impossible to keep the app running in background for a long period? Before I enabled Audio, AirPlay and Picture in Picture
background mode, the audio used to stop as soon as I pressed the home button or the screen lock button. I am assuming that since the audio keeps running when I press the home button now implies I am indeed able to run mic/speaker in the background if I have to, and there are music players as well as audio recorder apps that work in the background until the user specifically closes them.
How can I find out the exact reason why my app is getting closed automatically, and what can I do to keep it running in the background indefinitely until the user closes it?
After you installed your app through xcode, run it normally (not by run in xcode), Let it crash. Then connect the phone, go to xcode -> Window -> Devices and Simulators -> View Device Logs. Then find the most recent crash.
Your particular problems sounds to me like overuse of CPU. App in background cannot utilize more than 80% (IIRC) of device CPU for extended periods of time (around one minute) or it will be killed by the system. If that is your case you simply need to optimize your code to not hog the CPU.