Privacy Policy
ShadowSwing is made by Hackem Software, Canada. This policy describes, plainly, what the app does and does not do with information. The short version: the app has no account system and no server of its own. Your motion data is processed on your phone and never leaves it unless you export or share it yourself. The only thing sent anywhere is anonymous usage counts (which features get used), and you can switch that off.
1. What the app collects
No personal data is sent to us. ShadowSwing does not operate a backend server, does not create an account for you, and never transmits your swings, your name or anything that identifies you. The exceptions are the anonymous usage counts and crash reports described below.
The app uses the following information locally on your device:
- Motion sensor data. While a training session is running, the app reads your iPhone's accelerometer and gyroscope through Apple's Core Motion framework in order to detect the swing, time the swing sound, estimate racket-head speed and build the 3D Shot Analysis replay. On Android, the app reads the phone's accelerometer, gyroscope and rotation vector sensor for the same purposes. This data is held in memory during the session and is not uploaded.
- App settings and counters. Your preferences (units, sound and sensitivity tuning, language) and gameplay counters (swing count, session timer, all-time best racket-head speed) are stored on the device.
- Anonymous usage counts. The app counts events such as "session started", "replay captured" or "shared an image", with a few coarse details (which sport, free or Pro, a rough swing-count range). These are sent to TelemetryDeck, a privacy-focused analytics service, without any account or anything about your actual swings. TelemetryDeck receives a salted, one-way hash derived from your device's app-specific identifier so it can count how many devices use a feature (on Android, a salted, one-way hash of an identifier created for that installation of the app); it cannot be reversed to identify you, and the numbers we see are aggregated so no individual can be singled out. We use them only to see which features people use. On Android, each count also carries the platform, the app version and the phone's language and region setting. When you buy ShadowSwing Pro, start a free trial or renew, the app also reports that purchase through the same connection: which plan, the price converted to US dollars, the currency and, on iPhone, the App Store country. It contains no payment details and nothing that identifies you, and we use it only to count sales. Everything the app sends to TelemetryDeck travels over an encrypted connection, is never used for advertising and is not shared with anyone else for their own use. You can turn this off at any time in Settings › Privacy › "Share anonymous usage stats".
- Crash and performance reports. If the app crashes, freezes, or is closed by iOS for using too much memory, Apple's own MetricKit framework may give the app a diagnostic report the next time it opens. Apple only does this if you have chosen to share analytics with app developers in your iPhone settings. The app sends a short summary through the same TelemetryDeck connection: the kind of problem, your device model, iOS version and app version, and the locations in the app's code where it happened. It contains nothing about you or your swings. On Android, the app builds this summary itself: if it crashes, it writes a short note on the phone (the type of error and its message, the top lines of the app's code where it happened, the app version and build, the Android version and API level, and the device manufacturer and model), then sends it once the next time the app opens and deletes the note. It contains nothing about you or your swings either. We use it only to find and fix bugs, and the same "Share anonymous usage stats" switch turns it off on both platforms.
- Practice reminders and streak. If you turn on reminders, the app schedules local notifications on your phone using the phone's own system (on Android 13 and later, Android asks for your permission to show notifications first); what a reminder says depends on how much of your daily goal is left, worked out on the device. The reminder time, cadence, your practice-day streak and the date of your last session are stored on the device only. Nothing is sent to us or anyone else, and there is no push-notification server. Turn reminders off in Settings at any time.
- Practice stats and daily goal. Your daily swing goal and your practice history (for each day: swings per sport, sessions, workouts, replays, time practiced, strokes played and best and average racket-head speed) are saved in a file inside the app on your phone to show the daily ring and the Stats screen. They are never uploaded and are deleted with the app, or with a reset from Settings.
- Workouts. The workouts you build and your workout results (which blocks you finished, reps counted, best racket-head speed) are saved as files inside the app on your phone. They are never uploaded and are deleted with the app. The coach voice is a set of recorded audio clips shipped inside the app; nothing is streamed and no speech of yours is recorded: the app has no microphone access.
- Android backup. If backup is turned on for your Google account on an Android phone, Android's own backup can include the app's settings, your practice stats, your workouts and workout results, and the sounds you imported. That backup is stored in your Google account by Google, not sent to us. The allowance state and Shot Analysis captures are left out of it.
- Allowance state. To apply the app's limits on free use fairly, the app records a small amount of state, such as how much of the free allowance has been used. On iPhone it is kept in the iOS Keychain, which is used because it survives a reinstall. On Android it is kept in the app's private storage on the phone, excluded from backups; uninstalling the app or clearing its storage removes it. It contains no personal information and is not readable by us.
- Purchase status. Whether you own ShadowSwing Pro, as reported to the app by Apple on iPhone or by Google Play on Android. On Android, the app keeps Google Play's last answer on the phone so Pro still works when you are offline.
2. What the app does not collect
- No name, email address, phone number or postal address.
- No account, login or password.
- No ads, no advertising identifier, and no advertising or attribution SDK.
- No crash-reporting SDK, no advertising identifier, no tracking. The only telemetry is the anonymous usage counts and crash reports described above, which you can switch off.
- No location data, contacts, photos, microphone or camera access.
- No health or fitness records, no writing to Apple Health and no use of Health Connect on Android.
The only third-party software development kit in the app is the TelemetryDeck analytics SDK described above. There are no advertising, attribution or crash-reporting SDKs; on iPhone, crash reports come from Apple's built-in MetricKit framework, and on Android from the short summary the app writes itself.
3. Purchases
On iPhone, ShadowSwing Pro is sold through Apple's In-App Purchase system using StoreKit. We never see or handle your payment details. Apple processes the transaction, tells the app whether the purchase is valid, and keeps its own records of it. Apple's handling of that information is governed by Apple's Privacy Policy, not by this one.
On Android, ShadowSwing Pro is sold through Google Play Billing, and Google is the merchant. We never see or handle your payment details. Google processes the transaction, tells the app whether you own Pro, and owns the purchase records. Google's handling of that information is governed by Google's Privacy Policy, not by this one.
Restoring purchases uses Apple's own restore mechanism on iPhone and, on Android, asks Google Play again which purchases your Google account holds. Neither requires any information from us.
4. Sharing a replay or exporting data
ShadowSwing can export a Shot Analysis replay as an image or a video, and can export swing data as a CSV file. These exports happen only when you tap the share button yourself. The file is handed to the standard share sheet of iOS or Android, and you choose where it goes: a messaging app, your photos, your files, email or another app. We are not a party to that transfer and receive no copy of it. Once the file leaves the app, the privacy policy of the destination app or service applies.
5. This website
This site is a set of static pages. It uses Google Analytics to count visits, which pages are read and which buttons are tapped (for example, the App Store and Google Play buttons). A small bar at the bottom of the page says so on your first visit. If your device is set to a European time zone, which covers the EU, the UK and Switzerland, nothing is loaded until you tap OK on that bar. Elsewhere it is on from the start, and No thanks turns it off. Google Analytics then sets its own cookies on this site; Google's privacy policy applies to what it receives. We have turned off Google's advertising features and IP-based location beyond country level, and we never see who you are. If you tap No thanks, analytics stops, Google's cookies on this site are deleted and nothing is loaded on later visits; your answer is kept in your browser's local storage so we do not ask again. If you arrive from a link that names where it was posted (for example ?utm_source=instagram), that word (and the campaign name, if the link has one) is kept in your browser for the visit and added to the App Store and Google Play links, so Apple and Google can tell us how many installs each post led to. Google Play links always say where the tap came from: that post, or else this site and the page you were on. It says nothing about you. On Android phones, a small bar can point to ShadowSwing on Google Play; if you close it, that choice is kept in your browser's local storage so the bar stays away. To change your mind, clear this site's data in your browser. There are no tracking pixels. It loads the Barlow and Barlow Condensed typefaces from Google Fonts; if that request is made, your IP address is visible to Google as the operator of that service, as with any request to any web server. If you email us using the address below, we receive whatever you put in the email.
Standard web server logs may be kept by our hosting provider for security and reliability purposes. We do not use them to build a profile of you.
6. Children
ShadowSwing is a general-audience sports app and is not directed at children under 13. Because the app collects no personal information from anyone, it collects none from children either.
7. Your rights
Canadian federal privacy law, the Personal Information Protection and Electronic Documents Act (PIPEDA), gives you rights of access to and correction of personal information an organization holds about you. In practice, we hold no personal information about you: there is nothing on our side to access, correct, export or delete.
Everything the app stores lives on your device. Deleting the app removes its settings and stored data from that device. Keychain items placed by the app can persist after deletion by design; if you want them removed, contact us at the address below and we will tell you how, or simply reinstall and use the in-app reset if one is available in your version. On Android, uninstalling the app removes everything it stored on the phone, including the allowance state; a copy in your Google account's Android backup, if backup is on, is managed in your Google account.
If you have made a purchase, your purchase record is held by Apple (iPhone) or by Google (Android), and you exercise your rights over it with that company.
8. Security
Because the app keeps data on your device and sends none of it anywhere, the main protection is the phone's own system. On iPhone that is iOS: device passcode, encryption at rest, and the Keychain. On Android, the app keeps its data in its own private storage on the phone. Keep your phone updated and locked.
9. Changes to this policy
If the app ever changes in a way that affects this policy (for example, if a feature required a server), we will update this page and change the effective date at the top. Material changes will be noted in the app release notes.
10. Governing law and contact
This policy is governed by the laws of Canada, including PIPEDA where it applies.
Questions about privacy: [email protected].
Hackem Software, Canada.