While that's probably a shortcoming with Linphone (I don't have time to test right now), I suspect most people would prefer using push in order to save battery, in particular if TCP isn't an option.
I say "shortcoming" in a very loose sense because whatever Groundwire or Zoiper is doing is probably a kludge (workaround that is intended to circumvent whatever Apple intends) when using UDP in background mode.
Regardless, it's not mandatory for all iOS SIP apps to use push in order to receive incoming calls when using UDP, provided the app is in background mode (and provided the dev is smart). In fact, TCP transport with VoIP.ms works with Groundwire without push (on "Standard" for incoming calls) even after pressing the sleep button on an iPhone, but Groundwire does need to be in the background. I have no clue why that works with Groundwire though; if it's some sort of hack or kludge, I suspect the devs aren't willing to say how it's accomplished.
If the app is closed, push needs to be used with iOS.
In terms of battery drain, regardless of whether someone is on Android or iOS, Push uses the least amount of battery. However, TCP is significantly better than UDP for battery drain. Callcentric, Anveo (on paid plans), and VoIP.ms support TCP.