diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..8a6be07 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,16 @@ +# OSX +# +.DS_Store + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml +*.hprof +.cxx/ + +# Bundle artifacts +*.jsbundle diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..d666bca --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,182 @@ +apply plugin: "com.android.application" +apply plugin: "org.jetbrains.kotlin.android" +apply plugin: "com.facebook.react" + +def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() + +/** + * This is the configuration block to customize your React Native Android app. + * By default you don't need to apply any configuration, just uncomment the lines you need. + */ +react { + entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"].execute(null, rootDir).text.trim()) + reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() + hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc" + codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() + + enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean() + // Use Expo CLI to bundle the app, this ensures the Metro config + // works correctly with Expo projects. + cliFile = new File(["node", "--print", "require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })"].execute(null, rootDir).text.trim()) + bundleCommand = "export:embed" + + /* Folders */ + // The root of your project, i.e. where "package.json" lives. Default is '../..' + // root = file("../../") + // The folder where the react-native NPM package is. Default is ../../node_modules/react-native + // reactNativeDir = file("../../node_modules/react-native") + // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen + // codegenDir = file("../../node_modules/@react-native/codegen") + + /* Variants */ + // The list of variants to that are debuggable. For those we're going to + // skip the bundling of the JS bundle and the assets. By default is just 'debug'. + // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. + // debuggableVariants = ["liteDebug", "prodDebug"] + + /* Bundling */ + // A list containing the node command and its flags. Default is just 'node'. + // nodeExecutableAndArgs = ["node"] + + // + // The path to the CLI configuration file. Default is empty. + // bundleConfig = file(../rn-cli.config.js) + // + // The name of the generated asset file containing your JS bundle + // bundleAssetName = "MyApplication.android.bundle" + // + // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' + // entryFile = file("../js/MyApplication.android.js") + // + // A list of extra flags to pass to the 'bundle' commands. + // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle + // extraPackagerArgs = [] + + /* Hermes Commands */ + // The hermes compiler command to run. By default it is 'hermesc' + // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" + // + // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" + // hermesFlags = ["-O", "-output-source-map"] + + /* Autolinking */ + autolinkLibrariesWithApp() +} + +/** + * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization). + */ +def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean() + +/** + * The preferred build flavor of JavaScriptCore (JSC) + * + * For example, to use the international variant, you can use: + * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` + * + * The international variant includes ICU i18n library and necessary data + * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that + * give correct results when using with locales other than en-US. Note that + * this variant is about 6MiB larger per architecture than default. + */ +def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+' + +android { + ndkVersion rootProject.ext.ndkVersion + + buildToolsVersion rootProject.ext.buildToolsVersion + compileSdk rootProject.ext.compileSdkVersion + + namespace 'com.anonymous.digitalpilates' + defaultConfig { + applicationId 'com.anonymous.digitalpilates' + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0.12" + + buildConfigField "String", "REACT_NATIVE_RELEASE_LEVEL", "\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\"" + } + signingConfigs { + debug { + storeFile file('debug.keystore') + storePassword 'android' + keyAlias 'androiddebugkey' + keyPassword 'android' + } + } + buildTypes { + debug { + signingConfig signingConfigs.debug + } + release { + // Caution! In production, you need to generate your own keystore file. + // see https://reactnative.dev/docs/signed-apk-android. + signingConfig signingConfigs.debug + def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false' + shrinkResources enableShrinkResources.toBoolean() + minifyEnabled enableMinifyInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true' + crunchPngs enablePngCrunchInRelease.toBoolean() + } + } + packagingOptions { + jniLibs { + def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false' + useLegacyPackaging enableLegacyPackaging.toBoolean() + } + } + androidResources { + ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~' + } +} + +// Apply static values from `gradle.properties` to the `android.packagingOptions` +// Accepts values in comma delimited lists, example: +// android.packagingOptions.pickFirsts=/LICENSE,**/picasa.ini +["pickFirsts", "excludes", "merges", "doNotStrip"].each { prop -> + // Split option: 'foo,bar' -> ['foo', 'bar'] + def options = (findProperty("android.packagingOptions.$prop") ?: "").split(","); + // Trim all elements in place. + for (i in 0.. 0) { + println "android.packagingOptions.$prop += $options ($options.length)" + // Ex: android.packagingOptions.pickFirsts += '**/SCCS/**' + options.each { + android.packagingOptions[prop] += it + } + } +} + +dependencies { + // The version of react-native is set by the React Native Gradle Plugin + implementation("com.facebook.react:react-android") + + def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true"; + def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true"; + def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true"; + + if (isGifEnabled) { + // For animated gif support + implementation("com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}") + } + + if (isWebpEnabled) { + // For webp support + implementation("com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}") + if (isWebpAnimatedEnabled) { + // Animated webp support + implementation("com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}") + } + } + + if (hermesEnabled.toBoolean()) { + implementation("com.facebook.react:hermes-android") + } else { + implementation jscFlavor + } +} diff --git a/android/app/debug.keystore b/android/app/debug.keystore new file mode 100644 index 0000000..364e105 Binary files /dev/null and b/android/app/debug.keystore differ diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro new file mode 100644 index 0000000..551eb41 --- /dev/null +++ b/android/app/proguard-rules.pro @@ -0,0 +1,14 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# react-native-reanimated +-keep class com.swmansion.reanimated.** { *; } +-keep class com.facebook.react.turbomodule.** { *; } + +# Add any project specific keep options here: diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..3ec2507 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..cffccec --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/java/com/anonymous/digitalpilates/MainActivity.kt b/android/app/src/main/java/com/anonymous/digitalpilates/MainActivity.kt new file mode 100644 index 0000000..deee6b3 --- /dev/null +++ b/android/app/src/main/java/com/anonymous/digitalpilates/MainActivity.kt @@ -0,0 +1,65 @@ +package com.anonymous.digitalpilates +import expo.modules.splashscreen.SplashScreenManager + +import android.os.Build +import android.os.Bundle + +import com.facebook.react.ReactActivity +import com.facebook.react.ReactActivityDelegate +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled +import com.facebook.react.defaults.DefaultReactActivityDelegate + +import expo.modules.ReactActivityDelegateWrapper + +class MainActivity : ReactActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + // Set the theme to AppTheme BEFORE onCreate to support + // coloring the background, status bar, and navigation bar. + // This is required for expo-splash-screen. + // setTheme(R.style.AppTheme); + // @generated begin expo-splashscreen - expo prebuild (DO NOT MODIFY) sync-f3ff59a738c56c9a6119210cb55f0b613eb8b6af + SplashScreenManager.registerOnActivity(this) + // @generated end expo-splashscreen + super.onCreate(null) + } + + /** + * Returns the name of the main component registered from JavaScript. This is used to schedule + * rendering of the component. + */ + override fun getMainComponentName(): String = "main" + + /** + * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] + * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] + */ + override fun createReactActivityDelegate(): ReactActivityDelegate { + return ReactActivityDelegateWrapper( + this, + BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, + object : DefaultReactActivityDelegate( + this, + mainComponentName, + fabricEnabled + ){}) + } + + /** + * Align the back button behavior with Android S + * where moving root activities to background instead of finishing activities. + * @see onBackPressed + */ + override fun invokeDefaultOnBackPressed() { + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) { + if (!moveTaskToBack(false)) { + // For non-root activities, use the default implementation to finish them. + super.invokeDefaultOnBackPressed() + } + return + } + + // Use the default back button implementation on Android S + // because it's doing more than [Activity.moveTaskToBack] in fact. + super.invokeDefaultOnBackPressed() + } +} diff --git a/android/app/src/main/java/com/anonymous/digitalpilates/MainApplication.kt b/android/app/src/main/java/com/anonymous/digitalpilates/MainApplication.kt new file mode 100644 index 0000000..4e4f97f --- /dev/null +++ b/android/app/src/main/java/com/anonymous/digitalpilates/MainApplication.kt @@ -0,0 +1,56 @@ +package com.anonymous.digitalpilates + +import android.app.Application +import android.content.res.Configuration + +import com.facebook.react.PackageList +import com.facebook.react.ReactApplication +import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative +import com.facebook.react.ReactNativeHost +import com.facebook.react.ReactPackage +import com.facebook.react.ReactHost +import com.facebook.react.common.ReleaseLevel +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint +import com.facebook.react.defaults.DefaultReactNativeHost + +import expo.modules.ApplicationLifecycleDispatcher +import expo.modules.ReactNativeHostWrapper + +class MainApplication : Application(), ReactApplication { + + override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper( + this, + object : DefaultReactNativeHost(this) { + override fun getPackages(): List = + PackageList(this).packages.apply { + // Packages that cannot be autolinked yet can be added manually here, for example: + // add(MyReactNativePackage()) + } + + override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry" + + override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG + + override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + } + ) + + override val reactHost: ReactHost + get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) + + override fun onCreate() { + super.onCreate() + DefaultNewArchitectureEntryPoint.releaseLevel = try { + ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase()) + } catch (e: IllegalArgumentException) { + ReleaseLevel.STABLE + } + loadReactNative(this) + ApplicationLifecycleDispatcher.onApplicationCreate(this) + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig) + } +} diff --git a/android/app/src/main/res/drawable-hdpi/notification_icon.png b/android/app/src/main/res/drawable-hdpi/notification_icon.png new file mode 100644 index 0000000..4ffeb8e Binary files /dev/null and b/android/app/src/main/res/drawable-hdpi/notification_icon.png differ diff --git a/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png new file mode 100644 index 0000000..7a4d9d1 Binary files /dev/null and b/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ diff --git a/android/app/src/main/res/drawable-mdpi/notification_icon.png b/android/app/src/main/res/drawable-mdpi/notification_icon.png new file mode 100644 index 0000000..67271a4 Binary files /dev/null and b/android/app/src/main/res/drawable-mdpi/notification_icon.png differ diff --git a/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png new file mode 100644 index 0000000..c430f58 Binary files /dev/null and b/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ diff --git a/android/app/src/main/res/drawable-xhdpi/notification_icon.png b/android/app/src/main/res/drawable-xhdpi/notification_icon.png new file mode 100644 index 0000000..7a95aea Binary files /dev/null and b/android/app/src/main/res/drawable-xhdpi/notification_icon.png differ diff --git a/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png new file mode 100644 index 0000000..f252efe Binary files /dev/null and b/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ diff --git a/android/app/src/main/res/drawable-xxhdpi/notification_icon.png b/android/app/src/main/res/drawable-xxhdpi/notification_icon.png new file mode 100644 index 0000000..528cbc3 Binary files /dev/null and b/android/app/src/main/res/drawable-xxhdpi/notification_icon.png differ diff --git a/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png new file mode 100644 index 0000000..db89cfe Binary files /dev/null and b/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/notification_icon.png b/android/app/src/main/res/drawable-xxxhdpi/notification_icon.png new file mode 100644 index 0000000..1e4244a Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/notification_icon.png differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png new file mode 100644 index 0000000..b7f09b3 Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ diff --git a/android/app/src/main/res/drawable/ic_launcher_background.xml b/android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..883b2a0 --- /dev/null +++ b/android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/drawable/rn_edit_text_material.xml b/android/app/src/main/res/drawable/rn_edit_text_material.xml new file mode 100644 index 0000000..5c25e72 --- /dev/null +++ b/android/app/src/main/res/drawable/rn_edit_text_material.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + diff --git a/android/app/src/main/res/mipmap-hdpi/drink_water.png b/android/app/src/main/res/mipmap-hdpi/drink_water.png new file mode 100644 index 0000000..9caff36 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/drink_water.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/drink_water_foreground.png b/android/app/src/main/res/mipmap-hdpi/drink_water_foreground.png new file mode 100644 index 0000000..9caff36 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/drink_water_foreground.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000..528cbc3 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..36c9523 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp differ diff --git a/android/app/src/main/res/mipmap-mdpi/drink_water.png b/android/app/src/main/res/mipmap-mdpi/drink_water.png new file mode 100644 index 0000000..b2339c8 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/drink_water.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/drink_water_foreground.png b/android/app/src/main/res/mipmap-mdpi/drink_water_foreground.png new file mode 100644 index 0000000..b2339c8 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/drink_water_foreground.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000..7a95aea Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..78f1979 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp differ diff --git a/android/app/src/main/res/mipmap-xhdpi/drink_water.png b/android/app/src/main/res/mipmap-xhdpi/drink_water.png new file mode 100644 index 0000000..3726d01 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/drink_water.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/drink_water_foreground.png b/android/app/src/main/res/mipmap-xhdpi/drink_water_foreground.png new file mode 100644 index 0000000..3726d01 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/drink_water_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000..1e4244a Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..891879a Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/drink_water.png b/android/app/src/main/res/mipmap-xxhdpi/drink_water.png new file mode 100644 index 0000000..1f42b85 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/drink_water.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/drink_water_foreground.png b/android/app/src/main/res/mipmap-xxhdpi/drink_water_foreground.png new file mode 100644 index 0000000..1f42b85 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/drink_water_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000..e867593 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..936e49c Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/drink_water.png b/android/app/src/main/res/mipmap-xxxhdpi/drink_water.png new file mode 100644 index 0000000..cc735eb Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/drink_water.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/drink_water_foreground.png b/android/app/src/main/res/mipmap-xxxhdpi/drink_water_foreground.png new file mode 100644 index 0000000..cc735eb Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/drink_water_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000..5acbaf5 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..600148a Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp differ diff --git a/android/app/src/main/res/values-night/colors.xml b/android/app/src/main/res/values-night/colors.xml new file mode 100644 index 0000000..3c05de5 --- /dev/null +++ b/android/app/src/main/res/values-night/colors.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..ebe53de --- /dev/null +++ b/android/app/src/main/res/values/colors.xml @@ -0,0 +1,7 @@ + + #ffffff + #ffffff + #023c69 + #ffffff + #ffffff + \ No newline at end of file diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..bcaf040 --- /dev/null +++ b/android/app/src/main/res/values/strings.xml @@ -0,0 +1,6 @@ + + Out Live + light + contain + false + \ No newline at end of file diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..45a97e6 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..0554dd1 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,24 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + repositories { + google() + mavenCentral() + } + dependencies { + classpath('com.android.tools.build:gradle') + classpath('com.facebook.react:react-native-gradle-plugin') + classpath('org.jetbrains.kotlin:kotlin-gradle-plugin') + } +} + +allprojects { + repositories { + google() + mavenCentral() + maven { url 'https://www.jitpack.io' } + } +} + +apply plugin: "expo-root-project" +apply plugin: "com.facebook.react.rootproject" diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..50e38f5 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,65 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m +org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true + +# Enable AAPT2 PNG crunching +android.enablePngCrunchInReleaseBuilds=true + +# Use this property to specify which architecture you want to build. +# You can also override it from the CLI using +# ./gradlew -PreactNativeArchitectures=x86_64 +reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 + +# Use this property to enable support to the new architecture. +# This will allow you to use TurboModules and the Fabric render in +# your application. You should enable this flag either if you want +# to write custom TurboModules/Fabric components OR use libraries that +# are providing them. +newArchEnabled=true + +# Use this property to enable or disable the Hermes JS engine. +# If set to false, you will be using JSC instead. +hermesEnabled=false + +# Use this property to enable edge-to-edge display support. +# This allows your app to draw behind system bars for an immersive UI. +# Note: Only works with ReactActivity and should not be used with custom Activity. +edgeToEdgeEnabled=true + +# Enable GIF support in React Native images (~200 B increase) +expo.gif.enabled=true +# Enable webp support in React Native images (~85 KB increase) +expo.webp.enabled=true +# Enable animated webp support (~3.4 MB increase) +# Disabled by default because iOS doesn't support animated webp +expo.webp.animated=false + +# Enable network inspector +EX_DEV_CLIENT_NETWORK_INSPECTOR=true + +# Use legacy packaging to compress native libraries in the resulting APK. +expo.useLegacyPackaging=false + +# Specifies whether the app is configured to use edge-to-edge via the app config or plugin +# WARNING: This property has been deprecated and will be removed in Expo SDK 55. Use `edgeToEdgeEnabled` or `react.edgeToEdgeEnabled` to determine whether the project is using edge-to-edge. +expo.edgeToEdgeEnabled=true diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..1b33c55 Binary files /dev/null and b/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..d4081da --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/android/gradlew b/android/gradlew new file mode 100755 index 0000000..7f94d3d --- /dev/null +++ b/android/gradlew @@ -0,0 +1,251 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH="\\\"\\\"" + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat new file mode 100644 index 0000000..5eed7ee --- /dev/null +++ b/android/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH= + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..c8288f2 --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,39 @@ +pluginManagement { + def reactNativeGradlePlugin = new File( + providers.exec { + workingDir(rootDir) + commandLine("node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })") + }.standardOutput.asText.get().trim() + ).getParentFile().absolutePath + includeBuild(reactNativeGradlePlugin) + + def expoPluginsPath = new File( + providers.exec { + workingDir(rootDir) + commandLine("node", "--print", "require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })") + }.standardOutput.asText.get().trim(), + "../android/expo-gradle-plugin" + ).absolutePath + includeBuild(expoPluginsPath) +} + +plugins { + id("com.facebook.react.settings") + id("expo-autolinking-settings") +} + +extensions.configure(com.facebook.react.ReactSettingsExtension) { ex -> + if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') { + ex.autolinkLibrariesFromCommand() + } else { + ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand) + } +} +expoAutolinking.useExpoModules() + +rootProject.name = 'Out Live' + +expoAutolinking.useExpoVersionCatalog() + +include ':app' +includeBuild(expoAutolinking.reactNativeGradlePlugin) diff --git a/app.json b/app.json index 6a85bc1..d68a0f4 100644 --- a/app.json +++ b/app.json @@ -6,10 +6,12 @@ "orientation": "portrait", "scheme": "digitalpilates", "userInterfaceStyle": "light", + "icon": "./assets/icon.icon/Assets/icon-1756312748268.jpg", "newArchEnabled": true, "jsEngine": "jsc", "ios": { "supportsTablet": false, + "deploymentTarget": "16.0", "bundleIdentifier": "com.anonymous.digitalpilates", "infoPlist": { "ITSAppUsesNonExemptEncryption": false, @@ -25,31 +27,23 @@ "remote-notification" ] }, - "icon": "./assets/icon.icon" + "appleTeamId": "756WVXJ6MT" }, "plugins": [ "expo-router", [ "expo-splash-screen", { - "image": "./assets/icon.icon", + "image": "./assets/icon.icon/Assets/icon-1756312748268.jpg", "imageWidth": 40, "resizeMode": "contain", "backgroundColor": "#ffffff" } ], - [ - "react-native-health", - { - "enableHealthAPI": true, - "healthSharePermission": "应用需要访问您的健康数据(步数、能量消耗、心率变异性等)以展示运动统计和压力分析。", - "healthUpdatePermission": "应用需要更新您的健康数据(体重信息)以记录您的健身进度。" - } - ], [ "expo-notifications", { - "icon": "./assets/icon.icon", + "icon": "./assets/icon.icon/Assets/icon-1756312748268.jpg", "color": "#ffffff" } ], @@ -70,6 +64,9 @@ ], "experiments": { "typedRoutes": true + }, + "android": { + "package": "com.anonymous.digitalpilates" } } } \ No newline at end of file diff --git a/components/HealthKitTest.tsx b/components/HealthKitTest.tsx index 93f032d..f29efa8 100644 --- a/components/HealthKitTest.tsx +++ b/components/HealthKitTest.tsx @@ -77,6 +77,44 @@ const HealthKitTest: React.FC = () => { } }; + const handleCheckAuthorizationStatus = async () => { + if (!state.isAvailable) { + Alert.alert('错误', 'HealthKit不可用'); + return; + } + + setState(prev => ({ ...prev, loading: true, error: null })); + + try { + const result = await HealthKitManager.getAuthorizationStatus(); + + if (result.success) { + const permissions = result.permissions; + const sleepPermission = permissions['HKCategoryTypeIdentifierSleepAnalysis']; + const authorized = sleepPermission === 'authorized'; + + setState(prev => ({ ...prev, isAuthorized: authorized, loading: false })); + + const permissionDetails = Object.entries(permissions) + .map(([key, value]) => `${key}: ${value}`) + .join('\n'); + + Alert.alert( + '权限状态', + `当前权限状态:\n${permissionDetails}`, + [{ text: '确定' }] + ); + } else { + setState(prev => ({ ...prev, loading: false })); + Alert.alert('查询失败', '无法获取权限状态'); + } + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + setState(prev => ({ ...prev, loading: false, error: errorMessage })); + Alert.alert('错误', `查询权限状态失败: ${errorMessage}`); + } + }; + const handleGetSleepData = async () => { if (!state.isAuthorized) { Alert.alert('错误', '请先获取HealthKit授权'); @@ -210,6 +248,16 @@ const HealthKitTest: React.FC = () => { + + + {state.loading ? '查询中...' : '检查权限状态'} + + + { try { await dispatch(createWaterRecordAction(dto)).unwrap(); - + // 同步到 HealthKit try { const healthKitSuccess = await saveWaterIntakeToHealthKit(amount, recordedAt); @@ -100,27 +100,27 @@ export const useWaterData = () => { console.error('HealthKit 同步错误:', healthError); // HealthKit 同步失败不影响主要功能 } - + // 重新获取今日统计并等待完成 const updatedStats = await dispatch(fetchTodayWaterStats()).unwrap(); - + // 同步数据到Widget try { const quickAddAmount = await getQuickWaterAmount(); - + await syncWaterDataToWidget({ currentIntake: updatedStats.totalAmount, dailyGoal: updatedStats.dailyGoal, quickAddAmount, }); - + // 刷新Widget await refreshWidget(); } catch (widgetError) { console.error('Widget 同步错误:', widgetError); // Widget 同步失败不影响主要功能 } - + return true; } catch (error: any) { console.error('添加喝水记录失败:', error); @@ -160,17 +160,17 @@ export const useWaterData = () => { await dispatch(updateWaterRecordAction(dto)).unwrap(); // 重新获取今日统计并等待完成 const updatedStats = await dispatch(fetchTodayWaterStats()).unwrap(); - + // 同步数据到Widget try { const quickAddAmount = await getQuickWaterAmount(); - + await syncWaterDataToWidget({ currentIntake: updatedStats.totalAmount, dailyGoal: updatedStats.dailyGoal, quickAddAmount, }); - + // 刷新Widget await refreshWidget(); } catch (widgetError) { @@ -197,9 +197,9 @@ export const useWaterData = () => { try { // 在删除前,尝试获取记录信息用于 HealthKit 同步 const recordToDelete = waterRecords.find(record => record.id === id); - + await dispatch(deleteWaterRecordAction(id)).unwrap(); - + // 同步删除到 HealthKit if (recordToDelete) { try { @@ -215,20 +215,20 @@ export const useWaterData = () => { // HealthKit 同步失败不影响主要功能 } } - + // 重新获取今日统计并等待完成 const updatedStats = await dispatch(fetchTodayWaterStats()).unwrap(); - + // 同步数据到Widget try { const quickAddAmount = await getQuickWaterAmount(); - + await syncWaterDataToWidget({ currentIntake: updatedStats.totalAmount, dailyGoal: updatedStats.dailyGoal, quickAddAmount, }); - + // 刷新Widget await refreshWidget(); } catch (widgetError) { @@ -254,10 +254,10 @@ export const useWaterData = () => { const updateWaterGoal = useCallback(async (goal: number) => { try { await dispatch(updateWaterGoalAction(goal)).unwrap(); - + // 重新获取今日统计以确保数据一致性 const updatedStats = await dispatch(fetchTodayWaterStats()).unwrap(); - + // 同步目标到Widget try { const quickAddAmount = await getQuickWaterAmount(); @@ -270,7 +270,7 @@ export const useWaterData = () => { } catch (widgetError) { console.error('Widget 目标同步错误:', widgetError); } - + return true; } catch (error: any) { console.error('更新喝水目标失败:', error); @@ -566,7 +566,7 @@ export const useWaterDataByDate = (targetDate?: string) => { try { // 在删除前,尝试获取记录信息用于 HealthKit 同步 const recordToDelete = waterRecords.find(record => record.id === id); - + await dispatch(deleteWaterRecordAction(id)).unwrap(); // 同步删除到 HealthKit diff --git a/ios/digitalpilates.xcodeproj/project.pbxproj b/ios/OutLive.xcodeproj/project.pbxproj similarity index 54% rename from ios/digitalpilates.xcodeproj/project.pbxproj rename to ios/OutLive.xcodeproj/project.pbxproj index 2efd0dd..0abcd40 100644 --- a/ios/digitalpilates.xcodeproj/project.pbxproj +++ b/ios/OutLive.xcodeproj/project.pbxproj @@ -3,137 +3,81 @@ archiveVersion = 1; classes = { }; - objectVersion = 70; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; - 2C9C524987451393B76B9C7E /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 7EC44F9488C227087AA8DF97 /* PrivacyInfo.xcprivacy */; }; + 32476CAEFFCE691C1634B0A4 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EA3641BAC6078512F41509D /* ExpoModulesProvider.swift */; }; 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; }; - 6B6021A2D1EB466803BE19D7 /* libPods-digitalpilates.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F1A078ADDB1BCB06E0DBEFDA /* libPods-digitalpilates.a */; }; - 7996A1192E6FB82300371142 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7996A1182E6FB82300371142 /* WidgetKit.framework */; }; - 7996A11B2E6FB82300371142 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7996A11A2E6FB82300371142 /* SwiftUI.framework */; }; - 7996A12C2E6FB82300371142 /* WaterWidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 7996A1172E6FB82300371142 /* WaterWidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 79B2CB032E7ABBC400B51753 /* HealthKitManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79B2CB012E7ABBC400B51753 /* HealthKitManager.swift */; }; - 79B2CB042E7ABBC400B51753 /* HealthKitManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 79B2CB022E7ABBC400B51753 /* HealthKitManager.m */; }; + 79B2CB702E7B954600B51753 /* OutLive-Bridging-Header.h in Sources */ = {isa = PBXBuildFile; fileRef = F11748442D0722820044C1D9 /* OutLive-Bridging-Header.h */; }; + 79B2CB732E7B954F00B51753 /* HealthKitManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 79B2CB712E7B954F00B51753 /* HealthKitManager.m */; }; + 79B2CB742E7B954F00B51753 /* HealthKitManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79B2CB722E7B954F00B51753 /* HealthKitManager.swift */; }; + 91B7BA17B50D328546B5B4B8 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = B7F23062EE59F61E6260DBA8 /* PrivacyInfo.xcprivacy */; }; BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; }; - DC3BFC72D3A68C7493D5B44A /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83D1B5F0EC906D7A2F599549 /* ExpoModulesProvider.swift */; }; + EB8685B6DDDFD4D181274014 /* libPods-OutLive.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F55788C6990114D378E7CC53 /* libPods-OutLive.a */; }; F11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - 7996A12A2E6FB82300371142 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7996A1162E6FB82300371142; - remoteInfo = WaterWidgetExtension; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 7996A12D2E6FB82300371142 /* Embed Foundation Extensions */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 13; - files = ( - 7996A12C2E6FB82300371142 /* WaterWidgetExtension.appex in Embed Foundation Extensions */, - ); - name = "Embed Foundation Extensions"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ - 13B07F961A680F5B00A75B9A /* digitalpilates.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = digitalpilates.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = digitalpilates/Images.xcassets; sourceTree = ""; }; - 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = digitalpilates/Info.plist; sourceTree = ""; }; - 4D6B8E20DD8E5677F8B2EAA1 /* Pods-digitalpilates.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-digitalpilates.debug.xcconfig"; path = "Target Support Files/Pods-digitalpilates/Pods-digitalpilates.debug.xcconfig"; sourceTree = ""; }; - 7996A1172E6FB82300371142 /* WaterWidgetExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = WaterWidgetExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; - 7996A1182E6FB82300371142 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; - 7996A11A2E6FB82300371142 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; - 7996A1322E6FB84A00371142 /* WaterWidgetExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = WaterWidgetExtension.entitlements; sourceTree = ""; }; - 79B2CB012E7ABBC400B51753 /* HealthKitManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HealthKitManager.swift; path = digitalpilates/HealthKitManager.swift; sourceTree = ""; }; - 79B2CB022E7ABBC400B51753 /* HealthKitManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = HealthKitManager.m; path = digitalpilates/HealthKitManager.m; sourceTree = ""; }; - 7EC44F9488C227087AA8DF97 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = digitalpilates/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 83D1B5F0EC906D7A2F599549 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-digitalpilates/ExpoModulesProvider.swift"; sourceTree = ""; }; - AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = digitalpilates/SplashScreen.storyboard; sourceTree = ""; }; + 13B07F961A680F5B00A75B9A /* OutLive.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OutLive.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = OutLive/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = OutLive/Info.plist; sourceTree = ""; }; + 1EA3641BAC6078512F41509D /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-OutLive/ExpoModulesProvider.swift"; sourceTree = ""; }; + 79B2CB712E7B954F00B51753 /* HealthKitManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = HealthKitManager.m; path = OutLive/HealthKitManager.m; sourceTree = ""; }; + 79B2CB722E7B954F00B51753 /* HealthKitManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HealthKitManager.swift; path = OutLive/HealthKitManager.swift; sourceTree = ""; }; + 8040E4CFF70F1C94062730AC /* Pods-OutLive.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OutLive.debug.xcconfig"; path = "Target Support Files/Pods-OutLive/Pods-OutLive.debug.xcconfig"; sourceTree = ""; }; + AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = OutLive/SplashScreen.storyboard; sourceTree = ""; }; + B7F23062EE59F61E6260DBA8 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = OutLive/PrivacyInfo.xcprivacy; sourceTree = ""; }; BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; }; - EA6A757B2DE1747F7B3664B4 /* Pods-digitalpilates.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-digitalpilates.release.xcconfig"; path = "Target Support Files/Pods-digitalpilates/Pods-digitalpilates.release.xcconfig"; sourceTree = ""; }; + EC19B3AF8877D65827EF5567 /* Pods-OutLive.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OutLive.release.xcconfig"; path = "Target Support Files/Pods-OutLive/Pods-OutLive.release.xcconfig"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; - F11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = digitalpilates/AppDelegate.swift; sourceTree = ""; }; - F11748442D0722820044C1D9 /* digitalpilates-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "digitalpilates-Bridging-Header.h"; path = "digitalpilates/digitalpilates-Bridging-Header.h"; sourceTree = ""; }; - F1A078ADDB1BCB06E0DBEFDA /* libPods-digitalpilates.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-digitalpilates.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + F11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = OutLive/AppDelegate.swift; sourceTree = ""; }; + F11748442D0722820044C1D9 /* OutLive-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "OutLive-Bridging-Header.h"; path = "OutLive/OutLive-Bridging-Header.h"; sourceTree = ""; }; + F55788C6990114D378E7CC53 /* libPods-OutLive.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-OutLive.a"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ -/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ - 7996A1302E6FB82300371142 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { - isa = PBXFileSystemSynchronizedBuildFileExceptionSet; - membershipExceptions = ( - Info.plist, - ); - target = 7996A1162E6FB82300371142 /* WaterWidgetExtension */; - }; -/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 7996A11C2E6FB82300371142 /* WaterWidget */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (7996A1302E6FB82300371142 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = WaterWidget; sourceTree = ""; }; -/* End PBXFileSystemSynchronizedRootGroup section */ - /* Begin PBXFrameworksBuildPhase section */ 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6B6021A2D1EB466803BE19D7 /* libPods-digitalpilates.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7996A1142E6FB82300371142 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7996A11B2E6FB82300371142 /* SwiftUI.framework in Frameworks */, - 7996A1192E6FB82300371142 /* WidgetKit.framework in Frameworks */, + EB8685B6DDDFD4D181274014 /* libPods-OutLive.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 13B07FAE1A68108700A75B9A /* digitalpilates */ = { + 13B07FAE1A68108700A75B9A /* OutLive */ = { isa = PBXGroup; children = ( F11748412D0307B40044C1D9 /* AppDelegate.swift */, - F11748442D0722820044C1D9 /* digitalpilates-Bridging-Header.h */, + F11748442D0722820044C1D9 /* OutLive-Bridging-Header.h */, BB2F792B24A3F905000567C9 /* Supporting */, 13B07FB51A68108700A75B9A /* Images.xcassets */, 13B07FB61A68108700A75B9A /* Info.plist */, AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */, - 7EC44F9488C227087AA8DF97 /* PrivacyInfo.xcprivacy */, + B7F23062EE59F61E6260DBA8 /* PrivacyInfo.xcprivacy */, ); - name = digitalpilates; + name = OutLive; sourceTree = ""; }; 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { isa = PBXGroup; children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - F1A078ADDB1BCB06E0DBEFDA /* libPods-digitalpilates.a */, - 7996A1182E6FB82300371142 /* WidgetKit.framework */, - 7996A11A2E6FB82300371142 /* SwiftUI.framework */, + F55788C6990114D378E7CC53 /* libPods-OutLive.a */, ); name = Frameworks; sourceTree = ""; }; - 3EE8D66219D64F4A63E8298D /* Pods */ = { + 80E2A1E8ECA8777F7264D855 /* ExpoModulesProviders */ = { isa = PBXGroup; children = ( - 4D6B8E20DD8E5677F8B2EAA1 /* Pods-digitalpilates.debug.xcconfig */, - EA6A757B2DE1747F7B3664B4 /* Pods-digitalpilates.release.xcconfig */, + BF89779EFCFC7E852B943187 /* OutLive */, ); - path = Pods; + name = ExpoModulesProviders; sourceTree = ""; }; 832341AE1AAA6A7D00B99B32 /* Libraries */ = { @@ -146,16 +90,14 @@ 83CBB9F61A601CBA00E9B192 = { isa = PBXGroup; children = ( - 79B2CB022E7ABBC400B51753 /* HealthKitManager.m */, - 79B2CB012E7ABBC400B51753 /* HealthKitManager.swift */, - 7996A1322E6FB84A00371142 /* WaterWidgetExtension.entitlements */, - 13B07FAE1A68108700A75B9A /* digitalpilates */, + 79B2CB712E7B954F00B51753 /* HealthKitManager.m */, + 79B2CB722E7B954F00B51753 /* HealthKitManager.swift */, + 13B07FAE1A68108700A75B9A /* OutLive */, 832341AE1AAA6A7D00B99B32 /* Libraries */, - 7996A11C2E6FB82300371142 /* WaterWidget */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, - 3EE8D66219D64F4A63E8298D /* Pods */, - F899CC3CCA86CFEC0C4F53F7 /* ExpoModulesProviders */, + CCDACA5E9524EEDD222FCFC4 /* Pods */, + 80E2A1E8ECA8777F7264D855 /* ExpoModulesProviders */, ); indentWidth = 2; sourceTree = ""; @@ -165,8 +107,7 @@ 83CBBA001A601CBA00E9B192 /* Products */ = { isa = PBXGroup; children = ( - 13B07F961A680F5B00A75B9A /* digitalpilates.app */, - 7996A1172E6FB82300371142 /* WaterWidgetExtension.appex */, + 13B07F961A680F5B00A75B9A /* OutLive.app */, ); name = Products; sourceTree = ""; @@ -177,104 +118,79 @@ BB2F792C24A3F905000567C9 /* Expo.plist */, ); name = Supporting; - path = digitalpilates/Supporting; + path = OutLive/Supporting; sourceTree = ""; }; - DFAD2B7142CEC38E9ED66053 /* digitalpilates */ = { + BF89779EFCFC7E852B943187 /* OutLive */ = { isa = PBXGroup; children = ( - 83D1B5F0EC906D7A2F599549 /* ExpoModulesProvider.swift */, + 1EA3641BAC6078512F41509D /* ExpoModulesProvider.swift */, ); - name = digitalpilates; + name = OutLive; sourceTree = ""; }; - F899CC3CCA86CFEC0C4F53F7 /* ExpoModulesProviders */ = { + CCDACA5E9524EEDD222FCFC4 /* Pods */ = { isa = PBXGroup; children = ( - DFAD2B7142CEC38E9ED66053 /* digitalpilates */, + 8040E4CFF70F1C94062730AC /* Pods-OutLive.debug.xcconfig */, + EC19B3AF8877D65827EF5567 /* Pods-OutLive.release.xcconfig */, ); - name = ExpoModulesProviders; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 13B07F861A680F5B00A75B9A /* digitalpilates */ = { + 13B07F861A680F5B00A75B9A /* OutLive */ = { isa = PBXNativeTarget; - buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "digitalpilates" */; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "OutLive" */; buildPhases = ( 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */, - 60F566376E07CDAA8138E40B /* [Expo] Configure project */, + FED23F24D8115FB0D63DF986 /* [Expo] Configure project */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */, - 7996A12D2E6FB82300371142 /* Embed Foundation Extensions */, - CD8A4C026AF644A41E91C9E8 /* [CP] Embed Pods Frameworks */, + 018494B0E6694F9F0626A4B2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( - 7996A12B2E6FB82300371142 /* PBXTargetDependency */, ); - name = digitalpilates; - productName = digitalpilates; - productReference = 13B07F961A680F5B00A75B9A /* digitalpilates.app */; + name = OutLive; + productName = OutLive; + productReference = 13B07F961A680F5B00A75B9A /* OutLive.app */; productType = "com.apple.product-type.application"; }; - 7996A1162E6FB82300371142 /* WaterWidgetExtension */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7996A1312E6FB82300371142 /* Build configuration list for PBXNativeTarget "WaterWidgetExtension" */; - buildPhases = ( - 7996A1132E6FB82300371142 /* Sources */, - 7996A1142E6FB82300371142 /* Frameworks */, - 7996A1152E6FB82300371142 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 7996A11C2E6FB82300371142 /* WaterWidget */, - ); - name = WaterWidgetExtension; - productName = WaterWidgetExtension; - productReference = 7996A1172E6FB82300371142 /* WaterWidgetExtension.appex */; - productType = "com.apple.product-type.app-extension"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 83CBB9F71A601CBA00E9B192 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1640; LastUpgradeCheck = 1130; TargetAttributes = { 13B07F861A680F5B00A75B9A = { LastSwiftMigration = 1250; }; - 7996A1162E6FB82300371142 = { - CreatedOnToolsVersion = 16.4; - }; }; }; - buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "digitalpilates" */; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "OutLive" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = "zh-Hans"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( + en, Base, - "zh-Hans", ); mainGroup = 83CBB9F61A601CBA00E9B192; productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 13B07F861A680F5B00A75B9A /* digitalpilates */, - 7996A1162E6FB82300371142 /* WaterWidgetExtension */, + 13B07F861A680F5B00A75B9A /* OutLive */, ); }; /* End PBXProject section */ @@ -287,14 +203,7 @@ BB2F792D24A3F905000567C9 /* Expo.plist in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */, - 2C9C524987451393B76B9C7E /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7996A1152E6FB82300371142 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + 91B7BA17B50D328546B5B4B8 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -308,6 +217,8 @@ files = ( ); inputPaths = ( + "$(SRCROOT)/.xcode.env", + "$(SRCROOT)/.xcode.env.local", ); name = "Bundle React Native code and images"; outputPaths = ( @@ -316,6 +227,28 @@ shellPath = /bin/sh; shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios absolute | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n# Source .xcode.env.updates if it exists to allow\n# SKIP_BUNDLING to be unset if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.updates\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.updates\"\nfi\n# Source local changes to allow overrides\n# if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n"; }; + 018494B0E6694F9F0626A4B2 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-OutLive/Pods-OutLive-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/React-Core-prebuilt/React.framework/React", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ReactNativeDependencies/ReactNativeDependencies.framework/ReactNativeDependencies", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/React.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReactNativeDependencies.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-OutLive/Pods-OutLive-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -331,44 +264,20 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-digitalpilates-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-OutLive-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 60F566376E07CDAA8138E40B /* [Expo] Configure project */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "$(SRCROOT)/.xcode.env", - "$(SRCROOT)/.xcode.env.local", - "$(SRCROOT)/digitalpilates/digitalpilates.entitlements", - "$(SRCROOT)/Pods/Target Support Files/Pods-digitalpilates/expo-configure-project.sh", - ); - name = "[Expo] Configure project"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(SRCROOT)/Pods/Target Support Files/Pods-digitalpilates/ExpoModulesProvider.swift", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-digitalpilates/expo-configure-project.sh\"\n"; - }; 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-digitalpilates/Pods-digitalpilates-resources.sh", + "${PODS_ROOT}/Target Support Files/Pods-OutLive/Pods-OutLive-resources.sh", "${PODS_CONFIGURATION_BUILD_DIR}/EXApplication/ExpoApplication_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", @@ -377,7 +286,6 @@ "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ExpoSystemUI/ExpoSystemUI_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/PurchasesHybridCommon/PurchasesHybridCommon.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNCAsyncStorage/RNCAsyncStorage_resources.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNDeviceInfo/RNDeviceInfoPrivacyInfo.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle", @@ -386,8 +294,6 @@ "${PODS_CONFIGURATION_BUILD_DIR}/RevenueCat/RevenueCat.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/Sentry/Sentry.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/glog/glog_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/LottiePrivacyInfo.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/lottie-react-native/Lottie_React_Native_Privacy.bundle", ); @@ -401,7 +307,6 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoSystemUI_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/PurchasesHybridCommon.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCAsyncStorage_resources.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNDeviceInfoPrivacyInfo.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle", @@ -410,33 +315,37 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RevenueCat.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImage.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Sentry.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/glog_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/LottiePrivacyInfo.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Lottie_React_Native_Privacy.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-digitalpilates/Pods-digitalpilates-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-OutLive/Pods-OutLive-resources.sh\"\n"; showEnvVarsInLog = 0; }; - CD8A4C026AF644A41E91C9E8 /* [CP] Embed Pods Frameworks */ = { + FED23F24D8115FB0D63DF986 /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-digitalpilates/Pods-digitalpilates-frameworks.sh", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + inputFileListPaths = ( + ); + inputPaths = ( + "$(SRCROOT)/.xcode.env", + "$(SRCROOT)/.xcode.env.local", + "$(SRCROOT)/OutLive/OutLive.entitlements", + "$(SRCROOT)/Pods/Target Support Files/Pods-OutLive/expo-configure-project.sh", + ); + name = "[Expo] Configure project"; + outputFileListPaths = ( ); - name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + "$(SRCROOT)/Pods/Target Support Files/Pods-OutLive/ExpoModulesProvider.swift", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-digitalpilates/Pods-digitalpilates-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-OutLive/expo-configure-project.sh\"\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -445,54 +354,38 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 79B2CB032E7ABBC400B51753 /* HealthKitManager.swift in Sources */, - 79B2CB042E7ABBC400B51753 /* HealthKitManager.m in Sources */, + 79B2CB732E7B954F00B51753 /* HealthKitManager.m in Sources */, + 79B2CB742E7B954F00B51753 /* HealthKitManager.swift in Sources */, + 79B2CB702E7B954600B51753 /* OutLive-Bridging-Header.h in Sources */, F11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */, - DC3BFC72D3A68C7493D5B44A /* ExpoModulesProvider.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7996A1132E6FB82300371142 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + 32476CAEFFCE691C1634B0A4 /* ExpoModulesProvider.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 7996A12B2E6FB82300371142 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 7996A1162E6FB82300371142 /* WaterWidgetExtension */; - targetProxy = 7996A12A2E6FB82300371142 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin XCBuildConfiguration section */ 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4D6B8E20DD8E5677F8B2EAA1 /* Pods-digitalpilates.debug.xcconfig */; + baseConfigurationReference = 8040E4CFF70F1C94062730AC /* Pods-OutLive.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = digitalpilates/digitalpilates.entitlements; + CODE_SIGN_ENTITLEMENTS = OutLive/OutLive.entitlements; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 756WVXJ6MT; ENABLE_BITCODE = NO; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = x86_64; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "FB_SONARKIT_ENABLED=1", ); - INFOPLIST_FILE = digitalpilates/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = "Out Live"; + INFOPLIST_FILE = OutLive/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.7; + MARKETING_VERSION = 1.0; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -500,12 +393,8 @@ ); OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.anonymous.digitalpilates; - PRODUCT_NAME = digitalpilates; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; - SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_OBJC_BRIDGING_HEADER = "digitalpilates/digitalpilates-Bridging-Header.h"; + PRODUCT_NAME = OutLive; + SWIFT_OBJC_BRIDGING_HEADER = "OutLive/OutLive-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; @@ -515,22 +404,20 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EA6A757B2DE1747F7B3664B4 /* Pods-digitalpilates.release.xcconfig */; + baseConfigurationReference = EC19B3AF8877D65827EF5567 /* Pods-OutLive.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = digitalpilates/digitalpilates.entitlements; + CODE_SIGN_ENTITLEMENTS = OutLive/OutLive.entitlements; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 756WVXJ6MT; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = x86_64; - INFOPLIST_FILE = digitalpilates/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = "Out Live"; + INFOPLIST_FILE = OutLive/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.7; + MARKETING_VERSION = 1.0; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -538,109 +425,14 @@ ); OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = com.anonymous.digitalpilates; - PRODUCT_NAME = digitalpilates; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; - SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_OBJC_BRIDGING_HEADER = "digitalpilates/digitalpilates-Bridging-Header.h"; + PRODUCT_NAME = OutLive; + SWIFT_OBJC_BRIDGING_HEADER = "OutLive/OutLive-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; VERSIONING_SYSTEM = "apple-generic"; }; name = Release; }; - 7996A12E2E6FB82300371142 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_ENTITLEMENTS = WaterWidgetExtension.entitlements; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 756WVXJ6MT; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = WaterWidget/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = WaterWidget; - INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MARKETING_VERSION = 1.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = com.anonymous.digitalpilates.WaterWidget; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 7996A12F2E6FB82300371142 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_ENTITLEMENTS = WaterWidgetExtension.entitlements; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 756WVXJ6MT; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = WaterWidget/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = WaterWidget; - INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MARKETING_VERSION = 1.0; - MTL_FAST_MATH = YES; - OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; - PRODUCT_BUNDLE_IDENTIFIER = com.anonymous.digitalpilates.WaterWidget; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; 83CBBA201A601CBA00E9B192 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -696,10 +488,10 @@ LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = "$(inherited) "; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + SWIFT_ENABLE_EXPLICIT_MODULES = NO; USE_HERMES = true; }; name = Debug; @@ -751,9 +543,9 @@ ); LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = "$(inherited) "; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; + SWIFT_ENABLE_EXPLICIT_MODULES = NO; USE_HERMES = true; VALIDATE_PRODUCT = YES; }; @@ -762,7 +554,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "digitalpilates" */ = { + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "OutLive" */ = { isa = XCConfigurationList; buildConfigurations = ( 13B07F941A680F5B00A75B9A /* Debug */, @@ -771,16 +563,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7996A1312E6FB82300371142 /* Build configuration list for PBXNativeTarget "WaterWidgetExtension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7996A12E2E6FB82300371142 /* Debug */, - 7996A12F2E6FB82300371142 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "digitalpilates" */ = { + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "OutLive" */ = { isa = XCConfigurationList; buildConfigurations = ( 83CBBA201A601CBA00E9B192 /* Debug */, diff --git a/ios/digitalpilates.xcodeproj/xcshareddata/xcschemes/digitalpilates.xcscheme b/ios/OutLive.xcodeproj/xcshareddata/xcschemes/OutLive.xcscheme similarity index 79% rename from ios/digitalpilates.xcodeproj/xcshareddata/xcschemes/digitalpilates.xcscheme rename to ios/OutLive.xcodeproj/xcshareddata/xcschemes/OutLive.xcscheme index 4692f61..7870efd 100644 --- a/ios/digitalpilates.xcodeproj/xcshareddata/xcschemes/digitalpilates.xcscheme +++ b/ios/OutLive.xcodeproj/xcshareddata/xcschemes/OutLive.xcscheme @@ -15,9 +15,9 @@ + BuildableName = "OutLive.app" + BlueprintName = "OutLive" + ReferencedContainer = "container:OutLive.xcodeproj"> @@ -33,9 +33,9 @@ + BuildableName = "OutLiveTests.xctest" + BlueprintName = "OutLiveTests" + ReferencedContainer = "container:OutLive.xcodeproj"> @@ -55,9 +55,9 @@ + BuildableName = "OutLive.app" + BlueprintName = "OutLive" + ReferencedContainer = "container:OutLive.xcodeproj"> @@ -72,9 +72,9 @@ + BuildableName = "OutLive.app" + BlueprintName = "OutLive" + ReferencedContainer = "container:OutLive.xcodeproj"> diff --git a/ios/digitalpilates.xcworkspace/contents.xcworkspacedata b/ios/OutLive.xcworkspace/contents.xcworkspacedata similarity index 78% rename from ios/digitalpilates.xcworkspace/contents.xcworkspacedata rename to ios/OutLive.xcworkspace/contents.xcworkspacedata index 464ce72..970c3ce 100644 --- a/ios/digitalpilates.xcworkspace/contents.xcworkspacedata +++ b/ios/OutLive.xcworkspace/contents.xcworkspacedata @@ -2,7 +2,7 @@ + location = "group:OutLive.xcodeproj"> diff --git a/ios/digitalpilates/AppDelegate.swift b/ios/OutLive/AppDelegate.swift similarity index 100% rename from ios/digitalpilates/AppDelegate.swift rename to ios/OutLive/AppDelegate.swift diff --git a/ios/digitalpilates/HealthKitManager.m b/ios/OutLive/HealthKitManager.m similarity index 74% rename from ios/digitalpilates/HealthKitManager.m rename to ios/OutLive/HealthKitManager.m index af0e243..7a9a0fd 100644 --- a/ios/digitalpilates/HealthKitManager.m +++ b/ios/OutLive/HealthKitManager.m @@ -1,22 +1,16 @@ -// -// HealthKitManager.m -// digitalpilates -// -// React Native bridge for HealthKitManager -// - #import @interface RCT_EXTERN_MODULE(HealthKitManager, NSObject) -// Authorization method RCT_EXTERN_METHOD(requestAuthorization:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter) -// Sleep data method RCT_EXTERN_METHOD(getSleepData:(NSDictionary *)options resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter) +RCT_EXTERN_METHOD(getAuthorizationStatus:(RCTPromiseResolveBlock)resolver + rejecter:(RCTPromiseRejectBlock)rejecter) + @end \ No newline at end of file diff --git a/ios/digitalpilates/HealthKitManager.swift b/ios/OutLive/HealthKitManager.swift similarity index 76% rename from ios/digitalpilates/HealthKitManager.swift rename to ios/OutLive/HealthKitManager.swift index 00091e5..bb6b8c7 100644 --- a/ios/digitalpilates/HealthKitManager.swift +++ b/ios/OutLive/HealthKitManager.swift @@ -59,30 +59,74 @@ class HealthKitManager: NSObject, RCTBridgeModule { rejecter("AUTHORIZATION_ERROR", "Failed to authorize HealthKit: \(error.localizedDescription)", error) return } - + if success { - // Check individual permissions - var permissions: [String: Any] = [:] - - for type in readTypes { - let status = self?.healthStore.authorizationStatus(for: type) - let statusString = self?.authorizationStatusToString(status) - permissions[type.identifier] = statusString + // Add a small delay to ensure HealthKit has updated permission status + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + // Check individual permissions + var permissions: [String: Any] = [:] + + for type in readTypes { + let status = self?.healthStore.authorizationStatus(for: type) + let statusString = self?.authorizationStatusToString(status) + permissions[type.identifier] = statusString + } + + let result: [String: Any] = [ + "success": true, + "permissions": permissions + ] + + resolver(result) } - - let result: [String: Any] = [ - "success": true, - "permissions": permissions - ] - - resolver(result) } else { rejecter("AUTHORIZATION_DENIED", "User denied HealthKit authorization", nil) } } } } - + + // MARK: - Permission Status + + @objc + func getAuthorizationStatus( + _ resolver: @escaping RCTPromiseResolveBlock, + rejecter: @escaping RCTPromiseRejectBlock + ) { + + // Check if HealthKit is available on the device + guard HKHealthStore.isHealthDataAvailable() else { + rejecter("HEALTHKIT_NOT_AVAILABLE", "HealthKit is not available on this device", nil) + return + } + + // Define the data types we want to check + let readTypes: Set = [ + HKObjectType.categoryType(forIdentifier: .sleepAnalysis)!, + HKObjectType.quantityType(forIdentifier: .stepCount)!, + HKObjectType.quantityType(forIdentifier: .heartRate)!, + HKObjectType.quantityType(forIdentifier: .restingHeartRate)!, + HKObjectType.quantityType(forIdentifier: .heartRateVariabilitySDNN)!, + HKObjectType.quantityType(forIdentifier: .activeEnergyBurned)! + ] + + // Check individual permissions + var permissions: [String: Any] = [:] + + for type in readTypes { + let status = healthStore.authorizationStatus(for: type) + let statusString = authorizationStatusToString(status) + permissions[type.identifier] = statusString + } + + let result: [String: Any] = [ + "success": true, + "permissions": permissions + ] + + resolver(result) + } + // MARK: - Sleep Data @objc @@ -213,4 +257,4 @@ class HealthKitManager: NSObject, RCTBridgeModule { let formatter = ISO8601DateFormatter() return formatter.string(from: date) } -} \ No newline at end of file +} diff --git a/ios/OutLive/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png b/ios/OutLive/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png new file mode 100644 index 0000000..191addb Binary files /dev/null and b/ios/OutLive/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png differ diff --git a/ios/OutLive/Images.xcassets/AppIcon.appiconset/Contents.json b/ios/OutLive/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..90d8d4c --- /dev/null +++ b/ios/OutLive/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,14 @@ +{ + "images": [ + { + "filename": "App-Icon-1024x1024@1x.png", + "idiom": "universal", + "platform": "ios", + "size": "1024x1024" + } + ], + "info": { + "version": 1, + "author": "expo" + } +} \ No newline at end of file diff --git a/ios/OutLive/Images.xcassets/Contents.json b/ios/OutLive/Images.xcassets/Contents.json new file mode 100644 index 0000000..ed285c2 --- /dev/null +++ b/ios/OutLive/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "expo" + } +} diff --git a/ios/digitalpilates/Images.xcassets/SplashScreenBackground.colorset/Contents.json b/ios/OutLive/Images.xcassets/SplashScreenBackground.colorset/Contents.json similarity index 100% rename from ios/digitalpilates/Images.xcassets/SplashScreenBackground.colorset/Contents.json rename to ios/OutLive/Images.xcassets/SplashScreenBackground.colorset/Contents.json diff --git a/ios/OutLive/Images.xcassets/SplashScreenLogo.imageset/Contents.json b/ios/OutLive/Images.xcassets/SplashScreenLogo.imageset/Contents.json new file mode 100644 index 0000000..f65c008 --- /dev/null +++ b/ios/OutLive/Images.xcassets/SplashScreenLogo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images": [ + { + "idiom": "universal", + "filename": "image.png", + "scale": "1x" + }, + { + "idiom": "universal", + "filename": "image@2x.png", + "scale": "2x" + }, + { + "idiom": "universal", + "filename": "image@3x.png", + "scale": "3x" + } + ], + "info": { + "version": 1, + "author": "expo" + } +} \ No newline at end of file diff --git a/ios/OutLive/Images.xcassets/SplashScreenLogo.imageset/image.png b/ios/OutLive/Images.xcassets/SplashScreenLogo.imageset/image.png new file mode 100644 index 0000000..ece18d9 Binary files /dev/null and b/ios/OutLive/Images.xcassets/SplashScreenLogo.imageset/image.png differ diff --git a/ios/OutLive/Images.xcassets/SplashScreenLogo.imageset/image@2x.png b/ios/OutLive/Images.xcassets/SplashScreenLogo.imageset/image@2x.png new file mode 100644 index 0000000..493c1e4 Binary files /dev/null and b/ios/OutLive/Images.xcassets/SplashScreenLogo.imageset/image@2x.png differ diff --git a/ios/OutLive/Images.xcassets/SplashScreenLogo.imageset/image@3x.png b/ios/OutLive/Images.xcassets/SplashScreenLogo.imageset/image@3x.png new file mode 100644 index 0000000..6f4f92e Binary files /dev/null and b/ios/OutLive/Images.xcassets/SplashScreenLogo.imageset/image@3x.png differ diff --git a/ios/OutLive/Images.xcassets/drink_water.imageset/1x.png b/ios/OutLive/Images.xcassets/drink_water.imageset/1x.png new file mode 100644 index 0000000..89fcece Binary files /dev/null and b/ios/OutLive/Images.xcassets/drink_water.imageset/1x.png differ diff --git a/ios/OutLive/Images.xcassets/drink_water.imageset/Contents.json b/ios/OutLive/Images.xcassets/drink_water.imageset/Contents.json new file mode 100644 index 0000000..cc114a1 --- /dev/null +++ b/ios/OutLive/Images.xcassets/drink_water.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images": [ + { + "idiom": "universal", + "scale": "1x", + "filename": "1x.png" + }, + { + "idiom": "universal", + "scale": "2x", + "filename": "1x.png" + }, + { + "idiom": "universal", + "scale": "3x", + "filename": "1x.png" + } + ], + "info": { + "version": 1, + "author": "expo" + } +} \ No newline at end of file diff --git a/ios/OutLive/Info.plist b/ios/OutLive/Info.plist new file mode 100644 index 0000000..8851cb4 --- /dev/null +++ b/ios/OutLive/Info.plist @@ -0,0 +1,104 @@ + + + + + BGTaskSchedulerPermittedIdentifiers + + com.expo.modules.backgroundtask.processing + + CADisableMinimumFrameDurationOnPhone + + CFBundleAllowMixedLocalizations + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Out Live + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0.12 + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleURLSchemes + + digitalpilates + com.anonymous.digitalpilates + + + + CFBundleVersion + 1 + ITSAppUsesNonExemptEncryption + + LSMinimumSystemVersion + 12.0 + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSAllowsLocalNetworking + + + NSCameraUsageDescription + 应用需要使用相机以拍摄您的体态照片用于AI测评。 + NSHealthShareUsageDescription + 应用需要访问您的健康数据(步数、能量消耗、心率变异性等)以展示运动统计和压力分析。 + NSHealthUpdateUsageDescription + 应用需要更新您的健康数据(体重信息)以记录您的健身进度。 + NSMicrophoneUsageDescription + 应用需要使用麦克风进行语音识别,将您的语音转换为文字记录饮食信息。 + NSPhotoLibraryAddUsageDescription + 应用需要写入相册以保存拍摄的体态照片(可选)。 + NSPhotoLibraryUsageDescription + 应用需要访问相册以选择您的体态照片用于AI测评。 + NSSpeechRecognitionUsageDescription + 应用需要使用语音识别功能来转换您的语音为文字,帮助您快速记录饮食信息。 + NSUserActivityTypes + + $(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route + + NSUserNotificationsUsageDescription + 应用需要发送通知以提醒您喝水和站立活动。 + RCTNewArchEnabled + + UIBackgroundModes + + processing + fetch + remote-notification + + UILaunchStoryboardName + SplashScreen + UIRequiredDeviceCapabilities + + arm64 + + UIRequiresFullScreen + + UIStatusBarStyle + UIStatusBarStyleDefault + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + + UIUserInterfaceStyle + Light + UIViewControllerBasedStatusBarAppearance + + + \ No newline at end of file diff --git a/ios/digitalpilates/digitalpilates-Bridging-Header.h b/ios/OutLive/OutLive-Bridging-Header.h similarity index 80% rename from ios/digitalpilates/digitalpilates-Bridging-Header.h rename to ios/OutLive/OutLive-Bridging-Header.h index 6682446..e46eecf 100644 --- a/ios/digitalpilates/digitalpilates-Bridging-Header.h +++ b/ios/OutLive/OutLive-Bridging-Header.h @@ -2,4 +2,4 @@ // Use this file to import your target's public headers that you would like to expose to Swift. // #import -#import \ No newline at end of file +#import diff --git a/ios/OutLive/OutLive.entitlements b/ios/OutLive/OutLive.entitlements new file mode 100644 index 0000000..f23b373 --- /dev/null +++ b/ios/OutLive/OutLive.entitlements @@ -0,0 +1,16 @@ + + + + + aps-environment + development + com.apple.developer.applesignin + + Default + + com.apple.developer.healthkit + + com.apple.developer.healthkit.access + + + \ No newline at end of file diff --git a/ios/digitalpilates/PrivacyInfo.xcprivacy b/ios/OutLive/PrivacyInfo.xcprivacy similarity index 100% rename from ios/digitalpilates/PrivacyInfo.xcprivacy rename to ios/OutLive/PrivacyInfo.xcprivacy diff --git a/ios/digitalpilates/SplashScreen.storyboard b/ios/OutLive/SplashScreen.storyboard similarity index 57% rename from ios/digitalpilates/SplashScreen.storyboard rename to ios/OutLive/SplashScreen.storyboard index f7339d3..5afb2d2 100644 --- a/ios/digitalpilates/SplashScreen.storyboard +++ b/ios/OutLive/SplashScreen.storyboard @@ -1,47 +1,46 @@ - - + + - + + - - + - - - - - + + - - - + + - + - + + + + - + - + \ No newline at end of file diff --git a/ios/digitalpilates/Supporting/Expo.plist b/ios/OutLive/Supporting/Expo.plist similarity index 100% rename from ios/digitalpilates/Supporting/Expo.plist rename to ios/OutLive/Supporting/Expo.plist diff --git a/ios/Podfile b/ios/Podfile index 1479e81..cd1c8ee 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -4,18 +4,15 @@ require File.join(File.dirname(`node --print "require.resolve('react-native/pack require 'json' podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {} -ENV['RCT_NEW_ARCH_ENABLED'] = '1' if podfile_properties['newArchEnabled'] == 'false' -ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] - +ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false' +ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] +ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false' +ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false' platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' -install! 'cocoapods', - :deterministic_uuids => false prepare_react_native_project! -project 'digitalpilates.xcodeproj' - -target 'digitalpilates' do +target 'OutLive' do use_expo_modules! if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1' @@ -51,24 +48,5 @@ target 'digitalpilates' do :mac_catalyst_enabled => false, :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true', ) - - # Force all Pods to build simulator slices as arm64 (avoid mixed x86_64/arm64 issues) - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - # Force pods to build arm64 simulator by excluding only x86_64 - config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'x86_64' - end - end - - # This is necessary for Xcode 14, because it signs resource bundles by default - # when building for devices. - installer.target_installation_results.pod_target_installation_results - .each do |pod_name, target_installation_result| - target_installation_result.resource_bundle_targets.each do |resource_bundle_target| - resource_bundle_target.build_configurations.each do |config| - config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' - end - end - end end end diff --git a/ios/Podfile.lock b/ios/Podfile.lock index e9ff81e..b5c9bb6 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,6 +1,4 @@ PODS: - - boost (1.84.0) - - DoubleConversion (1.1.6) - EXApplication (7.0.7): - ExpoModulesCore - EXConstants (18.0.9): @@ -11,18 +9,12 @@ PODS: - EXNotifications (0.32.11): - ExpoModulesCore - Expo (54.0.8): - - boost - - DoubleConversion - ExpoModulesCore - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -39,7 +31,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - ExpoAppleAuthentication (8.0.7): - ExpoModulesCore @@ -80,17 +72,11 @@ PODS: - ExpoLinking (8.0.8): - ExpoModulesCore - ExpoModulesCore (3.0.16): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -106,7 +92,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - ExpoQuickActions (6.0.0): - ExpoModulesCore @@ -125,10 +111,7 @@ PODS: - EXTaskManager (14.0.7): - ExpoModulesCore - UMAppLoader - - fast_float (8.0.0) - FBLazyVector (0.81.4) - - fmt (11.0.2) - - glog (0.3.5) - hermes-engine (0.81.4): - hermes-engine/Pre-built (= 0.81.4) - hermes-engine/Pre-built (0.81.4) @@ -151,18 +134,12 @@ PODS: - libwebp/sharpyuv - lottie-ios (4.5.0) - lottie-react-native (7.3.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - lottie-ios (= 4.5.0) - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -177,29 +154,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - PurchasesHybridCommon (17.7.0): - RevenueCat (= 5.39.0) - - RCT-Folly (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCT-Folly/Default (= 2024.11.18.00) - - RCT-Folly/Default (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCT-Folly/Fabric (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - RCTDeprecation (0.81.4) - RCTRequired (0.81.4) - RCTTypeSafety (0.81.4): @@ -221,15 +179,9 @@ PODS: - React-RCTVibration (= 0.81.4) - React-callinvoker (0.81.4) - React-Core (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default (= 0.81.4) - React-cxxreact - React-featureflags @@ -243,18 +195,14 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga + - React-Core-prebuilt (0.81.4): + - ReactNativeDependencies - React-Core/CoreModulesHeaders (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -268,18 +216,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/Default (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-cxxreact - React-featureflags - React-hermes @@ -292,18 +234,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/DevSupport (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default (= 0.81.4) - React-Core/RCTWebSocket (= 0.81.4) - React-cxxreact @@ -318,18 +254,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTActionSheetHeaders (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -343,18 +273,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTAnimationHeaders (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -368,18 +292,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTBlobHeaders (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -393,18 +311,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTImageHeaders (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -418,18 +330,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTLinkingHeaders (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -443,18 +349,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTNetworkHeaders (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -468,18 +368,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTSettingsHeaders (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -493,18 +387,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTTextHeaders (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -518,18 +406,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTVibrationHeaders (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -543,18 +425,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTWebSocket (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default (= 0.81.4) - React-cxxreact - React-featureflags @@ -568,17 +444,11 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-CoreModules (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - RCTTypeSafety (= 0.81.4) + - React-Core-prebuilt - React-Core/CoreModulesHeaders (= 0.81.4) - React-jsi (= 0.81.4) - React-jsinspector @@ -590,17 +460,11 @@ PODS: - React-RCTImage (= 0.81.4) - React-runtimeexecutor - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-cxxreact (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-callinvoker (= 0.81.4) + - React-Core-prebuilt - React-debug (= 0.81.4) - React-jsi (= 0.81.4) - React-jsinspector @@ -610,17 +474,11 @@ PODS: - React-perflogger (= 0.81.4) - React-runtimeexecutor - React-timing (= 0.81.4) - - SocketRocket + - ReactNativeDependencies - React-debug (0.81.4) - React-defaultsnativemodule (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-domnativemodule - React-featureflagsnativemodule - React-idlecallbacksnativemodule @@ -628,16 +486,10 @@ PODS: - React-jsiexecutor - React-microtasksnativemodule - React-RCTFBReactNativeSpec - - SocketRocket + - ReactNativeDependencies - React-domnativemodule (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-Fabric - React-Fabric/bridging - React-FabricComponents @@ -647,20 +499,14 @@ PODS: - React-RCTFBReactNativeSpec - React-runtimeexecutor - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-Fabric (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric/animations (= 0.81.4) @@ -690,19 +536,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/animations (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -715,19 +555,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/attributedstring (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -740,19 +574,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/bridging (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -765,19 +593,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/componentregistry (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -790,19 +612,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/componentregistrynative (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -815,19 +631,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/components (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric/components/legacyviewmanagerinterop (= 0.81.4) @@ -844,19 +654,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/components/legacyviewmanagerinterop (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -869,19 +673,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/components/root (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -894,19 +692,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/components/scrollview (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -919,19 +711,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/components/view (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -945,20 +731,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-Fabric/consistency (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -971,19 +751,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/core (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -996,19 +770,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/dom (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1021,19 +789,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/imagemanager (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1046,19 +808,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/leakchecker (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1071,19 +827,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/mounting (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1096,19 +846,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/observers (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric/observers/events (= 0.81.4) @@ -1122,19 +866,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/observers/events (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1147,19 +885,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/scheduler (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric/observers/events @@ -1174,19 +906,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/telemetry (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1199,19 +925,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/templateprocessor (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1224,19 +944,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/uimanager (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric/uimanager/consistency (= 0.81.4) @@ -1251,19 +965,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/uimanager/consistency (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1277,19 +985,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-FabricComponents (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1305,20 +1007,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1343,20 +1039,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/inputaccessory (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1370,20 +1060,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/iostextinput (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1397,20 +1081,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/modal (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1424,20 +1102,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/rncore (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1451,20 +1123,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/safeareaview (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1478,20 +1144,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/scrollview (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1505,20 +1165,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/switch (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1532,20 +1186,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/text (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1559,20 +1207,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/textinput (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1586,20 +1228,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/unimplementedview (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1613,20 +1249,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/virtualview (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1640,20 +1270,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/textlayoutmanager (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1667,19 +1291,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricImage (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired (= 0.81.4) - RCTTypeSafety (= 0.81.4) + - React-Core-prebuilt - React-Fabric - React-featureflags - React-graphics @@ -1690,54 +1308,30 @@ PODS: - React-rendererdebug - React-utils - ReactCommon - - SocketRocket + - ReactNativeDependencies - Yoga - React-featureflags (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket + - React-Core-prebuilt + - ReactNativeDependencies - React-featureflagsnativemodule (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-featureflags - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-graphics (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-jsi - React-jsiexecutor - React-utils - - SocketRocket + - ReactNativeDependencies - React-hermes (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-cxxreact (= 0.81.4) - React-jsi - React-jsiexecutor (= 0.81.4) @@ -1746,72 +1340,42 @@ PODS: - React-jsinspectortracing - React-perflogger (= 0.81.4) - React-runtimeexecutor - - SocketRocket + - ReactNativeDependencies - React-idlecallbacksnativemodule (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - React-runtimeexecutor - React-runtimescheduler - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-ImageManager (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-Core/Default - React-debug - React-Fabric - React-graphics - React-rendererdebug - React-utils - - SocketRocket + - ReactNativeDependencies - React-jserrorhandler (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags - React-jsi - ReactCommon/turbomodule/bridging - - SocketRocket + - ReactNativeDependencies - React-jsi (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket + - React-Core-prebuilt + - ReactNativeDependencies - React-jsiexecutor (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-cxxreact (= 0.81.4) - React-jsi (= 0.81.4) - React-jsinspector @@ -1819,16 +1383,10 @@ PODS: - React-jsinspectortracing - React-perflogger (= 0.81.4) - React-runtimeexecutor - - SocketRocket + - ReactNativeDependencies - React-jsinspector (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-featureflags - React-jsi - React-jsinspectorcdp @@ -1837,104 +1395,56 @@ PODS: - React-oscompat - React-perflogger (= 0.81.4) - React-runtimeexecutor - - SocketRocket + - ReactNativeDependencies - React-jsinspectorcdp (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket + - React-Core-prebuilt + - ReactNativeDependencies - React-jsinspectornetwork (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-featureflags - React-jsinspectorcdp - React-performancetimeline - React-timing - - SocketRocket + - ReactNativeDependencies - React-jsinspectortracing (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-oscompat - React-timing - - SocketRocket + - ReactNativeDependencies - React-jsitooling (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-cxxreact (= 0.81.4) - React-jsi (= 0.81.4) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - - SocketRocket + - ReactNativeDependencies - React-jsitracing (0.81.4): - React-jsi - React-logger (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket + - React-Core-prebuilt + - ReactNativeDependencies - React-Mapbuffer (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-debug - - SocketRocket + - ReactNativeDependencies - React-microtasksnativemodule (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - react-native-render-html (6.3.4): - React-Core - react-native-safe-area-context (5.6.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -1951,20 +1461,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-safe-area-context/common (5.6.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -1979,20 +1483,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-safe-area-context/fabric (5.6.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2008,22 +1506,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-voice (3.2.4): - React-Core - - react-native-webview (13.16.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - react-native-webview (13.15.0): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2038,19 +1530,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-NativeModulesApple (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-callinvoker - React-Core + - React-Core-prebuilt - React-cxxreact - React-featureflags - React-jsi @@ -2059,60 +1545,36 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-oscompat (0.81.4) - React-perflogger (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket + - React-Core-prebuilt + - ReactNativeDependencies - React-performancetimeline (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-featureflags - React-jsinspectortracing - React-perflogger - React-timing - - SocketRocket + - ReactNativeDependencies - React-RCTActionSheet (0.81.4): - React-Core/RCTActionSheetHeaders (= 0.81.4) - React-RCTAnimation (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTAnimationHeaders - React-featureflags - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTAppDelegate (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-CoreModules - React-debug - React-defaultsnativemodule @@ -2134,16 +1596,10 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTBlob (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-Core/RCTBlobHeaders - React-Core/RCTWebSocket - React-jsi @@ -2153,17 +1609,11 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTFabric (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-FabricComponents @@ -2187,37 +1637,25 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-RCTFBReactNativeSpec (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec/components (= 0.81.4) - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTFBReactNativeSpec/components (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2227,24 +1665,18 @@ PODS: - React-rendererdebug - React-utils - ReactCommon - - SocketRocket + - ReactNativeDependencies - Yoga - React-RCTImage (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTImageHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTLinking (0.81.4): - React-Core/RCTLinkingHeaders (= 0.81.4) - React-jsi (= 0.81.4) @@ -2253,14 +1685,8 @@ PODS: - ReactCommon - ReactCommon/turbomodule/core (= 0.81.4) - React-RCTNetwork (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTNetworkHeaders - React-featureflags - React-jsi @@ -2269,17 +1695,11 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTRuntime (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-Core + - React-Core-prebuilt - React-jsi - React-jsinspector - React-jsinspectorcdp @@ -2289,63 +1709,39 @@ PODS: - React-RuntimeCore - React-runtimeexecutor - React-RuntimeHermes - - SocketRocket + - ReactNativeDependencies - React-RCTSettings (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTSettingsHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTText (0.81.4): - React-Core/RCTTextHeaders (= 0.81.4) - Yoga - React-RCTVibration (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-rendererconsistency (0.81.4) - React-renderercss (0.81.4): - React-debug - React-utils - React-rendererdebug (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-debug - - SocketRocket + - ReactNativeDependencies - React-RuntimeApple (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-callinvoker + - React-Core-prebuilt - React-Core/Default - React-CoreModules - React-cxxreact @@ -2364,16 +1760,10 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - React-RuntimeCore (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-cxxreact - React-Fabric - React-featureflags @@ -2386,29 +1776,17 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - React-runtimeexecutor (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-debug - React-featureflags - React-jsi (= 0.81.4) - React-utils - - SocketRocket + - ReactNativeDependencies - React-RuntimeHermes (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-featureflags - React-hermes - React-jsi @@ -2420,17 +1798,11 @@ PODS: - React-RuntimeCore - React-runtimeexecutor - React-utils - - SocketRocket + - ReactNativeDependencies - React-runtimescheduler (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-callinvoker + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -2442,35 +1814,23 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - SocketRocket + - ReactNativeDependencies - React-timing (0.81.4): - React-debug - React-utils (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-debug - React-jsi (= 0.81.4) - - SocketRocket + - ReactNativeDependencies - ReactAppDependencyProvider (0.81.4): - ReactCodegen - ReactCodegen (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-FabricImage @@ -2484,59 +1844,35 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - ReactCommon (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - ReactCommon/turbomodule (= 0.81.4) - - SocketRocket + - ReactNativeDependencies - ReactCommon/turbomodule (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-callinvoker (= 0.81.4) + - React-Core-prebuilt - React-cxxreact (= 0.81.4) - React-jsi (= 0.81.4) - React-logger (= 0.81.4) - React-perflogger (= 0.81.4) - ReactCommon/turbomodule/bridging (= 0.81.4) - ReactCommon/turbomodule/core (= 0.81.4) - - SocketRocket + - ReactNativeDependencies - ReactCommon/turbomodule/bridging (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-callinvoker (= 0.81.4) + - React-Core-prebuilt - React-cxxreact (= 0.81.4) - React-jsi (= 0.81.4) - React-logger (= 0.81.4) - React-perflogger (= 0.81.4) - - SocketRocket + - ReactNativeDependencies - ReactCommon/turbomodule/core (0.81.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-callinvoker (= 0.81.4) + - React-Core-prebuilt - React-cxxreact (= 0.81.4) - React-debug (= 0.81.4) - React-featureflags (= 0.81.4) @@ -2544,22 +1880,15 @@ PODS: - React-logger (= 0.81.4) - React-perflogger (= 0.81.4) - React-utils (= 0.81.4) - - SocketRocket + - ReactNativeDependencies + - ReactNativeDependencies (0.81.4) - RevenueCat (5.39.0) - - RNAppleHealthKit (1.7.0): - - React - RNCAsyncStorage (2.2.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2574,20 +1903,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNCMaskedView (0.3.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2602,20 +1925,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - RNCPicker (2.11.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNCPicker (2.11.1): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2630,20 +1947,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - RNDateTimePicker (8.4.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNDateTimePicker (8.4.4): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2658,22 +1969,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNDeviceInfo (14.0.4): - React-Core - RNGestureHandler (2.28.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2688,23 +1993,17 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNPurchases (9.4.3): - PurchasesHybridCommon (= 17.7.0) - React-Core - RNReanimated (4.1.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2720,22 +2019,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNReanimated/reanimated (= 4.1.0) - RNWorklets - - SocketRocket - Yoga - RNReanimated/reanimated (4.1.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2751,22 +2044,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNReanimated/reanimated/apple (= 4.1.0) - RNWorklets - - SocketRocket - Yoga - RNReanimated/reanimated/apple (4.1.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2782,21 +2069,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNWorklets - - SocketRocket - Yoga - RNScreens (4.16.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2812,21 +2093,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNScreens/common (= 4.16.0) - - SocketRocket - Yoga - RNScreens/common (4.16.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2842,20 +2117,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - RNSentry (7.0.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNSentry (6.20.0): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2871,21 +2140,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - Sentry/HybridSDK (= 8.53.2) - - SocketRocket - Yoga - - RNSVG (15.13.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNSVG (15.12.1): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2900,21 +2163,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNSVG/common (= 15.13.0) - - SocketRocket + - ReactNativeDependencies + - RNSVG/common (= 15.12.1) - Yoga - - RNSVG/common (15.13.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNSVG/common (15.12.1): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2929,20 +2186,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNWorklets (0.5.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2958,21 +2209,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNWorklets/worklets (= 0.5.1) - - SocketRocket - Yoga - RNWorklets/worklets (0.5.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2988,21 +2233,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNWorklets/worklets/apple (= 0.5.1) - - SocketRocket - Yoga - RNWorklets/worklets/apple (0.5.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3018,7 +2257,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - SDWebImage (5.21.2): - SDWebImage/Core (= 5.21.2) @@ -3032,7 +2271,6 @@ PODS: - libwebp (~> 1.0) - SDWebImage/Core (~> 5.17) - Sentry/HybridSDK (8.53.2) - - SocketRocket (0.7.1) - UMAppLoader (6.0.7) - Yoga (0.0.0) - ZXingObjC/Core (3.6.9) @@ -3042,8 +2280,6 @@ PODS: - ZXingObjC/Core DEPENDENCIES: - - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - EXApplication (from `../node_modules/expo-application/ios`) - EXConstants (from `../node_modules/expo-constants/ios`) - EXImageLoader (from `../node_modules/expo-image-loader/ios`) @@ -3073,19 +2309,16 @@ DEPENDENCIES: - "ExpoUI (from `../node_modules/@expo/ui/ios`)" - ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`) - EXTaskManager (from `../node_modules/expo-task-manager/ios`) - - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - lottie-react-native (from `../node_modules/lottie-react-native`) - - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - RCTRequired (from `../node_modules/react-native/Libraries/Required`) - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - React (from `../node_modules/react-native/`) - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - React-Core (from `../node_modules/react-native/`) + - React-Core-prebuilt (from `../node_modules/react-native/React-Core-prebuilt.podspec`) - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) @@ -3147,7 +2380,7 @@ DEPENDENCIES: - ReactAppDependencyProvider (from `build/generated/ios`) - ReactCodegen (from `build/generated/ios`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - - RNAppleHealthKit (from `../node_modules/react-native-health`) + - ReactNativeDependencies (from `../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec`) - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" - "RNCMaskedView (from `../node_modules/@react-native-masked-view/masked-view`)" - "RNCPicker (from `../node_modules/@react-native-picker/picker`)" @@ -3160,7 +2393,6 @@ DEPENDENCIES: - "RNSentry (from `../node_modules/@sentry/react-native`)" - RNSVG (from `../node_modules/react-native-svg`) - RNWorklets (from `../node_modules/react-native-worklets`) - - SocketRocket (~> 0.7.1) - UMAppLoader (from `../node_modules/unimodules-app-loader/ios`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -3177,14 +2409,9 @@ SPEC REPOS: - SDWebImageSVGCoder - SDWebImageWebPCoder - Sentry - - SocketRocket - ZXingObjC EXTERNAL SOURCES: - boost: - :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" - DoubleConversion: - :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" EXApplication: :path: "../node_modules/expo-application/ios" EXConstants: @@ -3243,21 +2470,13 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-web-browser/ios" EXTaskManager: :path: "../node_modules/expo-task-manager/ios" - fast_float: - :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" FBLazyVector: :path: "../node_modules/react-native/Libraries/FBLazyVector" - fmt: - :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" - glog: - :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" :tag: hermes-2025-07-07-RNv0.81.0-e0fc67142ec0763c6b6153ca2bf96df815539782 lottie-react-native: :path: "../node_modules/lottie-react-native" - RCT-Folly: - :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTDeprecation: :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" RCTRequired: @@ -3270,6 +2489,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/callinvoker" React-Core: :path: "../node_modules/react-native/" + React-Core-prebuilt: + :podspec: "../node_modules/react-native/React-Core-prebuilt.podspec" React-CoreModules: :path: "../node_modules/react-native/React/CoreModules" React-cxxreact: @@ -3390,8 +2611,8 @@ EXTERNAL SOURCES: :path: build/generated/ios ReactCommon: :path: "../node_modules/react-native/ReactCommon" - RNAppleHealthKit: - :path: "../node_modules/react-native-health" + ReactNativeDependencies: + :podspec: "../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec" RNCAsyncStorage: :path: "../node_modules/@react-native-async-storage/async-storage" RNCMaskedView: @@ -3422,13 +2643,11 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 - DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb EXApplication: 296622817d459f46b6c5fe8691f4aac44d2b79e7 EXConstants: a95804601ee4a6aa7800645f9b070d753b1142b3 EXImageLoader: 189e3476581efe3ad4d1d3fb4735b7179eb26f05 EXNotifications: 7a2975f4e282b827a0bc78bb1d232650cb569bbd - Expo: f75c4161ba6b82f264daee5f52a50ac2a55d6d67 + Expo: 4875e1cc72ae1398e33bcd6632943a4e93926ecd ExpoAppleAuthentication: bc9de6e9ff3340604213ab9031d4c4f7f802623e ExpoAsset: 84810d6fed8179f04d4a7a4a6b37028bbd726e26 ExpoBackgroundTask: 22ed53b129d4d5e15c39be9fa68e45d25f6781a1 @@ -3444,7 +2663,7 @@ SPEC CHECKSUMS: ExpoKeepAwake: 1a2e820692e933c94a565ec3fbbe38ac31658ffe ExpoLinearGradient: a464898cb95153125e3b81894fd479bcb1c7dd27 ExpoLinking: f051f28e50ea9269ff539317c166adec81d9342d - ExpoModulesCore: 654d2976c18a4a764a528928e73c4a25c8eb0e5a + ExpoModulesCore: a28d1b4a5a9fbdacc41ca8d0c777a2d73496b022 ExpoQuickActions: 31a70aa6a606128de4416a4830e09cfabfe6667f ExpoSplashScreen: cbb839de72110dea1851dd3e85080b7923af2540 ExpoSQLite: 7fa091ba5562474093fef09be644161a65e11b3f @@ -3453,108 +2672,104 @@ SPEC CHECKSUMS: ExpoUI: 68238da1f16a814f77bc64712a269440174ee898 ExpoWebBrowser: 533bc2a1b188eec1c10e4926decf658f1687b5e5 EXTaskManager: cf225704fab8de8794a6f57f7fa41a90c0e2cd47 - fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: 941bef1c8eeabd9fe1f501e30a5220beee913886 - fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd - glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 + FBLazyVector: 9e0cd874afd81d9a4d36679daca991b58b260d42 hermes-engine: 35c763d57c9832d0eef764316ca1c4d043581394 libavif: 84bbb62fb232c3018d6f1bab79beea87e35de7b7 libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 lottie-ios: a881093fab623c467d3bce374367755c272bdd59 - lottie-react-native: 86fa7488b1476563f41071244aa73d5b738faf19 + lottie-react-native: cbe3d931a7c24f7891a8e8032c2bb9b2373c4b9c PurchasesHybridCommon: 6bc96162fb0c061e1980f474be618c088cfd1428 - RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 - RCTDeprecation: c0ed3249a97243002615517dff789bf4666cf585 - RCTRequired: 58719f5124f9267b5f9649c08bf23d9aea845b23 - RCTTypeSafety: 4aefa8328ab1f86da273f08517f1f6b343f6c2cc + RCTDeprecation: 7487d6dda857ccd4cb3dd6ecfccdc3170e85dcbc + RCTRequired: 54128b7df8be566881d48c7234724a78cb9b6157 + RCTTypeSafety: d2b07797a79e45d7b19e1cd2f53c79ab419fe217 React: 2073376f47c71b7e9a0af7535986a77522ce1049 - React-callinvoker: 751b6f2c83347a0486391c3f266f291f0f53b27e - React-Core: dff5d29973349b11dd6631c9498456d75f846d5e - React-CoreModules: c0ae04452e4c5d30e06f8e94692a49107657f537 - React-cxxreact: 376fd672c95dfb64ad5cc246e6a1e9edb78dec4c - React-debug: 7b56a0a7da432353287d2eedac727903e35278f5 - React-defaultsnativemodule: 393b81aaa6211408f50a6ef00a277847256dd881 - React-domnativemodule: 5fb5829baa7a7a0f217019cbad1eb226d94f7062 - React-Fabric: a17c4ae35503673b57b91c2d1388429e7cbee452 - React-FabricComponents: a76572ddeba78ebe4ec58615291e9db4a55cd46a - React-FabricImage: d806eb2695d7ef355ec28d1a21f5a14ac26b1cae - React-featureflags: 1690ec3c453920b6308e23a4e24eb9c3632f9c75 - React-featureflagsnativemodule: 7b7e8483fc671c5a33aefd699b7c7a3c0bdfdfec - React-graphics: ea146ee799dc816524a3a0922fc7be0b5a52dcc1 - React-hermes: fcbdc45ecf38259fe3b12642bd0757c52270a107 - React-idlecallbacksnativemodule: a353f9162eaa7ad787e68aba9f52a1cfa8154098 - React-ImageManager: ec5cf55ce9cc81719eb5f1f51d23d04db851c86c - React-jserrorhandler: 594c593f3d60f527be081e2cace7710c2bd9f524 - React-jsi: 59ec3190dd364cca86a58869e7755477d2468948 - React-jsiexecutor: b87d78a2e8dd7a6f56e9cdac038da45de98c944f - React-jsinspector: b9204adf1af622c98e78af96ec1bca615c2ce2bd - React-jsinspectorcdp: 4a356fa69e412d35d3a38c44d4a6cc555c5931e8 - React-jsinspectornetwork: 7820056773178f321cbf18689e1ffcd38276a878 - React-jsinspectortracing: b341c5ef6e031a33e0bd462d67fd397e8e9cd612 - React-jsitooling: 401655e05cb966b0081225c5201d90734a567cb9 - React-jsitracing: 67eff6dea0cb58a1e7bd8b49243012d88c0f511e - React-logger: a3cb5b29c32b8e447b5a96919340e89334062b48 - React-Mapbuffer: 9d2434a42701d6144ca18f0ca1c4507808ca7696 - React-microtasksnativemodule: 75b6604b667d297292345302cc5bfb6b6aeccc1b + React-callinvoker: 00fa0972a70df7408a4f088144b67207b157e386 + React-Core: d375dd308561785c739a621a21802e5e7e047dee + React-Core-prebuilt: dde79b89f8863efebb1d532a3335f472927da669 + React-CoreModules: 3eb9b1410a317987c557afc683cc50099562c91d + React-cxxreact: 724210b64158d97f150d8d254a7319e73ef77ee7 + React-debug: c01d176522cf57cdc4a4a66d1974968fcf497f32 + React-defaultsnativemodule: 3953ff49013fa997e72586628e1d218fdaf3abdb + React-domnativemodule: 540b9c7a8f31b6f4ed449aafd3a272e1f1107089 + React-Fabric: 00b792be016edad758a63c4ebac15e01d35f6355 + React-FabricComponents: 16ebdb9245d91ec27985a038d0a6460f499db54e + React-FabricImage: 2a967b5f0293c1c49ec883babfd4992d161e3583 + React-featureflags: 4150b4ddac8210b1e3c538cfb455050b5ee05d8d + React-featureflagsnativemodule: ff977040205b96818ac1f884846493cb8a2aca28 + React-graphics: ec689ac1c13a9ddb1af83baf195264676ecdbeb6 + React-hermes: ff60a3407f27f3fc82f661774a7ab6559a24ab69 + React-idlecallbacksnativemodule: 5f5ce3c424941f77da4ac3adba681149e68b1221 + React-ImageManager: 8d87296a86f9ee290c1d32c68c7be1be63492467 + React-jserrorhandler: 072756f12136284c86e96c33cdfece4d7286a99f + React-jsi: b507852b42a9125dffbf6ae7a33792fb521b29a2 + React-jsiexecutor: f970eed6debb91fe5d5d6cb5734d39cf86c59896 + React-jsinspector: 766e113e9482b22971b30236d10c04d8af38269e + React-jsinspectorcdp: 5b60350e29fe2566d9ed9799858c04b8e6095a3e + React-jsinspectornetwork: b3cc9a20c6b270f792eaaaa14313019a031b327d + React-jsinspectortracing: d99120fcf0864209c45cefbc9fc4605c8189c0ef + React-jsitooling: 9e41724cc47feadefbede31ca91d70f6ff079656 + React-jsitracing: ca020d934502de8e02cccf451501434a5e584027 + React-logger: 7b234de35acb469ce76d6bbb0457f664d6f32f62 + React-Mapbuffer: fbe1da882a187e5898bdf125e1cc6e603d27ecae + React-microtasksnativemodule: 76905804171d8ccbe69329fc84c57eb7934add7f react-native-render-html: 5afc4751f1a98621b3009432ef84c47019dcb2bd - react-native-safe-area-context: c6e2edd1c1da07bdce287fa9d9e60c5f7b514616 + react-native-safe-area-context: 42a1b4f8774b577d03b53de7326e3d5757fe9513 react-native-voice: 908a0eba96c8c3d643e4f98b7232c6557d0a6f9c - react-native-webview: 654f794a7686b47491cf43aa67f7f428bea00eed - React-NativeModulesApple: 879fbdc5dcff7136abceb7880fe8a2022a1bd7c3 - React-oscompat: 93b5535ea7f7dff46aaee4f78309a70979bdde9d - React-perflogger: 5536d2df3d18fe0920263466f7b46a56351c0510 - React-performancetimeline: 9041c53efa07f537164dcfe7670a36642352f4c2 - React-RCTActionSheet: 42195ae666e6d79b4af2346770f765b7c29435b9 - React-RCTAnimation: fa103ccc3503b1ed8dedca7e62e7823937748843 - React-RCTAppDelegate: 665d4baf19424cef08276e9ac0d8771eec4519f9 - React-RCTBlob: 0fa9530c255644db095f2c4fd8d89738d9d9ecc0 - React-RCTFabric: 1fcd8af6e25f92532f56b4ba092e58662c14d156 - React-RCTFBReactNativeSpec: db171247585774f9f0a30f75109cc51568686213 - React-RCTImage: ba824e61ce2e920a239a65d130b83c3a1d426dff - React-RCTLinking: d2dc199c37e71e6f505d9eca3e5c33be930014d4 - React-RCTNetwork: 87137d4b9bd77e5068f854dd5c1f30d4b072faf6 - React-RCTRuntime: 137fafaa808a8b7e76a510e8be45f9f827899daa - React-RCTSettings: 71f5c7fd7b5f4e725a4e2114a4b4373d0e46048f - React-RCTText: b94d4699b49285bee22b8ebf768924d607eccee3 - React-RCTVibration: 6e3993c4f6c36a3899059f9a9ead560ddaf5a7d7 - React-rendererconsistency: b4785e5ed837dc7c242bbc5fdd464b33ef5bfae7 - React-renderercss: e6fb0ba387b389c595ffa86b8b628716d31f58dc - React-rendererdebug: 60a03de5c7ea59bf2d39791eb43c4c0f5d8b24e3 - React-RuntimeApple: 3df6788cd9b938bb8cb28298d80b5fbd98a4d852 - React-RuntimeCore: fad8adb4172c414c00ff6980250caf35601a0f5d - React-runtimeexecutor: d2db7e72d97751855ea0bf5273d2ac84e5ea390c - React-RuntimeHermes: 04faa4cf9a285136a6d73738787fe36020170613 - React-runtimescheduler: f6a1c9555e7131b4a8b64cce01489ad0405f6e8d - React-timing: 1e6a8acb66e2b7ac9d418956617fd1fdb19322fd - React-utils: 52bbb03f130319ef82e4c3bc7a85eaacdb1fec87 + react-native-webview: b29007f4723bca10872028067b07abacfa1cb35a + React-NativeModulesApple: a9464983ccc0f66f45e93558671f60fc7536e438 + React-oscompat: 73db7dbc80edef36a9d6ed3c6c4e1724ead4236d + React-perflogger: 123272debf907cc423962adafcf4513320e43757 + React-performancetimeline: 095146e4dc8fa4568e44d7a9debc134f27e103f9 + React-RCTActionSheet: 9fc2a0901af63cefe09c8df95a08c2cf8bb7797b + React-RCTAnimation: 785e743e489bc7aec14415dbc15f4f275b2c0276 + React-RCTAppDelegate: 0602c9e13130edcde4661ea66d11122a3a66f11a + React-RCTBlob: ae53b7508a5ced43378de2a88816f63423df1f24 + React-RCTFabric: 687a0cfb5726adea7fac63560b04410c86d97134 + React-RCTFBReactNativeSpec: 7c55cf4fb4d2baad32ce3850b8504a6ee22e11ce + React-RCTImage: f45474c75cdf1526114f75b27e86d004aa171b90 + React-RCTLinking: 56622ff97570e15e01dd9b5a657010c756a9e2d8 + React-RCTNetwork: 3fffa1ab5d6981f839e7679d56f8cb731ba92c07 + React-RCTRuntime: f38c04f744596fc8e1b4c5f6a57fc05c26955257 + React-RCTSettings: f4a8e1bd36f58ec8273c73d3deefdcf90143ac6a + React-RCTText: da852a51dd1d169b38136a4f4d1eaed35376556b + React-RCTVibration: ff92ef336e32e18efff0fa83c798a2dbbebe09bd + React-rendererconsistency: b83b300e607f4e30478a5c3365e260a760232b04 + React-renderercss: aa6a3cdd4fa4e3726123c42b49ba4dd978f81688 + React-rendererdebug: 6b12a782caf2e7e2f730434264357b7b6aed1781 + React-RuntimeApple: 8934aab108dcab957a87208fef4b6f1b3a04973a + React-RuntimeCore: 1d4345561ecc402e9e88b38e1d9b059a7a13b113 + React-runtimeexecutor: a9a059f222e4d78f45a4e92cada48a5fde989fb8 + React-RuntimeHermes: 05b955709a75038d282a9420342d7bea5857768a + React-runtimescheduler: 4ce23c9157b51101092537d4171ea4de48a5b863 + React-timing: 62441edf291b91ab5b96ab8f2f8fb648c063ce6f + React-utils: 485abe7eaefa04b20e0ef442593e022563a1419b ReactAppDependencyProvider: 433ddfb4536948630aadd5bd925aff8a632d2fe3 - ReactCodegen: 1d05923ad119796be9db37830d5e5dc76586aa00 - ReactCommon: 394c6b92765cf6d211c2c3f7f6bc601dffb316a6 + ReactCodegen: a15ad48730e9fb2a51a4c9f61fe1ed253dfcf10f + ReactCommon: 149b6c05126f2e99f2ed0d3c63539369546f8cae + ReactNativeDependencies: ed6d1e64802b150399f04f1d5728ec16b437251e RevenueCat: 4743a5eee0004e1c03eabeb3498818f902a5d622 - RNAppleHealthKit: 86ef7ab70f762b802f5c5289372de360cca701f9 - RNCAsyncStorage: 29f0230e1a25f36c20b05f65e2eb8958d6526e82 - RNCMaskedView: 5ef8c95cbab95334a32763b72896a7b7d07e6299 - RNCPicker: a7e5555ebf53e17e06c1fde62195cf07b685d26c - RNDateTimePicker: 113004837aad399a525cd391ac70b7951219ff2f + RNCAsyncStorage: 3a4f5e2777dae1688b781a487923a08569e27fe4 + RNCMaskedView: d2578d41c59b936db122b2798ba37e4722d21035 + RNCPicker: a7170edbcbf8288de8edb2502e08e7fc757fa755 + RNDateTimePicker: be0e44bcb9ed0607c7c5f47dbedd88cf091f6791 RNDeviceInfo: d863506092aef7e7af3a1c350c913d867d795047 - RNGestureHandler: 3a73f098d74712952870e948b3d9cf7b6cae9961 + RNGestureHandler: 2914750df066d89bf9d8f48a10ad5f0051108ac3 RNPurchases: 1bc60e3a69af65d9cfe23967328421dd1df1763c - RNReanimated: 9de34f0313c4177a34c079ca9fce6f1f278bff24 - RNScreens: 0bbf16c074ae6bb1058a7bf2d1ae017f4306797c - RNSentry: 6c63debc7b22a00cbf7d1c9ed8de43e336216545 - RNSVG: 6c39befcfad06eec55b40c19a030b2d9eca63334 - RNWorklets: ad0606bee2a8103c14adb412149789c60b72bfb2 + RNReanimated: 8d3a14606ad49f022c17d9e12a2d339e9e5ad9b0 + RNScreens: d8d6f1792f6e7ac12b0190d33d8d390efc0c1845 + RNSentry: 4ed853c2ae6b4a235afa67145e0c30ae5adcf0b2 + RNSVG: 31d6639663c249b7d5abc9728dde2041eb2a3c34 + RNWorklets: 76fce72926e28e304afb44f0da23b2d24f2c1fa0 SDWebImage: 9f177d83116802728e122410fb25ad88f5c7608a SDWebImageAVIFCoder: afe194a084e851f70228e4be35ef651df0fc5c57 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380 Sentry: 59993bffde4a1ac297ba6d268dc4bbce068d7c1b - SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 UMAppLoader: e1234c45d2b7da239e9e90fc4bbeacee12afd5b6 - Yoga: a3ed390a19db0459bd6839823a6ac6d9c6db198d + Yoga: 051f086b5ccf465ff2ed38a2cf5a558ae01aaaa1 ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5 -PODFILE CHECKSUM: 07e2b7be6de64f3e375e08690eadb6e2ed0a9eec +PODFILE CHECKSUM: 857afe46eb91e5007e03cd06568df19c8c00dc3e COCOAPODS: 1.16.2 diff --git a/ios/Podfile.properties.json b/ios/Podfile.properties.json index ddd0386..d2fa9f8 100644 --- a/ios/Podfile.properties.json +++ b/ios/Podfile.properties.json @@ -1,5 +1,5 @@ { "expo.jsEngine": "jsc", "EX_DEV_CLIENT_NETWORK_INSPECTOR": "true", - "newArchEnabled": "false" -} \ No newline at end of file + "newArchEnabled": "true" +} diff --git a/ios/WaterWidget/AppIntent.swift b/ios/WaterWidget/AppIntent.swift deleted file mode 100644 index 9eae5c4..0000000 --- a/ios/WaterWidget/AppIntent.swift +++ /dev/null @@ -1,74 +0,0 @@ -// -// AppIntent.swift -// WaterWidget -// -// Created by richard on 2025/9/9. -// - -import WidgetKit -import AppIntents -import Foundation - -struct ConfigurationAppIntent: WidgetConfigurationIntent { - static var title: LocalizedStringResource { "Water Widget Configuration" } - static var description: IntentDescription { "Configure water intake widget settings." } -} - -// Intent for adding water record -struct AddWaterIntent: AppIntent { - static var title: LocalizedStringResource { "Add Water" } - static var description: IntentDescription { "Add water intake record" } - - @Parameter(title: "Amount (ml)") - var amount: Int - - init(amount: Int) { - self.amount = amount - } - - init() { - self.amount = 150 // default value - } - - func perform() async throws -> some IntentResult { - // Add water directly through shared UserDefaults - guard let sharedDefaults = UserDefaults(suiteName: "group.com.anonymous.digitalpilates") else { - print("Failed to access App Group UserDefaults") - return .result() - } - - // Get current values - let currentIntake = sharedDefaults.object(forKey: "widget_current_water_intake") as? Int ?? 0 - let targetIntake = sharedDefaults.object(forKey: "widget_daily_water_goal") as? Int ?? 2000 - - // Update current intake - let newIntake = currentIntake + amount - sharedDefaults.set(newIntake, forKey: "widget_current_water_intake") - - // Create ISO8601 formatted date string - let formatter = ISO8601DateFormatter() - let isoString = formatter.string(from: Date()) - sharedDefaults.set(isoString, forKey: "widget_last_sync_time") - sharedDefaults.synchronize() - - print("Water added from widget: +\(amount)ml, New total: \(newIntake)ml") - - // 设置待同步标记,主应用启动时会检测并同步到 TypeScript/Redux - let pendingRecords = sharedDefaults.array(forKey: "widget_pending_water_records") as? [[String: Any]] ?? [] - let newRecord: [String: Any] = [ - "amount": amount, - "recordedAt": isoString, - "source": "auto", - "widgetAdded": true - ] - let updatedRecords = pendingRecords + [newRecord] - sharedDefaults.set(updatedRecords, forKey: "widget_pending_water_records") - - // Trigger widget refresh - WidgetCenter.shared.reloadTimelines(ofKind: "WaterWidget") - - print("水记录已添加到待同步队列,主应用启动时将同步到 Redux Store") - - return .result() - } -} diff --git a/ios/WaterWidget/Assets.xcassets/AccentColor.colorset/Contents.json b/ios/WaterWidget/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/ios/WaterWidget/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/ios/WaterWidget/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/WaterWidget/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/ios/WaterWidget/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/ios/WaterWidget/Assets.xcassets/Contents.json b/ios/WaterWidget/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/ios/WaterWidget/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/ios/WaterWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json b/ios/WaterWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/ios/WaterWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/ios/WaterWidget/Info.plist b/ios/WaterWidget/Info.plist deleted file mode 100644 index d1a218a..0000000 --- a/ios/WaterWidget/Info.plist +++ /dev/null @@ -1,13 +0,0 @@ - - - - - NSExtension - - NSExtensionPointIdentifier - com.apple.widgetkit-extension - - RCTNewArchEnabled - - - diff --git a/ios/WaterWidget/WaterWidget.swift b/ios/WaterWidget/WaterWidget.swift deleted file mode 100644 index 2df580d..0000000 --- a/ios/WaterWidget/WaterWidget.swift +++ /dev/null @@ -1,183 +0,0 @@ -// -// WaterWidget.swift -// WaterWidget -// -// Created by richard on 2025/9/9. -// - -import WidgetKit -import SwiftUI - -// Data model for water intake -struct WaterData { - let currentIntake: Int - let targetIntake: Int - let quickAddAmount: Int - let progressPercentage: Double - - init(currentIntake: Int = 0, targetIntake: Int = 2000, quickAddAmount: Int = 150) { - self.currentIntake = currentIntake - self.targetIntake = targetIntake - self.quickAddAmount = quickAddAmount - self.progressPercentage = min(Double(currentIntake) / Double(targetIntake), 1.0) - } -} - -struct Provider: AppIntentTimelineProvider { - func placeholder(in context: Context) -> SimpleEntry { - SimpleEntry(date: Date(), configuration: ConfigurationAppIntent(), waterData: WaterData()) - } - - func snapshot(for configuration: ConfigurationAppIntent, in context: Context) async -> SimpleEntry { - // In a real app, you would fetch the actual water data here - let waterData = await fetchWaterData() - return SimpleEntry(date: Date(), configuration: configuration, waterData: waterData) - } - - func timeline(for configuration: ConfigurationAppIntent, in context: Context) async -> Timeline { - var entries: [SimpleEntry] = [] - let currentDate = Date() - - // Fetch current water data - let waterData = await fetchWaterData() - - // Generate timeline entries for every hour for the next 5 hours - for hourOffset in 0 ..< 5 { - let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)! - let entry = SimpleEntry(date: entryDate, configuration: configuration, waterData: waterData) - entries.append(entry) - } - - // Refresh every 15 minutes to keep data current - return Timeline(entries: entries, policy: .after(Calendar.current.date(byAdding: .minute, value: 15, to: currentDate)!)) - } - - // Fetch water data from shared App Group storage - private func fetchWaterData() async -> WaterData { - guard let sharedDefaults = UserDefaults(suiteName: "group.com.anonymous.digitalpilates") else { - print("Failed to access App Group UserDefaults") - return WaterData() // Return default data - } - - // Read data using the same keys as defined in widgetDataSync.ts - let currentIntake = sharedDefaults.object(forKey: "widget_current_water_intake") as? Int ?? 0 - let targetIntake = sharedDefaults.object(forKey: "widget_daily_water_goal") as? Int ?? 2000 - let quickAddAmount = sharedDefaults.object(forKey: "widget_quick_add_amount") as? Int ?? 150 - - print("Widget data loaded - Current: \(currentIntake)ml, Target: \(targetIntake)ml, Quick: \(quickAddAmount)ml") - - return WaterData( - currentIntake: currentIntake, - targetIntake: targetIntake, - quickAddAmount: quickAddAmount - ) - } -} - -struct SimpleEntry: TimelineEntry { - let date: Date - let configuration: ConfigurationAppIntent - let waterData: WaterData -} - -struct WaterWidgetEntryView : View { - var entry: Provider.Entry - - var body: some View { - VStack(spacing: 8) { - // Header with title and add button - HStack() { - Text("饮水") - .font(.system(size: 13, weight: .semibold)) - .foregroundColor(Color(red: 0.2, green: 0.2, blue: 0.2)) - - - // Quick add water button - Button(intent: AddWaterIntent(amount: entry.waterData.quickAddAmount)) { - Text("+\(entry.waterData.quickAddAmount)") - .font(.system(size: 10, weight: .bold)) - .foregroundColor(.white) - .padding(.horizontal, 8) - .padding(.vertical, 5) - .background( - LinearGradient( - gradient: Gradient(colors: [ - Color(red: 0.3, green: 0.7, blue: 1.0), - Color(red: 0.2, green: 0.6, blue: 0.9) - ]), - startPoint: .topLeading, - endPoint: .bottomTrailing - ) - ) - .cornerRadius(10) - } - .buttonStyle(PlainButtonStyle()) - } - - // Main content - left right layout - HStack(alignment: .center, spacing: 12) { - // Left side - Progress circle - ZStack { - // Background circle - Circle() - .stroke(Color(red: 0.95, green: 0.95, blue: 0.95), lineWidth: 4) - .frame(width: 45, height: 45) - - // Progress circle - Circle() - .trim(from: 0, to: entry.waterData.progressPercentage) - .stroke( - LinearGradient( - gradient: Gradient(colors: [ - Color(red: 0.3, green: 0.8, blue: 1.0), - Color(red: 0.1, green: 0.6, blue: 0.9) - ]), - startPoint: .topLeading, - endPoint: .bottomTrailing - ), - style: StrokeStyle(lineWidth: 4, lineCap: .round) - ) - .frame(width: 45, height: 45) - .rotationEffect(.degrees(-90)) - - // Progress percentage in center - Text("\(Int(entry.waterData.progressPercentage * 100))%") - .font(.system(size: 10, weight: .bold)) - .foregroundColor(Color(red: 0.3, green: 0.7, blue: 1.0)) - } - - } - } - .padding(12) - .background(Color.white) - .cornerRadius(16) - .containerBackground(Color.clear, for: .widget) - } -} - -struct WaterWidget: Widget { - let kind: String = "WaterWidget" - - var body: some WidgetConfiguration { - AppIntentConfiguration(kind: kind, intent: ConfigurationAppIntent.self, provider: Provider()) { entry in - WaterWidgetEntryView(entry: entry) - } - .configurationDisplayName("饮水记录") - .description("追踪你的每日饮水量,快速添加饮水记录") - .supportedFamilies([.systemSmall]) - } -} - -extension ConfigurationAppIntent { - fileprivate static var defaultConfig: ConfigurationAppIntent { - return ConfigurationAppIntent() - } -} - -#Preview(as: .systemSmall) { - WaterWidget() -} timeline: { - SimpleEntry(date: .now, configuration: .defaultConfig, waterData: WaterData(currentIntake: 500, targetIntake: 2000, quickAddAmount: 150)) - SimpleEntry(date: .now, configuration: .defaultConfig, waterData: WaterData(currentIntake: 1200, targetIntake: 2000, quickAddAmount: 200)) - SimpleEntry(date: .now, configuration: .defaultConfig, waterData: WaterData(currentIntake: 1800, targetIntake: 2000, quickAddAmount: 150)) -} diff --git a/ios/WaterWidget/WaterWidgetBundle.swift b/ios/WaterWidget/WaterWidgetBundle.swift deleted file mode 100644 index 35795a0..0000000 --- a/ios/WaterWidget/WaterWidgetBundle.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// WaterWidgetBundle.swift -// WaterWidget -// -// Created by richard on 2025/9/9. -// - -import WidgetKit -import SwiftUI - -@main -struct WaterWidgetBundle: WidgetBundle { - var body: some Widget { - WaterWidget() - WaterWidgetControl() - WaterWidgetLiveActivity() - } -} diff --git a/ios/WaterWidget/WaterWidgetControl.swift b/ios/WaterWidget/WaterWidgetControl.swift deleted file mode 100644 index 2176654..0000000 --- a/ios/WaterWidget/WaterWidgetControl.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// WaterWidgetControl.swift -// WaterWidget -// -// Created by richard on 2025/9/9. -// - -import AppIntents -import SwiftUI -import WidgetKit - -struct WaterWidgetControl: ControlWidget { - static let kind: String = "com.anonymous.digitalpilates.WaterWidget" - - var body: some ControlWidgetConfiguration { - AppIntentControlConfiguration( - kind: Self.kind, - provider: Provider() - ) { value in - ControlWidgetToggle( - "Start Timer", - isOn: value.isRunning, - action: StartTimerIntent(value.name) - ) { isRunning in - Label(isRunning ? "On" : "Off", systemImage: "timer") - } - } - .displayName("Timer") - .description("A an example control that runs a timer.") - } -} - -extension WaterWidgetControl { - struct Value { - var isRunning: Bool - var name: String - } - - struct Provider: AppIntentControlValueProvider { - func previewValue(configuration: TimerConfiguration) -> Value { - WaterWidgetControl.Value(isRunning: false, name: configuration.timerName) - } - - func currentValue(configuration: TimerConfiguration) async throws -> Value { - let isRunning = true // Check if the timer is running - return WaterWidgetControl.Value(isRunning: isRunning, name: configuration.timerName) - } - } -} - -struct TimerConfiguration: ControlConfigurationIntent { - static let title: LocalizedStringResource = "Timer Name Configuration" - - @Parameter(title: "Timer Name", default: "Timer") - var timerName: String -} - -struct StartTimerIntent: SetValueIntent { - static let title: LocalizedStringResource = "Start a timer" - - @Parameter(title: "Timer Name") - var name: String - - @Parameter(title: "Timer is running") - var value: Bool - - init() {} - - init(_ name: String) { - self.name = name - } - - func perform() async throws -> some IntentResult { - // Start the timer… - return .result() - } -} diff --git a/ios/WaterWidget/WaterWidgetLiveActivity.swift b/ios/WaterWidget/WaterWidgetLiveActivity.swift deleted file mode 100644 index 29acc5d..0000000 --- a/ios/WaterWidget/WaterWidgetLiveActivity.swift +++ /dev/null @@ -1,80 +0,0 @@ -// -// WaterWidgetLiveActivity.swift -// WaterWidget -// -// Created by richard on 2025/9/9. -// - -import ActivityKit -import WidgetKit -import SwiftUI - -struct WaterWidgetAttributes: ActivityAttributes { - public struct ContentState: Codable, Hashable { - // Dynamic stateful properties about your activity go here! - var emoji: String - } - - // Fixed non-changing properties about your activity go here! - var name: String -} - -struct WaterWidgetLiveActivity: Widget { - var body: some WidgetConfiguration { - ActivityConfiguration(for: WaterWidgetAttributes.self) { context in - // Lock screen/banner UI goes here - VStack { - Text("Hello \(context.state.emoji)") - } - .activityBackgroundTint(Color.cyan) - .activitySystemActionForegroundColor(Color.black) - - } dynamicIsland: { context in - DynamicIsland { - // Expanded UI goes here. Compose the expanded UI through - // various regions, like leading/trailing/center/bottom - DynamicIslandExpandedRegion(.leading) { - Text("Leading") - } - DynamicIslandExpandedRegion(.trailing) { - Text("Trailing") - } - DynamicIslandExpandedRegion(.bottom) { - Text("Bottom \(context.state.emoji)") - // more content - } - } compactLeading: { - Text("L") - } compactTrailing: { - Text("T \(context.state.emoji)") - } minimal: { - Text(context.state.emoji) - } - .widgetURL(URL(string: "http://www.apple.com")) - .keylineTint(Color.red) - } - } -} - -extension WaterWidgetAttributes { - fileprivate static var preview: WaterWidgetAttributes { - WaterWidgetAttributes(name: "World") - } -} - -extension WaterWidgetAttributes.ContentState { - fileprivate static var smiley: WaterWidgetAttributes.ContentState { - WaterWidgetAttributes.ContentState(emoji: "😀") - } - - fileprivate static var starEyes: WaterWidgetAttributes.ContentState { - WaterWidgetAttributes.ContentState(emoji: "🤩") - } -} - -#Preview("Notification", as: .content, using: WaterWidgetAttributes.preview) { - WaterWidgetLiveActivity() -} contentStates: { - WaterWidgetAttributes.ContentState.smiley - WaterWidgetAttributes.ContentState.starEyes -} diff --git a/ios/WaterWidgetExtension.entitlements b/ios/WaterWidgetExtension.entitlements deleted file mode 100644 index d47d8ba..0000000 --- a/ios/WaterWidgetExtension.entitlements +++ /dev/null @@ -1,10 +0,0 @@ - - - - - com.apple.security.application-groups - - group.com.anonymous.digitalpilates - - - diff --git a/ios/digitalpilates/AppGroupUserDefaults.m b/ios/digitalpilates/AppGroupUserDefaults.m deleted file mode 100644 index 685c2a5..0000000 --- a/ios/digitalpilates/AppGroupUserDefaults.m +++ /dev/null @@ -1,50 +0,0 @@ -// -// AppGroupUserDefaults.m -// digitalpilates -// -// Objective-C bridge file for AppGroupUserDefaults Swift module -// - -#import - -@interface RCT_EXTERN_MODULE(AppGroupUserDefaults, NSObject) - -RCT_EXTERN_METHOD(setString:(NSString *)groupId - key:(NSString *)key - value:(NSString *)value - resolver:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) - -RCT_EXTERN_METHOD(getString:(NSString *)groupId - key:(NSString *)key - resolver:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) - -RCT_EXTERN_METHOD(setNumber:(NSString *)groupId - key:(NSString *)key - value:(NSNumber *)value - resolver:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) - -RCT_EXTERN_METHOD(getNumber:(NSString *)groupId - key:(NSString *)key - resolver:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) - -RCT_EXTERN_METHOD(setArray:(NSString *)groupId - key:(NSString *)key - value:(NSArray *)value - resolver:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) - -RCT_EXTERN_METHOD(getArray:(NSString *)groupId - key:(NSString *)key - resolver:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) - -RCT_EXTERN_METHOD(removeKey:(NSString *)groupId - key:(NSString *)key - resolver:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) - -@end \ No newline at end of file diff --git a/ios/digitalpilates/AppGroupUserDefaults.swift b/ios/digitalpilates/AppGroupUserDefaults.swift deleted file mode 100644 index cb7f2e8..0000000 --- a/ios/digitalpilates/AppGroupUserDefaults.swift +++ /dev/null @@ -1,146 +0,0 @@ -// -// AppGroupUserDefaults.swift -// digitalpilates -// -// Native module for accessing App Group UserDefaults -// Allows sharing data between main app and widget -// - -import Foundation -import React - -@objc(AppGroupUserDefaults) -class AppGroupUserDefaults: NSObject, RCTBridgeModule { - - static func moduleName() -> String! { - return "AppGroupUserDefaults" - } - - static func requiresMainQueueSetup() -> Bool { - return false - } - - // MARK: - String Methods - - @objc - func setString(_ groupId: String, key: String, value: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) { - DispatchQueue.global(qos: .background).async { - guard let userDefaults = UserDefaults(suiteName: groupId) else { - rejecter("ERROR", "Failed to create UserDefaults with suite name: \(groupId)", nil) - return - } - - userDefaults.set(value, forKey: key) - userDefaults.synchronize() - - DispatchQueue.main.async { - resolver(nil) - } - } - } - - @objc - func getString(_ groupId: String, key: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) { - DispatchQueue.global(qos: .background).async { - guard let userDefaults = UserDefaults(suiteName: groupId) else { - rejecter("ERROR", "Failed to create UserDefaults with suite name: \(groupId)", nil) - return - } - - let value = userDefaults.string(forKey: key) - - DispatchQueue.main.async { - resolver(value) - } - } - } - - // MARK: - Number Methods - - @objc - func setNumber(_ groupId: String, key: String, value: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) { - DispatchQueue.global(qos: .background).async { - guard let userDefaults = UserDefaults(suiteName: groupId) else { - rejecter("ERROR", "Failed to create UserDefaults with suite name: \(groupId)", nil) - return - } - - userDefaults.set(value, forKey: key) - userDefaults.synchronize() - - DispatchQueue.main.async { - resolver(nil) - } - } - } - - @objc - func getNumber(_ groupId: String, key: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) { - DispatchQueue.global(qos: .background).async { - guard let userDefaults = UserDefaults(suiteName: groupId) else { - rejecter("ERROR", "Failed to create UserDefaults with suite name: \(groupId)", nil) - return - } - - let value = userDefaults.object(forKey: key) as? NSNumber ?? NSNumber(value: 0) - - DispatchQueue.main.async { - resolver(value) - } - } - } - - // MARK: - Array Methods - - @objc - func setArray(_ groupId: String, key: String, value: [Any], resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) { - DispatchQueue.global(qos: .background).async { - guard let userDefaults = UserDefaults(suiteName: groupId) else { - rejecter("ERROR", "Failed to create UserDefaults with suite name: \(groupId)", nil) - return - } - - userDefaults.set(value, forKey: key) - userDefaults.synchronize() - - DispatchQueue.main.async { - resolver(nil) - } - } - } - - @objc - func getArray(_ groupId: String, key: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) { - DispatchQueue.global(qos: .background).async { - guard let userDefaults = UserDefaults(suiteName: groupId) else { - rejecter("ERROR", "Failed to create UserDefaults with suite name: \(groupId)", nil) - return - } - - let value = userDefaults.array(forKey: key) - - DispatchQueue.main.async { - resolver(value) - } - } - } - - // MARK: - Remove Key Method - - @objc - func removeKey(_ groupId: String, key: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) { - DispatchQueue.global(qos: .background).async { - guard let userDefaults = UserDefaults(suiteName: groupId) else { - rejecter("ERROR", "Failed to create UserDefaults with suite name: \(groupId)", nil) - return - } - - userDefaults.removeObject(forKey: key) - userDefaults.synchronize() - - DispatchQueue.main.async { - resolver(nil) - } - } - } -} \ No newline at end of file diff --git a/ios/digitalpilates/Images.xcassets/AppIcon.appiconset/Contents.json b/ios/digitalpilates/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 744ad79..0000000 --- a/ios/digitalpilates/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "images" : [ - { - "filename" : "icon-1756312748268.jpg", - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/ios/digitalpilates/Images.xcassets/AppIcon.appiconset/icon-1756312748268.jpg b/ios/digitalpilates/Images.xcassets/AppIcon.appiconset/icon-1756312748268.jpg deleted file mode 100644 index a29eefe..0000000 Binary files a/ios/digitalpilates/Images.xcassets/AppIcon.appiconset/icon-1756312748268.jpg and /dev/null differ diff --git a/ios/digitalpilates/Images.xcassets/AppIcon.appiconset/icon-1756312748268.png b/ios/digitalpilates/Images.xcassets/AppIcon.appiconset/icon-1756312748268.png deleted file mode 100644 index f7799d6..0000000 Binary files a/ios/digitalpilates/Images.xcassets/AppIcon.appiconset/icon-1756312748268.png and /dev/null differ diff --git a/ios/digitalpilates/Images.xcassets/Contents.json b/ios/digitalpilates/Images.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/ios/digitalpilates/Images.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/ios/digitalpilates/Images.xcassets/SplashScreenLogo.imageset/Contents.json b/ios/digitalpilates/Images.xcassets/SplashScreenLogo.imageset/Contents.json deleted file mode 100644 index 495cb1c..0000000 --- a/ios/digitalpilates/Images.xcassets/SplashScreenLogo.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "icon-1756312748268.jpg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "icon-1756312748268 1.jpg", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "icon-1756312748268 2.jpg", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/ios/digitalpilates/Images.xcassets/SplashScreenLogo.imageset/icon-1756312748268 1.jpg b/ios/digitalpilates/Images.xcassets/SplashScreenLogo.imageset/icon-1756312748268 1.jpg deleted file mode 100644 index a29eefe..0000000 Binary files a/ios/digitalpilates/Images.xcassets/SplashScreenLogo.imageset/icon-1756312748268 1.jpg and /dev/null differ diff --git a/ios/digitalpilates/Images.xcassets/SplashScreenLogo.imageset/icon-1756312748268 2.jpg b/ios/digitalpilates/Images.xcassets/SplashScreenLogo.imageset/icon-1756312748268 2.jpg deleted file mode 100644 index a29eefe..0000000 Binary files a/ios/digitalpilates/Images.xcassets/SplashScreenLogo.imageset/icon-1756312748268 2.jpg and /dev/null differ diff --git a/ios/digitalpilates/Images.xcassets/SplashScreenLogo.imageset/icon-1756312748268.jpg b/ios/digitalpilates/Images.xcassets/SplashScreenLogo.imageset/icon-1756312748268.jpg deleted file mode 100644 index a29eefe..0000000 Binary files a/ios/digitalpilates/Images.xcassets/SplashScreenLogo.imageset/icon-1756312748268.jpg and /dev/null differ diff --git a/ios/digitalpilates/Images.xcassets/logo.imageset/Contents.json b/ios/digitalpilates/Images.xcassets/logo.imageset/Contents.json deleted file mode 100644 index 495cb1c..0000000 --- a/ios/digitalpilates/Images.xcassets/logo.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "icon-1756312748268.jpg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "icon-1756312748268 1.jpg", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "icon-1756312748268 2.jpg", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/ios/digitalpilates/Images.xcassets/logo.imageset/icon-1756312748268 1.jpg b/ios/digitalpilates/Images.xcassets/logo.imageset/icon-1756312748268 1.jpg deleted file mode 100644 index a29eefe..0000000 Binary files a/ios/digitalpilates/Images.xcassets/logo.imageset/icon-1756312748268 1.jpg and /dev/null differ diff --git a/ios/digitalpilates/Images.xcassets/logo.imageset/icon-1756312748268 2.jpg b/ios/digitalpilates/Images.xcassets/logo.imageset/icon-1756312748268 2.jpg deleted file mode 100644 index a29eefe..0000000 Binary files a/ios/digitalpilates/Images.xcassets/logo.imageset/icon-1756312748268 2.jpg and /dev/null differ diff --git a/ios/digitalpilates/Images.xcassets/logo.imageset/icon-1756312748268.jpg b/ios/digitalpilates/Images.xcassets/logo.imageset/icon-1756312748268.jpg deleted file mode 100644 index a29eefe..0000000 Binary files a/ios/digitalpilates/Images.xcassets/logo.imageset/icon-1756312748268.jpg and /dev/null differ diff --git a/ios/digitalpilates/Info.plist b/ios/digitalpilates/Info.plist deleted file mode 100644 index 349d87e..0000000 --- a/ios/digitalpilates/Info.plist +++ /dev/null @@ -1,103 +0,0 @@ - - - - - BGTaskSchedulerPermittedIdentifiers - - com.anonymous.digitalpilates.task - com.expo.modules.backgroundtask.processing - - CADisableMinimumFrameDurationOnPhone - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Out Live - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0.12 - CFBundleSignature - ???? - CFBundleURLTypes - - - CFBundleURLSchemes - - digitalpilates - com.anonymous.digitalpilates - - - - CFBundleVersion - 1 - ITSAppUsesNonExemptEncryption - - LSMinimumSystemVersion - 12.0 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - NSAllowsLocalNetworking - - - NSCameraUsageDescription - 应用需要使用相机以实现相关功能 - NSHealthShareUsageDescription - 应用需要访问您的健康数据(步数、能量消耗、心率变异性等)以展示运动统计和压力分析。 - NSHealthUpdateUsageDescription - 应用需要更新您的健康数据(体重信息)以记录您的健身进度。 - NSMicrophoneUsageDescription - 应用需要使用麦克风进行语音识别,将您的语音转换为文字记录饮食信息。 - NSPhotoLibraryAddUsageDescription - 应用需要写入相册以保存拍摄的体态照片(可选)。 - NSPhotoLibraryUsageDescription - 应用需要访问相册以选择您的体态照片用于AI测评。 - NSSpeechRecognitionUsageDescription - 应用需要使用语音识别功能来转换您的语音为文字,帮助您快速记录饮食信息。 - NSUserActivityTypes - - $(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route - - NSUserNotificationsUsageDescription - 应用需要发送通知以提醒您喝水和站立活动。 - RCTNewArchEnabled - - UIBackgroundModes - - processing - fetch - remote-notification - - UILaunchStoryboardName - SplashScreen - UIRequiredDeviceCapabilities - - arm64 - - UIRequiresFullScreen - - UIStatusBarStyle - UIStatusBarStyleDefault - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - - UIUserInterfaceStyle - Light - UIViewControllerBasedStatusBarAppearance - - - diff --git a/ios/digitalpilates/WaterRecordManager.m b/ios/digitalpilates/WaterRecordManager.m deleted file mode 100644 index 9bbd5f1..0000000 --- a/ios/digitalpilates/WaterRecordManager.m +++ /dev/null @@ -1,16 +0,0 @@ -// -// WaterRecordManager.m -// digitalpilates -// -// Objective-C bridge file for WaterRecordManager Swift module -// - -#import - -@interface RCT_EXTERN_MODULE(WaterRecordManager, NSObject) - -RCT_EXTERN_METHOD(addWaterRecord:(int)amount - resolver:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) - -@end \ No newline at end of file diff --git a/ios/digitalpilates/WaterRecordManager.swift b/ios/digitalpilates/WaterRecordManager.swift deleted file mode 100644 index b29bef3..0000000 --- a/ios/digitalpilates/WaterRecordManager.swift +++ /dev/null @@ -1,81 +0,0 @@ -// -// WaterRecordManager.swift -// digitalpilates -// -// Native module for managing water records through React Native bridge -// - -import Foundation -import React -import WidgetKit - -@objc(WaterRecordManager) -class WaterRecordManager: NSObject, RCTBridgeModule { - - static func moduleName() -> String! { - return "WaterRecordManager" - } - - static func requiresMainQueueSetup() -> Bool { - return false - } - - @objc - func addWaterRecord(_ amount: Int, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) { - - // 更新 App Group UserDefaults(用于 Widget 显示) - guard let sharedDefaults = UserDefaults(suiteName: "group.com.anonymous.digitalpilates") else { - rejecter("USERDEFAULTS_ERROR", "Failed to access App Group UserDefaults", nil) - return - } - - let currentIntake = sharedDefaults.object(forKey: "widget_current_water_intake") as? Int ?? 0 - let newIntake = currentIntake + amount - sharedDefaults.set(newIntake, forKey: "widget_current_water_intake") - - // 创建 ISO8601 格式的日期字符串 - let formatter = ISO8601DateFormatter() - let isoString = formatter.string(from: Date()) - sharedDefaults.set(isoString, forKey: "widget_last_sync_time") - sharedDefaults.synchronize() - - print("Water record added via bridge: +\(amount)ml, New total: \(newIntake)ml") - - // 通过 React Native bridge 调用 TypeScript 代码来创建记录 - DispatchQueue.main.async { [weak self] in - guard let bridge = self?.bridge else { - rejecter("BRIDGE_ERROR", "React Native bridge is not available", nil) - return - } - - // 调用 TypeScript 中的 Redux action 来创建喝水记录 - let eventData = [ - "amount": amount, - "recordedAt": isoString, - "source": "auto" // 标记为来自 Widget/自动添加 - ] - - // 发送事件给 TypeScript 代码 - self?.sendEvent(withName: "WaterRecordAdded", body: eventData) - - // 刷新 Widget - if #available(iOS 14.0, *) { - WidgetCenter.shared.reloadTimelines(ofKind: "WaterWidget") - } - - resolver(["success": true, "amount": amount, "newTotal": newIntake]) - } - } - - // MARK: - Event Emitter - - override func supportedEvents() -> [String]! { - return ["WaterRecordAdded"] - } - - private func sendEvent(withName name: String, body: Any) { - if let bridge = self.bridge { - bridge.eventDispatcher().sendAppEvent(withName: name, body: body) - } - } -} \ No newline at end of file diff --git a/ios/digitalpilates/WidgetManager.m b/ios/digitalpilates/WidgetManager.m deleted file mode 100644 index 7057a94..0000000 --- a/ios/digitalpilates/WidgetManager.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// WidgetManager.m -// digitalpilates -// -// Objective-C bridge file for WidgetManager Swift module -// - -#import - -@interface RCT_EXTERN_MODULE(WidgetManager, NSObject) - -RCT_EXTERN_METHOD(reloadTimelines:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) - -RCT_EXTERN_METHOD(reloadAllTimelines:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) - -@end \ No newline at end of file diff --git a/ios/digitalpilates/WidgetManager.swift b/ios/digitalpilates/WidgetManager.swift deleted file mode 100644 index e78d7de..0000000 --- a/ios/digitalpilates/WidgetManager.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// WidgetManager.swift -// digitalpilates -// -// Native module for managing widget refresh -// - -import Foundation -import React -import WidgetKit - -@objc(WidgetManager) -class WidgetManager: NSObject, RCTBridgeModule { - - static func moduleName() -> String! { - return "WidgetManager" - } - - static func requiresMainQueueSetup() -> Bool { - return false - } - - @objc - func reloadTimelines(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) { - DispatchQueue.main.async { - if #available(iOS 14.0, *) { - WidgetCenter.shared.reloadTimelines(ofKind: "WaterWidget") - resolver(nil) - } else { - rejecter("UNSUPPORTED", "WidgetKit is only available on iOS 14.0 and later", nil) - } - } - } - - @objc - func reloadAllTimelines(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) { - DispatchQueue.main.async { - if #available(iOS 14.0, *) { - WidgetCenter.shared.reloadAllTimelines() - resolver(nil) - } else { - rejecter("UNSUPPORTED", "WidgetKit is only available on iOS 14.0 and later", nil) - } - } - } -} \ No newline at end of file diff --git a/ios/digitalpilates/digitalpilates.entitlements b/ios/digitalpilates/digitalpilates.entitlements deleted file mode 100644 index 75ceb06..0000000 --- a/ios/digitalpilates/digitalpilates.entitlements +++ /dev/null @@ -1,20 +0,0 @@ - - - - - aps-environment - development - com.apple.developer.applesignin - - Default - - com.apple.developer.healthkit - - com.apple.developer.healthkit.background-delivery - - com.apple.security.application-groups - - group.com.anonymous.digitalpilates - - - diff --git a/package-lock.json b/package-lock.json index d06793a..fa2b586 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "digital-pilates", "version": "1.0.2", "dependencies": { + "@expo/metro-runtime": "~6.1.2", "@expo/ui": "~0.2.0-beta.3", "@expo/vector-icons": "^15.0.2", "@react-native-async-storage/async-storage": "^2.2.0", @@ -53,7 +54,6 @@ "react-native": "0.81.4", "react-native-device-info": "^14.0.4", "react-native-gesture-handler": "~2.28.0", - "react-native-health": "^1.19.0", "react-native-image-viewing": "^0.2.2", "react-native-markdown-display": "^7.0.2", "react-native-modal-datetime-picker": "^18.0.0", @@ -68,6 +68,7 @@ "react-native-web": "^0.21.1", "react-native-webview": "13.15.0", "react-native-wheel-picker-expo": "^0.5.4", + "react-native-worklets": "0.5.1", "react-redux": "^9.2.0" }, "devDependencies": { @@ -1412,7 +1413,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "license": "MIT", - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -12331,176 +12331,6 @@ "react-native": "*" } }, - "node_modules/react-native-health": { - "version": "1.19.0", - "resolved": "https://mirrors.tencent.com/npm/react-native-health/-/react-native-health-1.19.0.tgz", - "integrity": "sha512-IeF/YYWDKBkx3R89uk/zdF3Sql9Jj+okZBXTAC62FHE+Ef3CMN+ArL6D1SzFk/dc0qK+Q7mnZrmFDbTsftszxw==", - "license": "MIT", - "dependencies": { - "@expo/config-plugins": "^7.2.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "react-native": ">=0.67.3" - } - }, - "node_modules/react-native-health/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://mirrors.tencent.com/npm/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/react-native-health/node_modules/@expo/config-plugins": { - "version": "7.9.2", - "resolved": "https://mirrors.tencent.com/npm/@expo/config-plugins/-/config-plugins-7.9.2.tgz", - "integrity": "sha512-sRU/OAp7kJxrCUiCTUZqvPMKPdiN1oTmNfnbkG4oPdfWQTpid3jyCH7ZxJEN5SI6jrY/ZsK5B/JPgjDUhuWLBQ==", - "license": "MIT", - "dependencies": { - "@expo/config-types": "^50.0.0-alpha.1", - "@expo/fingerprint": "^0.6.0", - "@expo/json-file": "~8.3.0", - "@expo/plist": "^0.1.0", - "@expo/sdk-runtime-versions": "^1.0.0", - "@react-native/normalize-color": "^2.0.0", - "chalk": "^4.1.2", - "debug": "^4.3.1", - "find-up": "~5.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "slash": "^3.0.0", - "slugify": "^1.6.6", - "xcode": "^3.0.1", - "xml2js": "0.6.0" - } - }, - "node_modules/react-native-health/node_modules/@expo/config-types": { - "version": "50.0.1", - "resolved": "https://mirrors.tencent.com/npm/@expo/config-types/-/config-types-50.0.1.tgz", - "integrity": "sha512-EZHMgzkWRB9SMHO1e9m8s+OMahf92XYTnsCFjxhSfcDrcEoSdFPyJWDJVloHZPMGhxns7Fi2+A+bEVN/hD4NKA==", - "license": "MIT" - }, - "node_modules/react-native-health/node_modules/@expo/fingerprint": { - "version": "0.6.1", - "resolved": "https://mirrors.tencent.com/npm/@expo/fingerprint/-/fingerprint-0.6.1.tgz", - "integrity": "sha512-ggLn6unI6qowlA1FihdQwPpLn16VJulYkvYAEL50gaqVahfNEglRQMSH2giZzjD0d6xq2/EQuUdFyHaJfyJwOQ==", - "license": "MIT", - "dependencies": { - "@expo/spawn-async": "^1.5.0", - "chalk": "^4.1.2", - "debug": "^4.3.4", - "find-up": "^5.0.0", - "minimatch": "^3.0.4", - "p-limit": "^3.1.0", - "resolve-from": "^5.0.0" - }, - "bin": { - "fingerprint": "bin/cli.js" - } - }, - "node_modules/react-native-health/node_modules/@expo/json-file": { - "version": "8.3.3", - "resolved": "https://mirrors.tencent.com/npm/@expo/json-file/-/json-file-8.3.3.tgz", - "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "~7.10.4", - "json5": "^2.2.2", - "write-file-atomic": "^2.3.0" - } - }, - "node_modules/react-native-health/node_modules/@expo/plist": { - "version": "0.1.3", - "resolved": "https://mirrors.tencent.com/npm/@expo/plist/-/plist-0.1.3.tgz", - "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==", - "license": "MIT", - "dependencies": { - "@xmldom/xmldom": "~0.7.7", - "base64-js": "^1.2.3", - "xmlbuilder": "^14.0.0" - } - }, - "node_modules/react-native-health/node_modules/@xmldom/xmldom": { - "version": "0.7.13", - "resolved": "https://mirrors.tencent.com/npm/@xmldom/xmldom/-/xmldom-0.7.13.tgz", - "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", - "deprecated": "this version is no longer supported, please update to at least 0.8.*", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/react-native-health/node_modules/getenv": { - "version": "1.0.0", - "resolved": "https://mirrors.tencent.com/npm/getenv/-/getenv-1.0.0.tgz", - "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/react-native-health/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://mirrors.tencent.com/npm/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/react-native-health/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://mirrors.tencent.com/npm/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-native-health/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://mirrors.tencent.com/npm/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/react-native-health/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://mirrors.tencent.com/npm/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/react-native-health/node_modules/xmlbuilder": { - "version": "14.0.0", - "resolved": "https://mirrors.tencent.com/npm/xmlbuilder/-/xmlbuilder-14.0.0.tgz", - "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", - "license": "MIT", - "engines": { - "node": ">=8.0" - } - }, "node_modules/react-native-image-viewing": { "version": "0.2.2", "resolved": "https://mirrors.tencent.com/npm/react-native-image-viewing/-/react-native-image-viewing-0.2.2.tgz", @@ -12746,7 +12576,6 @@ "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.5.1.tgz", "integrity": "sha512-lJG6Uk9YuojjEX/tQrCbcbmpdLCSFxDK1rJlkDhgqkVi1KZzG7cdcBFQRqyNOOzR9Y0CXNuldmtWTGOyM0k0+w==", "license": "MIT", - "peer": true, "dependencies": { "@babel/plugin-transform-arrow-functions": "^7.0.0-0", "@babel/plugin-transform-class-properties": "^7.0.0-0", @@ -12771,7 +12600,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", - "peer": true, "bin": { "semver": "bin/semver.js" }, diff --git a/package.json b/package.json index aab2184..56b7d6c 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "lint": "expo lint" }, "dependencies": { + "@expo/metro-runtime": "~6.1.2", "@expo/ui": "~0.2.0-beta.3", "@expo/vector-icons": "^15.0.2", "@react-native-async-storage/async-storage": "^2.2.0", @@ -57,7 +58,6 @@ "react-native": "0.81.4", "react-native-device-info": "^14.0.4", "react-native-gesture-handler": "~2.28.0", - "react-native-health": "^1.19.0", "react-native-image-viewing": "^0.2.2", "react-native-markdown-display": "^7.0.2", "react-native-modal-datetime-picker": "^18.0.0", @@ -72,6 +72,7 @@ "react-native-web": "^0.21.1", "react-native-webview": "13.15.0", "react-native-wheel-picker-expo": "^0.5.4", + "react-native-worklets": "0.5.1", "react-redux": "^9.2.0" }, "devDependencies": { @@ -82,4 +83,4 @@ "typescript": "~5.9.2" }, "private": true -} +} \ No newline at end of file diff --git a/utils/health.ts b/utils/health.ts index 9d632ed..ab7feca 100644 --- a/utils/health.ts +++ b/utils/health.ts @@ -1,6 +1,4 @@ import dayjs from 'dayjs'; -import type { HealthActivitySummary, HealthKitPermissions } from 'react-native-health'; -import AppleHealthKit from 'react-native-health'; type HealthDataOptions = { startDate: string; @@ -8,30 +6,30 @@ type HealthDataOptions = { }; -const PERMISSIONS: HealthKitPermissions = { - permissions: { - read: [ - AppleHealthKit.Constants.Permissions.StepCount, - AppleHealthKit.Constants.Permissions.ActiveEnergyBurned, - AppleHealthKit.Constants.Permissions.BasalEnergyBurned, - AppleHealthKit.Constants.Permissions.SleepAnalysis, - AppleHealthKit.Constants.Permissions.HeartRateVariability, - AppleHealthKit.Constants.Permissions.ActivitySummary, - AppleHealthKit.Constants.Permissions.OxygenSaturation, - AppleHealthKit.Constants.Permissions.HeartRate, - AppleHealthKit.Constants.Permissions.Water, - // 添加 Apple Exercise Time 和 Apple Stand Time 权限 - AppleHealthKit.Constants.Permissions.AppleExerciseTime, - AppleHealthKit.Constants.Permissions.AppleStandTime, - ], - write: [ - // 支持体重写入 - AppleHealthKit.Constants.Permissions.Weight, - // 支持饮水量写入 - AppleHealthKit.Constants.Permissions.Water, - ], - }, -}; +// const PERMISSIONS: HealthKitPermissions = { +// permissions: { +// read: [ +// AppleHealthKit.Constants.Permissions.StepCount, +// AppleHealthKit.Constants.Permissions.ActiveEnergyBurned, +// AppleHealthKit.Constants.Permissions.BasalEnergyBurned, +// AppleHealthKit.Constants.Permissions.SleepAnalysis, +// AppleHealthKit.Constants.Permissions.HeartRateVariability, +// AppleHealthKit.Constants.Permissions.ActivitySummary, +// AppleHealthKit.Constants.Permissions.OxygenSaturation, +// AppleHealthKit.Constants.Permissions.HeartRate, +// AppleHealthKit.Constants.Permissions.Water, +// // 添加 Apple Exercise Time 和 Apple Stand Time 权限 +// AppleHealthKit.Constants.Permissions.AppleExerciseTime, +// AppleHealthKit.Constants.Permissions.AppleStandTime, +// ], +// write: [ +// // 支持体重写入 +// AppleHealthKit.Constants.Permissions.Weight, +// // 支持饮水量写入 +// AppleHealthKit.Constants.Permissions.Water, +// ], +// }, +// }; export type HourlyStepData = { hour: number; // 0-23 diff --git a/utils/healthKit.ts b/utils/healthKit.ts index d6e2197..6b2dbbd 100644 --- a/utils/healthKit.ts +++ b/utils/healthKit.ts @@ -3,7 +3,7 @@ * React Native TypeScript bindings for iOS HealthKit access */ -import { NativeModules } from 'react-native'; +import { requireNativeModule } from 'expo-modules-core'; export interface HealthKitPermissions { [key: string]: 'notDetermined' | 'denied' | 'authorized' | 'unknown'; @@ -50,6 +50,12 @@ export interface HealthKitManagerInterface { */ requestAuthorization(): Promise; + /** + * Get current authorization status for HealthKit data types + * This checks the current permission status without prompting the user + */ + getAuthorizationStatus(): Promise; + /** * Get sleep analysis data from HealthKit * @param options Query options including date range and limit @@ -57,11 +63,8 @@ export interface HealthKitManagerInterface { getSleepData(options?: SleepDataOptions): Promise; } -console.log('NativeModules', NativeModules); - - // Native module interface -const HealthKitManager: HealthKitManagerInterface = NativeModules.HealthKitManager; +const HealthKitManager: HealthKitManagerInterface = requireNativeModule('HealthKitManager'); export default HealthKitManager; diff --git a/utils/sleepHealthKit.ts b/utils/sleepHealthKit.ts index b18c393..4794f3a 100644 --- a/utils/sleepHealthKit.ts +++ b/utils/sleepHealthKit.ts @@ -374,7 +374,9 @@ export const fetchCompleteSleepData = async (date: Date): Promise