Effective date: September 18, 2026
Pip ("the app", "we", "us") is a family activity decision app built for personal family use. This policy explains what data the app collects, how it is used, and your rights regarding that data.
Pip collects the following data to provide its core features:
Crash and performance diagnostics. If the app crashes, freezes or misbehaves, iOS gives the app a report about it, on your device, through Apple's MetricKit. The app does not send us that report. It reads it on your device and sends a different one that it writes itself, out of a list of things it knows how to describe.
Two parts of Apple's report are written as ordinary sentences: the reason iOS gives for ending the app, and the message attached to a file or system error. Those are the parts where a file name, or something you typed, can turn up. The app does not send them. In their place it sends six things it recognises: which part of iOS ended the app, the type of error, the standard phrase for the kind of programming mistake that ended it, the name of the error type raised, and two things about a block of memory, its read and write permissions and how it is shared. Each of those six is chosen from a fixed list written into the app: the app compares what iOS said against that list and then sends the list's own wording.
Three more things travel with those and are not chosen from a list, so they are named here exactly. Two are numbers iOS attached, one to the ending and one to the error. A number is sent only when it sits in the same written part as the name it belongs to, after that name, in the format iOS itself uses. The only things allowed to sit between the two are punctuation, the word iOS writes in front of a code, and a short fixed list of words the kernel puts there itself, one of which carries a number of its own that the app skips rather than reads. Anything else at all stops the search and the number is dropped. Each number is also checked to be a number and nothing else. The third is the size of that block of memory, which the app works out by subtracting two addresses it read itself, so it is a measurement rather than anything iOS wrote.
Out of those two written parts the app copies no words at all. What it sends from them is a label chosen from a fixed list, or one of the two numbers described above beside the name that number belongs to; where it recognises nothing it records only that there was something there it could not read, never what that was. The same is true of an error type it does not know.
The stack trace is rebuilt, not filtered. The stack trace is the machine-written part of the report: a tree of steps showing where in the program the failure happened. The app reads Apple's tree and writes a new one containing only the pieces it has names for - for each step, the identifier of the piece of code it happened in, that piece of code's name, two numbers saying where inside it, and the steps underneath. Anything else in Apple's tree, including anything a future version of iOS adds to it, is counted and not copied: the report says how many things it did not recognise, never what they were. Because the new tree is written rather than edited, the only characters it can contain are letters, digits, and - . _ + with the punctuation that separates them: no space, no /, no @, and no letter outside the English alphabet. A file path needs its separator, an e-mail address needs its @, and a name written in another alphabet needs a letter that is not in that set, so none of those three can be written into it at all. Travelling with it: how many steps it wrote, if it left any out, how big Apple's own tree was, and whether it could read Apple's tree at all.
A web address is the one category of those four that is only partly closed, and this says so rather than rounding it up. A link with a / is refused, but a bare host name such as www.example.com uses only characters a code file's name may use, so nothing in the shape tells the two apart.
The app build, the iOS version and the processor type travel too. Each is checked against the exact shape it is meant to have - the iOS version, for instance, must be one of a fixed list of Apple platform names followed by a version number and, if present, a build code - and anything that does not match that shape is dropped and counted rather than sent.
What else travels: which of the four kinds of report this is, the low level exception and signal numbers iOS recorded, the app build, the iOS version and the processor type, the time window the report covers, and, where they apply, how long the app was frozen, how much it wrote to storage, and how much processor time it used.
One thing travels with it, and it is the same thing that travels with every other count we collect: a pseudonymous per-install code. It lets us tell that ten crashes came from one installation rather than from ten, and it is not your name, your e-mail or your Apple account. We keep the report for 90 days and use it only to fix the bug.
There is no setting in the app to turn these diagnostics off.
Pip uses the following third-party services to provide its features:
All family library data and decision history is stored locally on your device using Apple's secure on-device storage. We do not have access to this data. If you delete the app, all locally stored data is permanently deleted.
The usage events described in section 1 are stored for 365 days, and the crash and performance diagnostics for 90 days. Both are then deleted automatically by the database's built-in time-to-live policy.
Pip is designed for family use and is not directed at children under 13 as the primary user. The app does not knowingly collect personal information from children. Parents manage the app and its content.
We may update this policy as new features are added. The effective date at the top of this page will reflect any changes. Continued use of the app after updates constitutes acceptance of the revised policy.
If you have questions about this privacy policy, contact us at:
mixed.pulsar.33@icloud.com