Package Exports
- react-native-healthkit-bridge
- react-native-healthkit-bridge/src/index.ts
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (react-native-healthkit-bridge) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
React Native HealthKit Bridge
A complete React Native library for Apple HealthKit integration, providing access to health and fitness data on iOS devices.
π Multi-Language Documentation
Documentation is available in three languages to serve a global community of developers:
πΊπΈ English (en)
- Complete Guide - Complete implementation
- Typing Guide - Type safety and typing
- Authorization Guide - 8 authorization methods
- Advanced Methods Guide - Advanced query methods
- Extended Types Guide - Extended type definitions
- React Hooks Guide - React hooks usage
- Data Types Reference - 120+ data types
- Technical Improvements - Architecture and optimizations
- HealthKit Roadmap - Development roadmap
π§π· PortuguΓͺs (pt-br)
- Guia Completo - ImplementaΓ§Γ£o completa
- Guia de Tipagem - Type safety e tipagem
- Guia de AutorizaΓ§Γ£o - 8 mΓ©todos de autorizaΓ§Γ£o
- Guia de MΓ©todos AvanΓ§ados - MΓ©todos de consulta avanΓ§ados
- Guia de Tipos Estendidos - DefiniΓ§Γ΅es de tipos estendidos
- Guia de React Hooks - Uso de React hooks
- ReferΓͺncia de Tipos - 120+ tipos de dados
- Melhorias TΓ©cnicas - Arquitetura e otimizaΓ§Γ΅es
- Roadmap do HealthKit - Roadmap de desenvolvimento
πͺπΈ EspaΓ±ol (es)
- GuΓa Completa - ImplementaciΓ³n completa
- GuΓa de Tipado - Type safety y tipado
- GuΓa de AutorizaciΓ³n - 8 mΓ©todos de autorizaciΓ³n
- GuΓa de MΓ©todos Avanzados - MΓ©todos de consulta avanzados
- GuΓa de Tipos Extendidos - Definiciones de tipos extendidos
- GuΓa de React Hooks - Uso de React hooks
- Referencia de Tipos - 120+ tipos de datos
- Mejoras TΓ©cnicas - Arquitectura y optimizaciones
- Roadmap de HealthKit - Roadmap de desarrollo
π Key Features
- β Complete Type Safety - Full TypeScript support with mapped types
- β 8 Authorization Methods - From basic to advanced smart authorization
- β 120+ Data Types - Comprehensive HealthKit coverage
- β React Hooks - 6 specialized hooks for easy integration
- β Advanced Queries - Hours, days, ranges, and smart data detection
- β Optimized Performance - Efficient queries and low memory usage
- β Robust Error Handling - Clear messages and automatic recovery
- β Autolinking - Automatic installation without manual configuration
π¦ Installation
npm install react-native-healthkit-bridge
# or
yarn add react-native-healthkit-bridgeπ§ iOS Configuration
Info.plist
<key>NSHealthShareUsageDescription</key>
<string>This app needs to access health data to provide personalized insights and track your fitness progress.</string>
<key>NSHealthUpdateUsageDescription</key>
<string>This app needs permission to save health data to help you track your fitness activities.</string>π» Basic Usage
Traditional Bridge Usage
import { HealthKitBridge, QuantityTypeIdentifier, getQuantityUnit } from 'react-native-healthkit-bridge';
const bridge = new HealthKitBridge();
// Request authorization
const isAuthorized = await bridge.requestFullAuthorization();
// Get heart rate data
const heartRate = await bridge.getQuantitySamplesForDays(
QuantityTypeIdentifier.HeartRate,
getQuantityUnit(QuantityTypeIdentifier.HeartRate),
1
);React Hooks Usage
import { useHealthKitQuantity, useHealthKitAuthorization } from 'react-native-healthkit-bridge';
function HeartRateMonitor() {
const { requestAuthorization, isAuthorized } = useHealthKitAuthorization();
const { data: heartRate, loading, error } = useHealthKitQuantity(
'HKQuantityTypeIdentifierHeartRate',
'bpm'
);
useEffect(() => {
requestAuthorization();
}, []);
if (loading) return <Text>Loading...</Text>;
if (error) return <Text>Error: {error}</Text>;
return <Text>Heart Rate: {heartRate?.[0]?.value} bpm</Text>;
}π― Use Cases
πββοΈ Fitness App
// Get steps for the last 7 days
const steps = await bridge.getQuantitySamplesForDays(
QuantityTypeIdentifier.StepCount,
getQuantityUnit(QuantityTypeIdentifier.StepCount),
7
);
// Get data for specific hours
const hourlySteps = await bridge.getQuantitySamplesForHours(
QuantityTypeIdentifier.StepCount,
getQuantityUnit(QuantityTypeIdentifier.StepCount),
24
);π₯ Medical App
// Smart authorization - only request what's needed
const result = await bridge.requestSmartAuthorization([
QuantityTypeIdentifier.HeartRate,
CategoryTypeIdentifier.HighHeartRateEvent
]);
// Ensure specific data type authorization
const authResult = await bridge.ensureDataTypeAuthorization(
QuantityTypeIdentifier.BloodGlucose
);π Health Dashboard
// Get the last day with data
const lastDayData = await bridge.getQuantitySamplesForLastDayWithData(
QuantityTypeIdentifier.HeartRate,
getQuantityUnit(QuantityTypeIdentifier.HeartRate)
);
// Query by date range
const rangeData = await bridge.getQuantitySamplesForRange(
QuantityTypeIdentifier.HeartRate,
getQuantityUnit(QuantityTypeIdentifier.HeartRate),
'2024-01-01T00:00:00Z',
'2024-01-31T23:59:59Z'
);π§ Available React Hooks
Core Hooks
useHealthKitQuantity()- For quantitative data (steps, heart rate, etc.)useHealthKitCategory()- For categorical data (sleep, symptoms, etc.)useHealthKitWorkouts()- For workout datauseHealthKitTypes()- For available data typesuseHealthKitProvider()- For provider informationuseHealthKitAuthorization()- For authorization management
Authorization Hook Example
import { useHealthKitAuthorization } from 'react-native-healthkit-bridge';
function HealthKitManager() {
const {
requestAuthorization,
requestSmartAuthorization,
ensureDataTypeAuthorization,
isAuthorized,
authorizationStatus,
loading,
error
} = useHealthKitAuthorization();
const handleSmartAuth = async () => {
const result = await requestSmartAuthorization([
QuantityTypeIdentifier.StepCount,
QuantityTypeIdentifier.HeartRate
]);
console.log('Authorized:', result.authorizedTypes);
console.log('Denied:', result.deniedTypes);
};
return (
<View>
<Button title="Request Authorization" onPress={requestAuthorization} />
<Button title="Smart Authorization" onPress={handleSmartAuth} />
<Text>Status: {isAuthorized ? 'Authorized' : 'Not Authorized'}</Text>
</View>
);
}π Performance Metrics
Before Improvements
- Type Safety: 0%
- Error Handling: Basic
- Code Reusability: Low
- Developer Experience: Medium
After Improvements (v1.9.0)
- Type Safety: 95%
- Error Handling: Robust
- Code Reusability: High
- Developer Experience: Easy
- React Integration: Native hooks support
- Query Flexibility: Multiple time-based queries
π§ Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β React Native App β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββββββ βββββββββββββββββββ β
β β TypeScript β β React Hooks β β
β β Interface β β (6 hooks) β β
β βββββββββββββββββββ βββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β JavaScript Bridge β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββββββ βββββββββββββββββββ β
β β TurboModule β β NativeModule β β
β β (New Arch) β β (Legacy) β β
β βββββββββββββββββββ βββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β iOS Native Layer β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββββββ βββββββββββββββββββ β
β β HealthKitBridge β β HKHealthStore β β
β β (Objective-C) β β (Apple SDK) β β
β βββββββββββββββββββ βββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Apple HealthKit β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββπ Additional Resources
π External Documentation
π Code Examples
- Usage Examples - Practical implementations
- TypeSafeUsageExample.ts - Typing examples
- AuthorizationExamples.ts - Authorization examples
- HealthDataWorkflowExample.ts - Complete workflow
π€ Contributing
- Fork the repository
- Create a branch for your feature
- Make your changes
- Add tests for new functionality
- Ensure all tests pass
- Submit a pull request
π Code Guidelines
- Follow TypeScript best practices
- Use meaningful names for variables and functions
- Add JSDoc comments for public APIs
- Ensure proper error handling
- Write unit tests for all new features
π License
This project is licensed under the MIT License - see the LICENSE file for details.
π Acknowledgments
- Apple for providing the HealthKit framework
- React Native community for excellent documentation and tools
- Contributors and maintainers of related open-source projects
This library is maintained by the community. If you find issues or have suggestions, please contribute!