React Native HealthKit initialization error.

I installed it following the official docs.
But the moment I ran the official demo, it threw an error.

_reactNativeHealth.default.initHealthKit is not a function (it is undefined)

I’m genuinely speechless. How does even running an official example throw an error?

I found someone mentioning they hit the same error here: https://github.com/agencyenterprise/react-native-health/issues/404

Some recent version of rn changed the mechanism, lazyload modules, so require('react-native').NativeModules gives you a {} object, which means the AppleHealthKit exported from the react-native-health library is incomplete at runtime.

Open node_modules/react-native-health/index.js and you can see that’s exactly the case.

Following the code someone else posted in the thread, I still couldn’t get it working. Based on the underlying principle, I temporarily just fetched all the functions I needed manually, and then they were defined.

A temporary fix — I just cue them all, and it works. Whatever, this will do for now. Wait for the official fix.
The revised temporary approach looks like this:


import { Activities, Observers, Permissions, Units } from './src/constants'

const { AppleHealthKit } = require('react-native').NativeModules

const Kit = {
  initHealthKit: AppleHealthKit["initHealthKit"],
  isAvailable: AppleHealthKit["isAvailable"],
  getBiologicalSex: AppleHealthKit["getBiologicalSex"],
  getBloodType: AppleHealthKit["getBloodType"],
  getDateOfBirth: AppleHealthKit["getDateOfBirth"],
  getLatestWeight: AppleHealthKit["getLatestWeight"],
  getWeightSamples: AppleHealthKit["getWeightSamples"],
  saveWeight: AppleHealthKit["saveWeight"],
  getLatestHeight: AppleHealthKit["getLatestHeight"],
  getHeightSamples: AppleHealthKit["getHeightSamples"],
  saveHeight: AppleHealthKit["saveHeight"],
  getLatestWaistCircumference: AppleHealthKit["getLatestWaistCircumference"],
  getWaistCircumferenceSamples: AppleHealthKit["getWaistCircumferenceSamples"],
  saveWaistCircumference: AppleHealthKit["saveWaistCircumference"],
  getLatestPeakFlow: AppleHealthKit["getLatestPeakFlow"],
  getPeakFlowSamples: AppleHealthKit["getPeakFlowSamples"],
  savePeakFlow: AppleHealthKit["savePeakFlow"],
  saveLeanBodyMass: AppleHealthKit["saveLeanBodyMass"],
  getLatestBmi: AppleHealthKit["getLatestBmi"],
  getBmiSamples: AppleHealthKit["getBmiSamples"],
  saveBmi: AppleHealthKit["saveBmi"],
  getLatestBodyFatPercentage: AppleHealthKit["getLatestBodyFatPercentage"],
  getBodyFatPercentageSamples: AppleHealthKit["getBodyFatPercentageSamples"],
  getLatestLeanBodyMass: AppleHealthKit["getLatestLeanBodyMass"],
  getLeanBodyMassSamples: AppleHealthKit["getLeanBodyMassSamples"],
  getStepCount: AppleHealthKit["getStepCount"],
  getSamples: AppleHealthKit["getSamples"],
  getAnchoredWorkouts: AppleHealthKit["getAnchoredWorkouts"],
  getDailyStepCountSamples: AppleHealthKit["getDailyStepCountSamples"],
  saveSteps: AppleHealthKit["saveSteps"],
  saveWalkingRunningDistance: AppleHealthKit["saveWalkingRunningDistance"],
  getDistanceWalkingRunning: AppleHealthKit["getDistanceWalkingRunning"],
  getDailyDistanceWalkingRunningSamples: AppleHealthKit["getDailyDistanceWalkingRunningSamples"],
  getDistanceCycling: AppleHealthKit["getDistanceCycling"],
  getDailyDistanceCyclingSamples: AppleHealthKit["getDailyDistanceCyclingSamples"],
  getFlightsClimbed: AppleHealthKit["getFlightsClimbed"],
  getDailyFlightsClimbedSamples: AppleHealthKit["getDailyFlightsClimbedSamples"],
  getEnergyConsumedSamples: AppleHealthKit["getEnergyConsumedSamples"],
  getProteinSamples: AppleHealthKit["getProteinSamples"],
  getFiberSamples: AppleHealthKit["getFiberSamples"],
  getTotalFatSamples: AppleHealthKit["getTotalFatSamples"],
  saveFood: AppleHealthKit["saveFood"],
  saveWater: AppleHealthKit["saveWater"],
  getWater: AppleHealthKit["getWater"],
  saveHeartRateSample: AppleHealthKit["saveHeartRateSample"],
  getWaterSamples: AppleHealthKit["getWaterSamples"],
  getHeartRateSamples: AppleHealthKit["getHeartRateSamples"],
  getRestingHeartRate: AppleHealthKit["getRestingHeartRate"],
  getWalkingHeartRateAverage: AppleHealthKit["getWalkingHeartRateAverage"],
  getActiveEnergyBurned: AppleHealthKit["getActiveEnergyBurned"],
  getBasalEnergyBurned: AppleHealthKit["getBasalEnergyBurned"],
  getAppleExerciseTime: AppleHealthKit["getAppleExerciseTime"],
  getAppleStandTime: AppleHealthKit["getAppleStandTime"],
  getVo2MaxSamples: AppleHealthKit["getVo2MaxSamples"],
  getBodyTemperatureSamples: AppleHealthKit["getBodyTemperatureSamples"],
  getBloodPressureSamples: AppleHealthKit["getBloodPressureSamples"],
  getRespiratoryRateSamples: AppleHealthKit["getRespiratoryRateSamples"],
  getHeartRateVariabilitySamples: AppleHealthKit["getHeartRateVariabilitySamples"],
  getHeartbeatSeriesSamples: AppleHealthKit["getHeartbeatSeriesSamples"],
  getRestingHeartRateSamples: AppleHealthKit["getRestingHeartRateSamples"],
  getBloodGlucoseSamples: AppleHealthKit["getBloodGlucoseSamples"],
  getCarbohydratesSamples: AppleHealthKit["getCarbohydratesSamples"],
  saveBloodGlucoseSample: AppleHealthKit["saveBloodGlucoseSample"],
  saveCarbohydratesSample: AppleHealthKit["saveCarbohydratesSample"],
  deleteBloodGlucoseSample: AppleHealthKit["deleteBloodGlucoseSample"],
  deleteCarbohydratesSample: AppleHealthKit["deleteCarbohydratesSample"],
  getSleepSamples: AppleHealthKit["getSleepSamples"],
  getInfo: AppleHealthKit["getInfo"],
  getMindfulSession: AppleHealthKit["getMindfulSession"],
  saveMindfulSession: AppleHealthKit["saveMindfulSession"],
  getWorkoutRouteSamples: AppleHealthKit["getWorkoutRouteSamples"],
  saveWorkout: AppleHealthKit["saveWorkout"],
  getAuthStatus: AppleHealthKit["getAuthStatus"],
  getLatestBloodAlcoholContent: AppleHealthKit["getLatestBloodAlcoholContent"],
  getBloodAlcoholContentSamples: AppleHealthKit["getBloodAlcoholContentSamples"],
  saveBloodAlcoholContent: AppleHealthKit["saveBloodAlcoholContent"],
  getDistanceSwimming: AppleHealthKit["getDistanceSwimming"],
  getDailyDistanceSwimmingSamples: AppleHealthKit["getDailyDistanceSwimmingSamples"],
  getOxygenSaturationSamples: AppleHealthKit["getOxygenSaturationSamples"],
  getElectrocardiogramSamples: AppleHealthKit["getElectrocardiogramSamples"],
  saveBodyFatPercentage: AppleHealthKit["saveBodyFatPercentage"],
  saveBodyTemperature: AppleHealthKit["saveBodyTemperature"],
  getEnvironmentalAudioExposure: AppleHealthKit["getEnvironmentalAudioExposure"],
  getHeadphoneAudioExposure: AppleHealthKit["getHeadphoneAudioExposure"],
  getClinicalRecords: AppleHealthKit["getClinicalRecords"],
  getActivitySummary: AppleHealthKit["getActivitySummary"],
  getInsulinDeliverySamples: AppleHealthKit["getInsulinDeliverySamples"],
  saveInsulinDeliverySample: AppleHealthKit["saveInsulinDeliverySample"],
  deleteInsulinDeliverySample: AppleHealthKit["deleteInsulinDeliverySample"],
}
// console.log("AppleHealthKit: ",AppleHealthKit, "Kit=", Kit);


export const HealthKit = Object.assign({}, AppleHealthKit, {
  Constants: {
    Activities,
    Observers,
    Permissions,
    Units,
  },
})

module.exports = HealthKit