I am developing "local push" VoIP application. I have a question about issues I found while testing this app.
After repeating a test for 24 hours in which a incoming call followed by an immediate disconnect 0.1 seconds later, the iPhone of incommig call side encountered a 0xBAADCA11 error, causing iOS to force-close the app. (The incidence is low, occurring three times in 17280 times incoming call(24 hours.)) This problem found on iOS17.6.1 (iPhone11Pro).
When the same test was performed on iOS18.2 (iPhoneSE3), the problem did not occur.
Did iOS take something measures against the 0xBAADCA11 error between iOS17.6.1 and iOS18.2?
If yes, I want to encourage customers to upgrade to the latest iOS version, please tell me about it?
※I have attached an ips files and sysdiagnose file of the 0xBAADCA11 error occurring. (please refer sysdiagnose also if you need.)
[sysdiagnose_2025.01.17_14-24-48+0900_iPhone-OS_iPhone_21G93.tar.gz] https://drive.google.com/file/d/1CV8laKzdnQxvwaAIOwMcXL8rAYL2jq35/view?usp=sharing
Did iOS take something measures against the 0xBAADCA11 error between iOS17.6.1 and iOS18.2?
No, nothing significant changed in this area between iOS 17 & iOS 18.
After repeating a test for 24 hours in which a incoming call followed by an immediate disconnect 0.1 seconds later, the iPhone of incommig call side encountered a 0xBAADCA11 error, causing iOS to force-close the app.
Historically, I have seen a few cases where invalid call terminations have occurred, typically caused by very unusual call patterns and race conditions. For example, in iOS 13 you could cause an invalid 0xBAADCA11 by:
- Receiving a incoming call.
- Immediately cancelling it.
- Receiving a new incoming call EXACTLY 7s later (no more, no less).
I haven't seen any issue here for several years, however, I will say that these issue almost always involved very precise timing, which means the differences in devices can be much more important than the difference in system versions.
Having said that, the much more common issue is problems managing PKPushRegistry and/or NEAppPushManager. The system needs the "target" object to deliver your pushes to and will terminate your app if the missing object means it can't deliver the push. Both of those objects and your receiving delegate should be setup once early in the app launch and left running for your apps entire lifetime. Do NOT destroy an existing one or create a new one, that will only cause problems.
__
Kevin Elliott
DTS Engineer, CoreOS/Hardware