The problem (or, at least, this problem) is not the amount of time between updates. The problem is an update that implies the location information is valid now when in fact it hasn’t been valid for a significant amount of time.
Both Life360 and Google Maps Location Sharing include timestamps that indicate when the location information was valid. (And from what I’ve experienced, these timestamps seem valid.) For these the composite tracker can decide whether to use an update from one of them, or to discard it if it’s older (or at least not newer) than the last location information that was used.
But for the iOS based device_tracker, it would appear that it provides updates with significantly old location information (and by “significant”, I mean older than a valid/accurate update from another tracker), and worse, provides no indication of how old the information is. (I haven’t verified this is true. I’m concluding this based on what you’ve told me.)
So, for example, if Life360 says your device has entered the Home zone (and it has), and then iOS says your device is still outside the Home Zone (and implies that location is valid now, even though it isn’t), there’s not a whole lot the composite tracker can do about that. And trying to come up with some generic algorithm (other than timestamps) that attempts to ignore what otherwise appears as valid updates, would not be easy.
I’d still like to do something about this if possible, because I suspect you’re not the only one using the iOS based tracker. But so far I still can’t seem to figure out how the corresponding device_tracker is getting updated. (I see no file in components/device_tracker, other than icloud.py, that seems to be associated with the ios component. And so far I can’t make any connection between components/ios.py and a device_tracker.) If you, or anyone using this component, has any clues as to what code is involved, I’d appreciate it. E.g., if you look in home-assistant.log and see a state_changed event for the iOS-base device_tracker entity, what do you see immediately above that that might imply what code is involved?