Support bridgeless architecture lazy loaded functions#396
Support bridgeless architecture lazy loaded functions#396andrewzey wants to merge 2 commits intoagencyenterprise:masterfrom
Conversation
There was a problem hiding this comment.
Well done!
Small adjustment:
import { Activities, Observers, Permissions, Units } from './src/constants'
const { AppleHealthKit } = require('react-native').NativeModules
export const HealthKit = {
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,
Constants: {
Activities,
Observers,
Permissions,
Units,
},
}
module.exports = HealthKit
|
@Ashalbulk Thanks for the review. I updated the code accordingly as well as my yarn patch and confirmed this works properly on React Native 0.76.0 bridgeless architecture both in development (using Xcode 16.1 running on iOS 18.1 simulator) as well as in production physically on a device (iPhone 15 Pro @ iOS 18.0.1 built via Bitrise using XCode 16.0) |
|
Thanks for putting this PR up! Are there any blockers with merging this in? I rely on this library and would love to be able to update to the new arch! |
|
Also relying on this to upgrade to 0.76! Would be great to get this in please. |
|
Thanks for the PR! Is there anything preventing it from being merged? Would love to see this released soon. Thanks |
|
Hey @GGGava @ruan-azevedo can you help us with this PR please? 🙏 |
|
Guys can you please merge this PR. |
carozo
left a comment
There was a problem hiding this comment.
hey, using this on Android is throwing this error:

I was able to fix it using optional chaining:
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,
|
Can we get this reviewed/merged, please? |
|
I believe this is a more actively developed project: https://github.com/kingstinct/react-native-healthkit |
|
Fixed the issue for me |
|
Friendly ping hoping to see this merged! |
|
Please merge this one. Why is it still open? |
|
Great job on this! would love to see it merged as well :) |
|
when will this be merged? |
any recommendations?? 😄 |
|
I hope this gets merged soon, but if you're blocked by this and use yarn 2+, here's how you can get these changes.
diff --git a/index.js b/index.js
index 06e5105d5057fc403ed92584821c6b22ff210ff3..ad5a54b08491491bb4fa30ea3d726dff4e73ddbd 100644
--- a/index.js
+++ b/index.js
@@ -2,13 +2,105 @@ import { Activities, Observers, Permissions, Units } from './src/constants'
const { AppleHealthKit } = require('react-native').NativeModules
-export const HealthKit = Object.assign({}, AppleHealthKit, {
+export const HealthKit = {
+ 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,
+
Constants: {
Activities,
Observers,
Permissions,
Units,
},
-})
+}
module.exports = HealthKit
If you're on |
|
Is this getting merged soon? I see this is open since last year.... |
|
I am getting error on prepare eas build, it's working fine in debug mode,
|
|
Great work! |
|
Any new about this PR getting merged? |
|
ffs |
react-native-health の index.js が Object.assign({}, AppleHealthKit, ...)
でネイティブモジュールをエクスポートしているが、New Architecture (Bridgeless)
では NativeModules のメソッドがプロトタイプ上に遅延ロードされるため、
Object.assign() では own enumerable property しかコピーされず
initHealthKit / getSleepSamples 等のメソッドが全て消失していた。
Object.create(AppleHealthKit) に変更し、プロトタイプチェーンを維持して
メソッドへのアクセスを確保する。
参考: agencyenterprise/react-native-health#404
参考: agencyenterprise/react-native-health#396

Description
Exports functions properly for bridgeless architecture that is default as of react native 0.76.0
Fixes #395
Type of change
Checklist: