Know before you go over

RoamGuard reads the byte counters iOS keeps for each network interface, charges what it measures to a home pool or a roaming pool, and tells you where the cycle is heading days before you get there. It runs entirely on your iPhone. It has no account, no analytics, and no network layer of its own.

Read this first — what iOS will not give an app

iOS does not expose your carrier's usage figure to apps. There is no public API that reports “you have used 24 GB of your 35 GB plan”. RoamGuard cannot show you your bill, and neither can anything else on the App Store.

iOS does not tell an app whether you are roaming. No public API reports roaming status. CTCarrier, which once gave a carrier name and country, was deprecated in iOS 16 and now returns placeholder values, so RoamGuard does not use it.

Those two facts decide the whole design, so they belong at the top of this page rather than at the bottom.

What it measures
Bytes carried by this iPhone's cellular and Wi-Fi interfaces, read from the kernel's own counters.
When it starts
At the first reading after you install it — not at the start of your billing cycle.
Roaming state
Your setting. Optionally an estimate from your device region, which is labelled as an estimate on screen.
Hotspot traffic
Counted, because the phone genuinely carries it.
Fixing the gap
Type your carrier's figure in once. RoamGuard realigns the running total and carries on from there.

The app says all of this on its own dashboard and in Settings › How it works. The full method is written out in How counting works.

What a pool looks like

Home · 20 GB allowance 11.8 GB left
050%100%

Used 8.2 GB in 30 days. Daily average 0.27 GB. At this rate the cycle ends at 8.5 GB — inside the allowance. Chance of going over: 0%.

Roaming · 5 GB allowance 0.6 GB left
050%100%

At the current pace the allowance runs out in 2 days — before the cycle rolls over. Stay under 0.15 GB a day to finish inside it.

The two bars above are diagrams drawn in HTML, not screenshots. The projection line is the point of the app: a remaining-data figure tells you where you are, the projection tells you where you end up if nothing changes.

How the projection is computed

The projected total is a linear run rate: what you have used this cycle, extended over the days that are left.

The chance of going over is separate. Each remaining day is treated as a draw from the daily usage RoamGuard has actually observed this cycle, so the remaining total has mean n·μ and variance n·σ², and the probability follows from the normal distribution. With fewer than three observed days there is not enough spread to estimate, so a deliberately wide default is used rather than reporting a confident 0%.

The risk badge reads On track, Watch out or At risk, and it is never colour alone.

Risk badge thresholds
BadgeRaised when
On trackNeither condition below is met.
Watch out75% of the allowance is used, or the chance of going over reaches 20%.
At risk100% of the allowance is used, or the chance of going over reaches 50%.

In the app

RoamGuard dashboard: a ring showing 11.8 GB left with an On track badge, tiles for used, daily average, days left and safe daily pace.
Dashboard. Home and roaming are two tabs over two separate pools.
RoamGuard forecast card showing a projected end of cycle, a daily usage chart, the connection card and an About these numbers card.
Forecast, daily chart, and the card that states what the numbers are not.
RoamGuard history screen listing daily totals with a summary of used, daily average and busiest day.
History, day by day. Exportable as CSV or PDF.
RoamGuard welcome screen listing projection, threshold alerts and on-device privacy.
Setup: billing day, two allowances, thresholds. Under a minute.

Where the number shows up

Home Screen
A small or medium widget with what is left and how long the cycle has to run.
Lock Screen
Circular, rectangular and inline accessory widgets.
Live Activity
Scoped to a roaming trip, not to the billing cycle: it appears when roaming starts, shows trip usage alongside cycle usage, and clears two minutes after the trip ends.
Apple Watch
A read-only mirror, updated from the iPhone over WatchConnectivity, with complications.
Siri & Shortcuts
Remaining mobile data, remaining roaming data, data used today, days left in the cycle, refresh usage, and switch roaming on or off.
Export
CSV and PDF of your daily history, handed to the iOS share sheet.

Two SIMs

A phone with two lines runs several cellular contexts at once — pdp_ip0, pdp_ip1 and others — which appear, disappear and restart independently. RoamGuard resolves each context on its own and sums afterwards. Summing first and resolving after is not a shortcut, it is a bug: one line switching on would re-anchor the total and book every byte already counted a second time.

Each line can also be charged to its own pool, because a device-wide Home/Roaming switch cannot describe a home line and a local eSIM running side by side. Lines start on “follow the switch”, so a single-SIM phone behaves as if none of this existed.

Lines are numbered, not named. Nothing public links a cellular context to a carrier, a SIM slot or a number, so the app reports how much each line carried rather than guessing a label.

Privacy, stated as mechanism

Network requests
None. The app contains no networking code of its own — no updates, no crash reporting, no diagnostics.
Accounts
None. There is nothing to sign in to.
Analytics / SDKs
None. No telemetry, no attribution, no advertising.
Location
Never requested. Roaming is your setting or a device-region estimate.
Traffic contents
Never read. RoamGuard reads byte counters — how much an interface carried, never what it carried.
Permissions asked
One: notifications. Decline it and everything except alerts still works.

Full text: Privacy policy.

Specification

Version
1.0
Requires
iOS 18.0 or later; watchOS 11.0 or later for the Watch app
Languages
13 — Arabic, Chinese (Simplified), Dutch, English, French, German, Italian, Japanese, Polish, Portuguese (Portugal), Russian, Spanish, Turkish
Accessibility
VoiceOver, Dynamic Type, Reduce Motion; risk is never signalled by colour alone
Works offline
Entirely. There is no online mode to lose.
iCloud sync
Off by default, opt-in. Records are kept per device so an iPhone and an iPad on one account are never added together.