Skip to content

Unreal Engine troubleshooting

Confirm HealthBridge is enabled in Edit > Plugins, restart the editor, then select Tools > HealthBridge > Setup Wizard.

If the plugin cannot load, confirm the project can compile source plugins for its Unreal Engine version and inspect the first HealthBridge module error rather than later dependent failures.

In the editor, confirm the mock provider is selected. On a device, check the platform setup, required core permission, native plugin packaging, and provider availability. Do not repeatedly initialize every frame.

PIE uses mock data. iOS needs a physical device, HealthKit-capable App ID, matching provisioning, entitlement, and app-specific usage descriptions. Android needs Health Connect and final-manifest declarations for each requested health permission. See Unreal Engine mobile platform setup.

Check permission rows in Project Settings > Plugins > HealthBridge and the final generated Android manifest. Health Connect cannot offer a type whose android.permission.health.* declaration is missing.

If the declaration exists, confirm Health Connect is installed and current, then review its granted and denied permissions for the exact package.

Apple can decline a per-type read without exposing that choice to the app. Handle empty results safely and direct the player to iOS Health privacy settings.

HealthBridge does not guarantee real-time heart-rate tracking. Health platforms and connected devices can synchronize samples after they are recorded, so an active workout can temporarily show delayed or empty results. Confirm the heart-rate permission is enabled, then refresh or retry after the platform has synchronized the data.

Treat this as a valid empty state. The selected time range may contain no data, the platform may not have synchronized, or iOS may be hiding a declined read type. Do not claim that the player granted access or has no health records.

Check whether the expected key exists in FHealthDataSample.Values. Missing fields should remain unavailable instead of being displayed as measured zero. Use the sample helper functions and consult the data-type reference.

A workout is missing distance, calories, or steps

Section titled “A workout is missing distance, calories, or steps”

Those fields are optional and guarded by bHas... flags. Source platforms and devices do not populate every metric. Hide unavailable metrics.

Android Health Connect can require route-specific consent. Explain why the route is needed, complete the platform flow, and retry. Preserve the workout if the player declines.

A write works in the editor but fails on a device

Section titled “A write works in the editor but fails on a device”

The mock provider does not prove platform write permission. Check registry write support, provider capability, direction-specific permission, final Android manifest or iOS HealthKit update configuration, and the result’s sanitized error.

Keep the record visible until deletion succeeds. HealthKit permits deletion only for objects written by the current app, and Android deletion requires a valid record ID. Prefer queries created from a returned sample or workout so ownership information is preserved.

Bind delegates once for the owning object’s lifetime and unbind during teardown. Do not bind again on every screen refresh or initialization retry.

Completion callbacks run on the game thread but can outlive a screen. Track the owning screen or request state and ignore stale completions after teardown.

When reporting an issue, include Unreal and plugin versions, platform and OS, the failed operation, and redacted error text—never raw health data or IDs.

For result-state guidance, see Errors, empty results, and recovery.