Questions

The ones that actually get asked, answered with what the app does rather than with what would be reassuring.

The number itself

Why is RoamGuard's figure different from my carrier's?

Because it is a different measurement, taken somewhere else, starting at a different moment. Six reasons, in rough order of size:

  • Start point. RoamGuard's first reading is a baseline and counts nothing. Install it on the 12th and it has no idea what happened between the 1st and the 12th.
  • Zero-rating. Carriers exclude some traffic from the bill. Your phone still carried those bytes, so RoamGuard counts them.
  • Rounding and batching. Carriers post usage in batches, sometimes hours late and rounded up.
  • Measurement point. The carrier counts at the network edge; the device counts at the interface. Protocol overhead lands differently.
  • Hotspot. Anything tethered to your Personal Hotspot is counted here, because the phone carried it.
  • Roaming classification. If the roaming switch was wrong for part of a trip, the totals still add up but the home/roaming split does not.

The fix is Match my carrier's figure: type in what the carrier says once, and the running total realigns.

Can it show me my real carrier usage, like the operator's own app does?

No, and nothing on the App Store can. Your carrier's app knows the figure because it is signed in to your account and asks the carrier's servers. iOS provides no API that reports plan usage to a third-party app. RoamGuard measures independently and lets you anchor it to the carrier's number instead of pretending to have it.

Does it know when I am roaming?

No. iOS gives apps no roaming API at all. The CTCarrier class that used to report a carrier and country was deprecated in iOS 16 and now returns placeholder values, so RoamGuard does not use it.

Instead: your Home/Roaming setting wins outright. If “Detect travel automatically” is on, a device region different from your home region will suggest roaming. The dashboard always labels which of the two produced the answer, and says “iOS does not report roaming status to apps” on the same card.

I am at 80% and it says my chance of going over is 0%. Is that broken?

No. The two figures answer different questions. 80% is where you are. The probability is about where the cycle ends: if you are at 80% on the 29th of a 30-day cycle, one more day at your usual pace lands well inside the allowance, so the risk really is negligible. The estimate uses the spread of your own daily usage this cycle, and with fewer than three observed days it deliberately assumes a wide spread rather than reporting a confident zero.

Does Wi-Fi count against my allowance?

No. Wi-Fi bytes are measured and recorded separately, and are never charged to the home or roaming pool. Cellular bytes are charged only when cellular is the active path at the moment of a reading, or when nothing is connected at all — the cellular interface can tick over slightly during a Wi-Fi handover and billing that would be wrong.

Behaviour

Does it keep counting if I never open the app?

Yes, and this is the part most usage trackers get wrong. The kernel's counters are cumulative since the device booted, so nothing depends on the app being awake at the right moment. RoamGuard takes a reading when you open it, when the network path changes, and whenever iOS grants it a background refresh window (requested no sooner than every 15 minutes). A missed window loses no traffic — the next reading, hours or days later, includes everything in between.

The one thing that suffers across a long gap is attribution: RoamGuard knows the bytes moved, but not which network was active for the whole gap.

What happens when I restart my iPhone?

The kernel resets every interface counter to zero. RoamGuard detects the restart from the system boot time rather than guessing from the numbers, re-anchors every interface in one step, and counts only post-boot bytes. Days already recorded keep their values. The only unrecoverable traffic is whatever moved between the last reading and the restart, which the kernel forgot as well.

What about Airplane Mode, or switching a line off?

That destroys the cellular context; when it comes back its counters start at zero. RoamGuard identifies interfaces by name and kernel index — iOS reuses names like pdp_ip1, so only the index reveals a rebuilt context. Only that one interface re-anchors; other lines keep measuring uninterrupted. The same check applies to en0 when Wi-Fi is toggled off and on.

Two SIMs, or a travel eSIM — does it cope?

Yes, and specifically so. Each cellular context is resolved on its own and the results are summed afterwards. Resolving the sum instead would mean that switching a second line on re-anchors everything and books every already-counted byte a second time: a phone sitting at 3.2 GB would instantly show 6.4.

Each line can also be pinned to its own pool, so a home line and a local eSIM running at once do not contaminate each other. Lines start on “follow the switch”, so a single-SIM phone behaves as if none of this existed. Lines are numbered rather than named, because nothing public links a cellular context to a carrier, a SIM slot or a phone number — a guessed label would be worse than no label.

Is Personal Hotspot traffic included?

Yes. Your laptop's download goes through the phone's cellular interface, so the phone carried it and your carrier will bill it. Excluding it would make the number optimistic in exactly the situation where people get caught out.

Why does my widget show a slightly different number from the app?

It should not be behind. The widget does not merely re-display what the app last published: it takes its own counter reading and projects the published state forward, then asks iOS for a refresh roughly every 30 minutes, paced to stay inside WidgetKit's daily budget. The widget never writes anything back, so the app remains the only owner of the baseline and nothing is counted twice. If the two disagree by a little, the widget is showing a moment the app has not sampled yet; opening the app reconciles them.

Will it drain my battery?

There are no timers, no polling loops, no location updates and no network requests. A reading is getifaddrs — a local system call that needs no permission and returns immediately. Work happens when you open the app, when the network path changes, or during a background window iOS chose to grant.

Why does the Live Activity disappear?

Because it is scoped to a roaming trip, not to the billing cycle. A data counter has no natural beginning or end, and pinning an activity to a month-long cycle would park it on the Lock Screen until you dismissed it as clutter. So it starts when roaming begins, shows trip usage alongside cycle usage, and clears two minutes after the trip ends, leaving the final total on screen in the meantime.

Privacy and data

Does it track my location?

No. RoamGuard never requests location permission, so iOS would refuse it even if the code asked. Travel detection compares your device's region setting with your home region — a locale string, not a position.

Does anything leave my phone?

No. The app contains no networking code of its own: no analytics, no telemetry, no crash reporting, no attribution SDK, no update check. Its privacy manifest declares no collected data types and no tracking, and it declares the three required-reason APIs it does use — system boot time, user defaults and free disk space.

Does it read what I am browsing or sending?

No, and it could not. It reads byte counters — how much an interface has carried — never the traffic itself. It is also explicitly not a VPN. Routing your traffic through a local packet tunnel would give more precise per-app figures, and was rejected: for a utility whose whole point is that nothing leaves your phone, asking to intercept every packet is the wrong trade.

Is there an account, or a subscription?

There is no account and no sign-in. The app contains no purchasing code at all — no in-app purchases, no subscription, no paywall.

Can I move my history to a new iPhone?

Turn on Settings › Sync history with iCloud before you switch. It is off by default; when on, records go through your own private iCloud database and carry a device identifier, so an iPhone and an iPad on one account are never added together. Otherwise the history lives in the app's container on the device and comes back with a full device backup restore. Setting up a new phone from scratch starts the count from zero.

Can I get my data out?

Yes. History exports as CSV or PDF from the History screen, handed straight to the iOS share sheet. RoamGuard does not upload the file; where it goes is entirely your choice.

Still stuck?

Write to hugomoriceau@icloud.com. What helps most: your iOS version, whether you run one SIM or two, what the app shows, and what your carrier shows for the same period. There is no crash reporting, so a description is genuinely all there is to go on.