Skip to main content
The SDK runs entirely on the device with deterministic signal processing, not machine learning. No images are stored or transmitted; camera frames are analysed in memory and discarded, and the only output is the VitalsResult handed to your app (heart rate, HRV (RMSSD), breathing rate and related measures). The SDK makes no network calls, stores nothing, and has no analytics or crash reporting of its own. What your app then does with that result is your decision and your responsibility. This page helps you make and document it.

What leaves the device

Nothing, from the SDK. You can confirm this with a network monitor during a reading, and source licensees can audit the code. The SDK does not read identifiers (no IDFA, no advertising id, no device id), does not read contacts, location or photos, and does not write to disk.

Camera and accelerometer

The reading uses two sensors:
  • Rear camera and torch. The fingertip covers the lens; the torch lights it. Frames are analysed in memory and discarded.
  • Accelerometer. Active from start() until the session stops or goes idle, at about 50 Hz. Its samples are used only while a reading is measuring, to help estimate breathing rate from the phone’s small movements while it rests on the body or in the hand; samples outside a reading are discarded. Turn it off with motionBreathing = false if you prefer; the breathing rate then comes from the pulse signal alone (as it does on a device without an accelerometer).
Neither sensor stream is retained after the reading. The camera and torch are released when the reading completes or fails, after a cancel without auto-restart, and on stop(); on Android the SDK also clears the camera settings it applied, so the next camera feature in your app starts from the platform defaults.

App Store (iOS)

App Privacy answers

The SDK itself collects no data, so it adds no data types to your App Privacy section. Answer for what your app does with the result:

Privacy manifest

The SDK ships a PrivacyInfo.xcprivacy manifest that declares no tracking and no collected data types. Xcode merges it into your app’s privacy report automatically.

Camera usage string

NSCameraUsageDescription is required. iOS shows it in the permission prompt, and a vague string is a common review rejection. Say what the camera is for, in the user’s words:
Avoid “This app needs camera access” and avoid mentioning features you do not have.

Motion

Core Motion accelerometer sampling does not show a permission prompt. Adding NSMotionUsageDescription is still recommended: it costs nothing, some reviewers look for it, and it documents the sensor in your app’s own terms. Name the accelerometer in your consent copy as well (below), so the description of the reading is complete.

Google Play (Android)

Permissions

The SDK requires the CAMERA runtime permission and nothing else. It does not need INTERNET. Declaring the camera and flash as optional features keeps your app installable on devices that lack them; the SDK reports support at runtime.
VitalsSDK.hasCameraPermission(context) and VitalsSDK.requestCameraPermission(activity) { granted -> } handle the runtime request. Show a short rationale first; the prompt itself says only “camera”.

Data safety form

The SDK collects and shares nothing, so it adds no entries. If your app uploads results, declare Health info under Health and fitness, state whether it is shared, and whether it is required or optional. If your app is in a health category, review Google Play’s health apps requirements for the declaration and privacy policy they expect. Where you ask for consent (or explain the feature), name both sensors, the duration, what is computed, and what you do with the result. A template:
Vitals reading. This 60-second reading uses your phone’s rear camera and flash to measure the pulse in your fingertip, and the accelerometer to follow your breathing. The reading is processed on your phone. No photos or video are saved. The result (heart rate, HRV (RMSSD), breathing rate and related measures) is stored in your account so you can see your progress. You can delete your readings at any time in Settings.
Adjust the last two sentences to match what your app actually does.

Regional notes

  • EU/EEA and UK. Once you store a result and link it to a person, it is health data under the GDPR (a special category). That normally means explicit consent, a clear purpose, retention limits and a way to delete. The SDK’s on-device design keeps the processing local until you decide to store or send the result.
  • US. If your app is covered by HIPAA (for example, offered through a covered entity), the result is PHI once stored; the usual safeguards apply to your storage and transport, not to the SDK, which stores nothing.
  • Children. Do not offer the reading to children without the consent your jurisdiction requires. The validation study included adults only.
This is orientation, not legal advice. Have counsel review your consent flow and store policies.

Not a medical device

The NEUROFIT Vitals SDK is a general wellness tool. It is not a medical device and does not diagnose, treat, mitigate or prevent any disease or condition. Keep your own claims in the same place:
  • Describe HRV (RMSSD), heart rate and breathing rate as wellness and self-tracking metrics.
  • Do not use the readings to detect arrhythmias or any medical condition, and do not imply that you do.
  • Avoid words like “diagnose”, “detect”, “clinical” or “medical grade” in features built on the SDK.
  • Include a short disclaimer where results are shown, for example: “For wellness and self-tracking. Not a medical device. Talk to a healthcare professional about any health concern.”
If you plan to make a health claim, involve regulatory counsel first; the position above is what NEUROFIT’s own app takes.

Security

  • License keys are verified offline with a public key compiled into the SDK. There is nothing to phone home to.
  • The SDK does not log metrics or frames. Its own logging (os.Logger under subsystem com.neurofit.vitals on iOS, Log with tag NeurofitVitals on Android) is off by default; VitalsSDK.isLoggingEnabled (iOS) and VitalsSDK.loggingEnabled (Android) turn it on for debugging, and it then contains state transitions and capture decisions only, never metric values, frames or license contents.
  • The license key is verified in memory on each launch and never written to disk.
  • Source licensees can build from source and audit every path.