Heel Drop is live on the App Store as of August 11. It's now on both stores: the real FFT and PSD vibration analyzer that runs on the phone's own accelerometer, with no external hardware to buy or pair.
Getting there took three submissions over nine days. Neither rejection had anything to do with the DSP, the accelerometer handling, or the AISC Design Guide 11 comparison — the parts we actually worried about. Both were subscription plumbing. That's worth writing down, because both are cheap to get right the first time and expensive to discover one review cycle at a time.
Rejection one: guideline 3.1.2 — a Terms of Use link App Review can actually tap
The first submission came back for offering an auto-renewable subscription without a functional Terms of Use (EULA) link.
The trap is that Apple's rejection email names the metadata — the App Store description and the Privacy Policy URL field. Fix only that and the next rejection tells you the same rule applies to the binary. The links have to be in both places at once, and the one in the binary has to be on the purchase screen itself, not buried in a settings menu three taps away.
So Heel Drop's paywall now carries, directly under the plan tiles:
- The auto-renewal disclosure in full — charged within 24 hours before the period ends, cancel at least 24 hours before, and where to cancel.
- A Terms of Use (EULA) link and a Privacy policy link, both pointing at our own documents on this site rather than Apple's standard EULA.
Both open in an in-app web view instead of kicking the user out to Safari. That's a small detail with a real consequence: someone who taps "terms" mid-purchase comes back to the paywall with the purchase still in front of them, instead of finding themselves in a browser with no way back.
The same two links are duplicated under Settings → Legal, which is where a user who already bought looks for them.
Rejection two: guideline 3.1.1 — Restore Purchases has to be a button
The second rejection was blunter, and fair: the app had no restore path at all. Searching the codebase for "restore" turned up nothing but canvas.restore() in the chart painter.
Apple's wording on this is specific and worth quoting for anyone about to make the same assumption: automatically restoring purchases on launch will not resolve this issue. Silently calling the store API at startup does not count. There has to be a distinct control the user taps.
Heel Drop now has a Restore Purchases button at the bottom of the Pro card, plus the same action under Settings → Subscription. One implementation detail that matters more than it looks: the button sits outside the block that renders live pricing. If the store fails to return prices — bad connection, store outage — the pricing area shows an error and a retry, but the restore button is still there. A user who can't reach the store to buy shouldn't also be unable to recover something they already paid for.
The restore result is reported honestly, too. "Restored" and "no previous purchase found for this account" are different messages, because they mean different things and lead to different next steps.
The bug the rejections found for us
The most useful thing to come out of nine days of review cycles wasn't either rejection. While re-auditing the paywall copy, we checked which features were actually gated in code — and PDF reports weren't. The report screen builds and shares the PDF with no premium check anywhere.
The store listings on both platforms had been advertising PDF reports as a Pro feature.
Nobody had been charged for it — the feature was free the whole time, the copy was just wrong. But it was wrong in the exact category that gets apps rejected and refunded: a subscription description promising something the subscription doesn't actually unlock. Corrected everywhere — App Store description, both App Store subscription descriptions, the Google Play listing, and both Play subscription descriptions.
The lesson generalizes past this app: the Pro feature list should be written from the code, not from the product brief. Grep for the premium gate and see what it actually wraps.
What's in the free tier
Unchanged by all of the above, and worth restating plainly:
Free — live time-domain and FFT views, peak-frequency detection, saved sessions, PDF reports, and the AISC Design Guide 11 reference comparison. The DG11 comparison being free is deliberate; it's a reference for engineering judgment, not a certified compliance calculation, and paywalling it would make it look like something it isn't.
Heel Drop Pro — power spectral density analysis, velocity and displacement integration from frequency-domain integration of the measured acceleration, raw CSV export, and unlimited saved sessions.
No account, no login, no cloud sync. Sessions stay on the device unless you export them.
Still pending
StageMeter, the other product from the Android launch, is still working through App Review. Its paywall now carries the same two pieces — Terms of Use and Privacy Policy links next to the purchase button, and a distinct Restore purchases action. Whether that's enough to clear review in one pass, we'll find out. The point of writing rules like these down is that the next app pays for them once rather than every time.