New app: Arc Timeline Recorder, now live on the App Store!

Arc Timeline Recorder is a new companion app to Arc Timeline, which for most people can probably replace Arc Mini.

Most of us use Arc Mini as a backup to Arc Timeline, to avoid data gaps. We don’t use Mini’s UI for editing our timelines (I’ll be the first to admit Mini’s UI is not great). We just want it there to take over recording in cases where Arc Timeline gets terminated.

Well, in that case why have a UI? Bring on: Arc Timeline Recorder. (Note: I’m just going to call it Arc Recorder most of the time, because otherwise it’s a bit of a mouthful).

Having no (or almost no) UI means the app is smaller, taking up much less memory (map views are major memory hogs). That means that it is also a much smaller target for iOS’s background app terminations during low memory situations. It will be much lower down the list, and least likely to get terminated. That means even better data gap prevention reliability.

LocoKit2

Arc Recorder is built on top of the new LocoKit2 recording engine, which is a ground up rebuild of LocoKit, Arc’s longtime recording engine.

This rebuild has allowed for a clean break from almost a decade of accumulated cruft, with opportunity for doing things better, tidier, more efficiently, more accurately, etc.

Not all of LocoKit has been rebuilt into LocoKit2 yet. But the core essentials are already there - enough to power Arc Recorder.

A new, smarter Kalman filter for location data

The industry standard way to clean up noisy and unreliable location data is to use what’s called a Kalman filter. These filters take into account the reported accuracy of each location update, the time between updates, and also the reported direction and speed of each update.

Old LocoKit’s Kalman filter didn’t bother with direction or speed information. I initially built the most minimal Kalman filter possible, and the results were impressive, so I didn’t push further. But for LocoKit2 I wanted to do it proper. So the new Kalman filter also accounts for reported direction and speed, allowing for more intelligent filtering, getting more sensible results out of noisy and untrustworthy data.

Here’s some examples of comparisons between the raw incoming data (grey lines), old Kalman filter (green lines), and new Kalman filter (orange lines). You can see that the course and speed information has allowed the filter to correct for drifting weirdness in the raw data, getting paths much closer to reality. Meanwhile the old Kalman in green does a good job of cleaning up noise in the raw data, but doesn’t know enough to correct for the various drift that can happen in built up city areas.

Example 1

Example 2

Example 3

Rebuilt Stationary State detection and Sleep Mode detection

I’ve also rebuilt these two essential detectors, to be cleaner, simpler, smarter. There’s not really any pretty screenshots to show off that work, but in general they achieve more accurate results, for Better Happiness.

I’m still going to continue fine tuning the sleep mode detector a bit more though, as I’m noticing that while in most situations it does better than the old one, in some situations it does noticeably worse. It’ll take more time and testing to really fine tune it to perfection. Though so far it feels like on average it does better than the old one, so there’s no reason why that should hold up the public release!

Oh, LocoKit2 is available on Github, for anyone who wants to follow along with the development, as I port over more of old LocoKit’s features.

The todos are roughly:

  • Places system
  • Timeline processing
  • Activity type classifiers
  • Trust Factors
  • SimpleItems (used for the monthly and yearly map views)

I’ve got various wishlist improvements I want to make to each of those subsystems, some minor, some significant.

I’m also hoping that the new Kalman filter will make the old Trust Factor system mostly/partially unnecessary. But I suspect that the reality will still be that raw location data sometimes contains too much nonsense for the Kalman to make sense of, so Trust Factors will perhaps still need to be kept around.

Hi. Looks great- just installed and deleted Arc Mini. One thing- I’ve now got the location indicator always on in my Dynamic Island, is there a way to turn that off? Thanks!

Same here. how to disable the bar

Ah, that annoying Dynamic Island location indicator :disappointed:

I think that one’s a lost battle, unfortunately. Apple have introduced a new API for managing background location recording, and the new system explicitly includes that indicator, with no way to opt out of it.

And given the changes they made in … iOS 16.3 (if I remember right), opting out of the indicator with the old system required making the app record less efficiently, consuming more battery. So the opt-out was no longer a fair option anyway, since that change.

From the API docs on the new system:

CLBackgroundActivitySession
An object that manages a visual indicator that keeps your app in use in the background, allowing it to receive updates or events.

Part of rebuilding LocoKit has been to update its API uses to the most modern variants, so that LocoKit2 doesn’t get left behind by Apple, with use of eventually unsupported systems.

I could have used the old system for managing background location updates, but some parts of that old system are … well, very old, and on the cusp of being deprecated or unsupported. (The introduction of the new CLBackgroundActivitySession in iOS 17 tends to send that message).

I think all we’re left with now is appealing to Apple to give us the choice to opt out of that indicator, perhaps in iOS’s own Settings app, by contacting them through Apple Support. From the perspective of third party location recording apps (eg Arc), the subtext is clear: they don’t want app developers opting out of the indicator anymore.

What is the recommended way of using both the main Arc app and the Timeline Recorder? If the Timeline Recorder is using the improved LocoKit2 but the main app is not, do you recommend terminating the main Arc app and only leave the Recorder running, unless actively editing timeline items?

1 Like

Thanks @matt - I’ve put Arc Mini into the incinerator now :fire:

1 Like

Leave them both alive and recording.

They each don’t mind that the other is recording data slightly differently. Well, ok, Arc Timeline kinda gets a bit “wtf” when it sees the LocoKit2 data sometimes, because it has a slightly different “shape” or “feel” to it. But it still processes it fine, and its activity type classifiers will fairly quickly adjust to recognise the subtle differences.

Plus you want them both running so that you get data gap protection.

Cool. Thank you very much!

One last question: currently the iCloud backup size calculator shows both Arc and the Timeline Recorder using 9+ GB of storage:

I imagine this is incorrect? There’s no reason for Arc and the Timeline Recorder to duplicate the data storage in my iCloud backups. Probably just a UI display issue then?

Yeah, it has to be incorrect. The two apps are sharing a single database, which is 99% of the storage space.

I wonder if possible iOS’s iCloud backups make a copy of the shared “app group” data, one for each app using the app group. There might be some reason why they want to do it that way. Or it could be just that particular view presenting the information wrong.

Basically it shouldn’t be 9GB for each app (ie 18GB total). Arc Timeline / Recorder aren’t doing anything to make that possible. So either iOS iCloud backups are unnecessarily duplicating the data in the backups, or the view is telling us wrong information.

1 Like

I hate that indicator so much. I seem to have tapped the Dynamic Island about 5-10 times per day since installing the latest app and it’s driving me nuts to be navigating other apps with no thought about Arc/location at all, and then be faced with the screen showing me how many hours the Arc Recorder has been running.

It’s not just the indicator; it’s that the Dynamic Island has now become an area of the screen I need to avoid when doing things like scrolling a page or selecting text to copy.

I’m aware that it’s an Apple decision. I just want to throw my iPhone in the river every time it happens!!!

You and me both. I have to do a lot of deep breathing to contain my anger over that Apple decision. It’s really … yeah, deep breaths.

I could partially work around it, part of the time, by turning it off when recording is active, and only turning it on when in sleep mode. But… actually that would still require using the old background recording API instead of the new one. Which… well, could be fine, given that Apple would cause a colossal mess for existing apps if they turned off that old system any time soon.

But it would only be a partial win, given that the indicator would still need to be on during sleep mode. So it wouldn’t be greatly satisfying, nor solve the problem properly. So I’ve kind of just conceded that I’ve lost that battle against Apple. And hoping that someday they’ll realise just how annoying it is to the rest of us, and give us a way to properly opt out of it.