├── .watchmanconfig ├── example ├── .watchmanconfig ├── jest.config.js ├── .bundle │ └── config ├── app.json ├── ios │ ├── File.swift │ ├── ShakeExample │ │ ├── Images.xcassets │ │ │ ├── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ ├── AppDelegate.h │ │ ├── main.m │ │ ├── AppDelegate.mm │ │ ├── PrivacyInfo.xcprivacy │ │ ├── Info.plist │ │ └── LaunchScreen.storyboard │ ├── ShakeExample-Bridging-Header.h │ ├── ShakeExample.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── .xcode.env │ ├── ShakeExampleTests │ │ ├── Info.plist │ │ └── ShakeExampleTests.m │ ├── Podfile │ ├── ShakeExample.xcodeproj │ │ ├── xcshareddata │ │ │ └── xcschemes │ │ │ │ └── ShakeExample.xcscheme │ │ └── project.pbxproj │ └── Podfile.lock ├── android │ ├── app │ │ ├── debug.keystore │ │ ├── src │ │ │ ├── main │ │ │ │ ├── res │ │ │ │ │ ├── values │ │ │ │ │ │ ├── strings.xml │ │ │ │ │ │ └── styles.xml │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ │ └── drawable │ │ │ │ │ │ └── rn_edit_text_material.xml │ │ │ │ ├── java │ │ │ │ │ └── shake │ │ │ │ │ │ └── example │ │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ │ └── MainApplication.kt │ │ │ │ └── AndroidManifest.xml │ │ │ └── debug │ │ │ │ └── AndroidManifest.xml │ │ ├── proguard-rules.pro │ │ └── build.gradle │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── settings.gradle │ ├── build.gradle │ ├── gradle.properties │ ├── gradlew.bat │ └── gradlew ├── index.js ├── Gemfile ├── babel.config.js ├── react-native.config.js ├── metro.config.js ├── src │ └── App.tsx ├── package.json ├── Gemfile.lock └── README.md ├── src ├── __tests__ │ └── index.test.tsx ├── NativeShake.ts └── index.tsx ├── .npmignore ├── .gitattributes ├── rnshake.png ├── tsconfig.build.json ├── babel.config.js ├── .yarnrc.yml ├── android ├── src │ ├── main │ │ ├── AndroidManifestNew.xml │ │ ├── AndroidManifest.xml │ │ └── java │ │ │ └── com │ │ │ └── shake │ │ │ ├── ShakePackage.kt │ │ │ ├── ShakeModule.kt │ │ │ └── CustomShakeDetector.kt │ ├── newarch │ │ └── ShakeSpec.kt │ └── oldarch │ │ └── ShakeSpec.kt ├── gradle.properties └── build.gradle ├── react-native.config.js ├── lefthook.yml ├── .editorconfig ├── ios ├── RNShakeImpl.h ├── RNShake.h ├── RNShake.mm └── RNShakeImpl.mm ├── .github ├── workflows │ ├── auto-publish.yml │ └── ci.yml └── actions │ └── setup │ └── action.yml ├── tsconfig.json ├── turbo.json ├── LICENSE ├── eslint.config.mjs ├── .gitignore ├── react-native-shake.podspec ├── README.md ├── package.json ├── CODE_OF_CONDUCT.md └── CONTRIBUTING.md /.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /example/.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/__tests__/index.test.tsx: -------------------------------------------------------------------------------- 1 | it.todo('write a test'); 2 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | example/ 2 | .yarn/ 3 | .github/ 4 | yarn.lock 5 | -------------------------------------------------------------------------------- /example/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'react-native', 3 | }; 4 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | # specific for windows script files 3 | *.bat text eol=crlf -------------------------------------------------------------------------------- /example/.bundle/config: -------------------------------------------------------------------------------- 1 | BUNDLE_PATH: "vendor/bundle" 2 | BUNDLE_FORCE_RUBY_PLATFORM: 1 3 | -------------------------------------------------------------------------------- /rnshake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Doko-Demo-Doa/react-native-shake/HEAD/rnshake.png -------------------------------------------------------------------------------- /example/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ShakeExample", 3 | "displayName": "ShakeExample" 4 | } 5 | -------------------------------------------------------------------------------- /tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig", 3 | "exclude": ["example", "lib"] 4 | } 5 | -------------------------------------------------------------------------------- /example/ios/File.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // ShakeExample 4 | // 5 | 6 | import Foundation 7 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['module:react-native-builder-bob/babel-preset'], 3 | }; 4 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nmHoistingLimits: workspaces 2 | 3 | nodeLinker: node-modules 4 | 5 | yarnPath: .yarn/releases/yarn-4.9.2.cjs 6 | -------------------------------------------------------------------------------- /android/src/main/AndroidManifestNew.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /example/android/app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Doko-Demo-Doa/react-native-shake/HEAD/example/android/app/debug.keystore -------------------------------------------------------------------------------- /example/android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | ShakeExample 3 | 4 | -------------------------------------------------------------------------------- /example/ios/ShakeExample/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /example/ios/ShakeExample-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | -------------------------------------------------------------------------------- /example/ios/ShakeExample/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : RCTAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /example/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Doko-Demo-Doa/react-native-shake/HEAD/example/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | Shake_kotlinVersion=1.7.0 2 | Shake_minSdkVersion=21 3 | Shake_targetSdkVersion=31 4 | Shake_compileSdkVersion=31 5 | Shake_ndkversion=21.4.7075529 6 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Doko-Demo-Doa/react-native-shake/HEAD/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Doko-Demo-Doa/react-native-shake/HEAD/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Doko-Demo-Doa/react-native-shake/HEAD/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Doko-Demo-Doa/react-native-shake/HEAD/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Doko-Demo-Doa/react-native-shake/HEAD/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Doko-Demo-Doa/react-native-shake/HEAD/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Doko-Demo-Doa/react-native-shake/HEAD/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Doko-Demo-Doa/react-native-shake/HEAD/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Doko-Demo-Doa/react-native-shake/HEAD/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Doko-Demo-Doa/react-native-shake/HEAD/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /example/index.js: -------------------------------------------------------------------------------- 1 | import { AppRegistry } from 'react-native'; 2 | import App from './src/App'; 3 | import { name as appName } from './app.json'; 4 | 5 | AppRegistry.registerComponent(appName, () => App); 6 | -------------------------------------------------------------------------------- /android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /android/src/newarch/ShakeSpec.kt: -------------------------------------------------------------------------------- 1 | package com.shake 2 | 3 | import com.facebook.react.bridge.ReactApplicationContext 4 | 5 | abstract class ShakeSpec internal constructor(context: ReactApplicationContext) : 6 | NativeShakeSpec(context) { 7 | } 8 | -------------------------------------------------------------------------------- /example/ios/ShakeExample/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char *argv[]) 6 | { 7 | @autoreleasepool { 8 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /react-native.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @type {import('@react-native-community/cli-types').UserDependencyConfig} 3 | */ 4 | module.exports = { 5 | dependency: { 6 | platforms: { 7 | android: { 8 | cmakeListsPath: 'generated/jni/CMakeLists.txt', 9 | }, 10 | }, 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /example/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /example/ios/ShakeExample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /example/ios/ShakeExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /lefthook.yml: -------------------------------------------------------------------------------- 1 | pre-commit: 2 | parallel: true 3 | commands: 4 | lint: 5 | glob: "*.{js,ts,jsx,tsx}" 6 | run: npx eslint {staged_files} 7 | types: 8 | glob: "*.{js,ts, jsx, tsx}" 9 | run: npx tsc 10 | commit-msg: 11 | parallel: true 12 | commands: 13 | commitlint: 14 | run: npx commitlint --edit 15 | -------------------------------------------------------------------------------- /example/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version 4 | ruby ">= 2.6.10" 5 | 6 | # Exclude problematic versions of cocoapods and activesupport that causes build failures. 7 | gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' 8 | gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' 9 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | [*] 8 | 9 | indent_style = space 10 | indent_size = 2 11 | 12 | end_of_line = lf 13 | charset = utf-8 14 | trim_trailing_whitespace = true 15 | insert_final_newline = true 16 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /example/babel.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const { getConfig } = require('react-native-builder-bob/babel-config'); 3 | const pkg = require('../package.json'); 4 | 5 | const root = path.resolve(__dirname, '..'); 6 | 7 | module.exports = getConfig( 8 | { 9 | presets: ['module:@react-native/babel-preset'], 10 | }, 11 | { root, pkg } 12 | ); 13 | -------------------------------------------------------------------------------- /ios/RNShakeImpl.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @protocol RNShakeImplDelegate 4 | 5 | - (void)handleEventWithName:(NSString *_Nonnull)name; 6 | 7 | @end 8 | 9 | @interface RNShakeImpl : NSObject 10 | 11 | + (NSArray *_Nonnull)supportedEvents; 12 | 13 | @property(nonatomic, weak) id _Nullable delegate; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /example/android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } 2 | plugins { id("com.facebook.react.settings") } 3 | extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand() } 4 | rootProject.name = 'shake.example' 5 | include ':app' 6 | includeBuild('../node_modules/@react-native/gradle-plugin') 7 | -------------------------------------------------------------------------------- /src/NativeShake.ts: -------------------------------------------------------------------------------- 1 | import type { TurboModule } from 'react-native'; 2 | import { TurboModuleRegistry } from 'react-native'; 3 | 4 | /* Required Methods for NativeEventEmitter */ 5 | export interface Spec extends TurboModule { 6 | addListener(eventName: string): void; 7 | removeListeners(count: number): void; 8 | } 9 | 10 | export default TurboModuleRegistry.get('RNShake'); 11 | -------------------------------------------------------------------------------- /example/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /android/src/oldarch/ShakeSpec.kt: -------------------------------------------------------------------------------- 1 | package com.shake 2 | 3 | import com.facebook.react.bridge.ReactApplicationContext 4 | import com.facebook.react.bridge.ReactContextBaseJavaModule 5 | import com.facebook.react.bridge.Promise 6 | 7 | abstract class ShakeSpec internal constructor(context: ReactApplicationContext) : 8 | ReactContextBaseJavaModule(context) { 9 | 10 | abstract fun addListener(eventName: String?) 11 | 12 | abstract fun removeListeners(count: Double) 13 | } 14 | -------------------------------------------------------------------------------- /example/android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | -------------------------------------------------------------------------------- /example/ios/.xcode.env: -------------------------------------------------------------------------------- 1 | # This `.xcode.env` file is versioned and is used to source the environment 2 | # used when running script phases inside Xcode. 3 | # To customize your local environment, you can create an `.xcode.env.local` 4 | # file that is not versioned. 5 | 6 | # NODE_BINARY variable contains the PATH to the node executable. 7 | # 8 | # Customize the NODE_BINARY variable here. 9 | # For example, to use nvm with brew, add the following line 10 | # . "$(brew --prefix nvm)/nvm.sh" --no-use 11 | export NODE_BINARY=$(command -v node) 12 | -------------------------------------------------------------------------------- /example/react-native.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const pkg = require('../package.json'); 3 | 4 | module.exports = { 5 | project: { 6 | ios: { 7 | automaticPodsInstallation: true, 8 | }, 9 | }, 10 | dependencies: { 11 | [pkg.name]: { 12 | root: path.join(__dirname, '..'), 13 | platforms: { 14 | // Codegen script incorrectly fails without this 15 | // So we explicitly specify the platforms with empty object 16 | ios: {}, 17 | android: {}, 18 | }, 19 | }, 20 | }, 21 | }; 22 | -------------------------------------------------------------------------------- /example/metro.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const { getDefaultConfig } = require('@react-native/metro-config'); 3 | const { getConfig } = require('react-native-builder-bob/metro-config'); 4 | const pkg = require('../package.json'); 5 | 6 | const root = path.resolve(__dirname, '..'); 7 | 8 | /** 9 | * Metro configuration 10 | * https://facebook.github.io/metro/docs/configuration 11 | * 12 | * @type {import('metro-config').MetroConfig} 13 | */ 14 | module.exports = getConfig(getDefaultConfig(__dirname), { 15 | root, 16 | pkg, 17 | project: __dirname, 18 | }); 19 | -------------------------------------------------------------------------------- /ios/RNShake.h: -------------------------------------------------------------------------------- 1 | //@interface RNShake : RCTEventEmitter 2 | // 3 | // https://github.com/react-native-community/RNNewArchitectureLibraries/blob/feat/swift-event-emitter/calculator/ios/RNCalculator.mm 4 | //+ (instancetype)shared; 5 | // 6 | //@end 7 | 8 | #import 9 | #import 10 | 11 | #ifdef RCT_NEW_ARCH_ENABLED 12 | #import "RNShakeSpec.h" 13 | 14 | @interface RNShake : RCTEventEmitter 15 | 16 | #else 17 | 18 | #import 19 | 20 | @interface RNShake : RCTEventEmitter 21 | 22 | #endif 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /.github/workflows/auto-publish.yml: -------------------------------------------------------------------------------- 1 | # Workflow label 2 | name: Build and publish to NPM 3 | 4 | on: 5 | push: 6 | branches: 7 | - main 8 | 9 | jobs: 10 | publish: 11 | name: Publish to NPM 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | - uses: actions/setup-node@v3 16 | with: 17 | node-version: 22 18 | - run: npm i -g typescript 19 | - run: yarn install --immutable 20 | - run: yarn prepare 21 | - uses: JS-DevTools/npm-publish@v3 # https://github.com/JS-DevTools/npm-publish 22 | with: 23 | token: ${{ secrets.NPM_TOKEN }} 24 | -------------------------------------------------------------------------------- /example/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext { 3 | buildToolsVersion = "35.0.1" 4 | minSdkVersion = 24 5 | compileSdkVersion = 35 6 | targetSdkVersion = 35 7 | ndkVersion = "27.2.12479018" 8 | kotlinVersion = "2.0.21" 9 | } 10 | repositories { 11 | google() 12 | mavenCentral() 13 | } 14 | dependencies { 15 | classpath("com.android.tools.build:gradle") 16 | classpath("com.facebook.react:react-native-gradle-plugin") 17 | classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") 18 | } 19 | } 20 | 21 | apply plugin: "com.facebook.react.rootproject" 22 | -------------------------------------------------------------------------------- /example/src/App.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react'; 2 | import { StyleSheet, View, Text } from 'react-native'; 3 | import RNShake from 'react-native-shake'; 4 | 5 | export default function App() { 6 | useEffect(() => { 7 | const sub = RNShake.addListener(() => { 8 | console.log('Shake event detected!'); 9 | }); 10 | 11 | return () => { 12 | sub.remove(); 13 | }; 14 | }, []); 15 | 16 | return ( 17 | 18 | Shake it to test 19 | 20 | ); 21 | } 22 | 23 | const styles = StyleSheet.create({ 24 | container: { 25 | flex: 1, 26 | alignItems: 'center', 27 | justifyContent: 'center', 28 | }, 29 | box: { 30 | width: 60, 31 | height: 60, 32 | marginVertical: 20, 33 | }, 34 | }); 35 | -------------------------------------------------------------------------------- /example/ios/ShakeExampleTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /.github/actions/setup/action.yml: -------------------------------------------------------------------------------- 1 | name: Setup 2 | description: Setup Node.js and install dependencies 3 | 4 | runs: 5 | using: composite 6 | steps: 7 | - name: Setup Node.js 8 | uses: actions/setup-node@v3 9 | with: 10 | node-version: 20 11 | 12 | - name: Cache dependencies 13 | id: yarn-cache 14 | uses: actions/cache@v3 15 | with: 16 | path: | 17 | **/node_modules 18 | .yarn/install-state.gz 19 | key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}-${{ hashFiles('**/package.json', '!node_modules/**') }} 20 | restore-keys: | 21 | ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} 22 | ${{ runner.os }}-yarn- 23 | 24 | - name: Install dependencies 25 | if: steps.yarn-cache.outputs.cache-hit != 'true' 26 | run: yarn install --immutable 27 | shell: bash 28 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "rootDir": ".", 4 | "paths": { 5 | "react-native-shake": ["./src/index"] 6 | }, 7 | "allowUnreachableCode": false, 8 | "allowUnusedLabels": false, 9 | "esModuleInterop": true, 10 | "forceConsistentCasingInFileNames": true, 11 | "jsx": "react-jsx", 12 | "lib": ["ESNext"], 13 | "module": "ESNext", 14 | "moduleResolution": "Bundler", 15 | "noEmit": true, 16 | "noFallthroughCasesInSwitch": true, 17 | "noImplicitReturns": true, 18 | "noImplicitUseStrict": false, 19 | "noStrictGenericChecks": false, 20 | "noUncheckedIndexedAccess": true, 21 | "noUnusedLocals": true, 22 | "noUnusedParameters": true, 23 | "resolveJsonModule": true, 24 | "skipLibCheck": true, 25 | "strict": true, 26 | "target": "ESNext", 27 | "verbatimModuleSyntax": true 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /example/ios/ShakeExample/AppDelegate.mm: -------------------------------------------------------------------------------- 1 | #import "AppDelegate.h" 2 | 3 | #import 4 | 5 | @implementation AppDelegate 6 | 7 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 8 | { 9 | self.moduleName = @"ShakeExample"; 10 | // You can add your custom initial props in the dictionary below. 11 | // They will be passed down to the ViewController used by React Native. 12 | self.initialProps = @{}; 13 | 14 | return [super application:application didFinishLaunchingWithOptions:launchOptions]; 15 | } 16 | 17 | - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge 18 | { 19 | return [self bundleURL]; 20 | } 21 | 22 | - (NSURL *)bundleURL 23 | { 24 | #if DEBUG 25 | return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; 26 | #else 27 | return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; 28 | #endif 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /turbo.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://turbo.build/schema.json", 3 | "envMode": "loose", 4 | "tasks": { 5 | "build:android": { 6 | "env": ["ORG_GRADLE_PROJECT_newArchEnabled"], 7 | "inputs": [ 8 | "package.json", 9 | "android", 10 | "!android/build", 11 | "src/*.ts", 12 | "src/*.tsx", 13 | "example/package.json", 14 | "example/android", 15 | "!example/android/.gradle", 16 | "!example/android/build", 17 | "!example/android/app/build" 18 | ], 19 | "outputs": [] 20 | }, 21 | "build:ios": { 22 | "env": ["RCT_NEW_ARCH_ENABLED"], 23 | "inputs": [ 24 | "package.json", 25 | "*.podspec", 26 | "ios", 27 | "src/*.ts", 28 | "src/*.tsx", 29 | "example/package.json", 30 | "example/ios", 31 | "!example/ios/build", 32 | "!example/ios/Pods" 33 | ], 34 | "outputs": [] 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /example/android/app/src/main/java/shake/example/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package shake.example 2 | 3 | import com.facebook.react.ReactActivity 4 | import com.facebook.react.ReactActivityDelegate 5 | import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled 6 | import com.facebook.react.defaults.DefaultReactActivityDelegate 7 | 8 | class MainActivity : ReactActivity() { 9 | 10 | /** 11 | * Returns the name of the main component registered from JavaScript. This is used to schedule 12 | * rendering of the component. 13 | */ 14 | override fun getMainComponentName(): String = "ShakeExample" 15 | 16 | /** 17 | * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] 18 | * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] 19 | */ 20 | override fun createReactActivityDelegate(): ReactActivityDelegate = 21 | DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) 22 | } 23 | -------------------------------------------------------------------------------- /src/index.tsx: -------------------------------------------------------------------------------- 1 | import { NativeModules, NativeEventEmitter, Platform } from 'react-native'; 2 | 3 | const LINKING_ERROR = 4 | "The package 'react-native-shake' doesn't seem to be linked. Make sure: \n\n" + 5 | Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) + 6 | '- You rebuilt the app after installing the package\n' + 7 | '- You are not using Expo Go\n'; 8 | 9 | // @ts-expect-error 10 | const isTurboModuleEnabled = global.__turboModuleProxy != null; 11 | 12 | const ShakeModule = isTurboModuleEnabled 13 | ? require('./NativeShake').default 14 | : NativeModules.RNShake; 15 | 16 | const Shake = ShakeModule 17 | ? ShakeModule 18 | : new Proxy( 19 | {}, 20 | { 21 | get() { 22 | throw new Error(LINKING_ERROR); 23 | }, 24 | } 25 | ); 26 | 27 | const eventEmitter = new NativeEventEmitter(Shake); 28 | 29 | export default { 30 | addListener: (callback: () => void | undefined) => { 31 | return eventEmitter.addListener('ShakeEvent', callback); 32 | }, 33 | removeAllListeners: () => eventEmitter.removeAllListeners('ShakeEvent'), 34 | }; 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Quan Pham 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | -------------------------------------------------------------------------------- /example/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 13 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/ios/ShakeExample/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ios-marketing", 45 | "scale" : "1x", 46 | "size" : "1024x1024" 47 | } 48 | ], 49 | "info" : { 50 | "author" : "xcode", 51 | "version" : 1 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { fixupConfigRules } from '@eslint/compat'; 2 | import { FlatCompat } from '@eslint/eslintrc'; 3 | import js from '@eslint/js'; 4 | import prettier from 'eslint-plugin-prettier'; 5 | import { defineConfig } from 'eslint/config'; 6 | import path from 'node:path'; 7 | import { fileURLToPath } from 'node:url'; 8 | 9 | const __filename = fileURLToPath(import.meta.url); 10 | const __dirname = path.dirname(__filename); 11 | const compat = new FlatCompat({ 12 | baseDirectory: __dirname, 13 | recommendedConfig: js.configs.recommended, 14 | allConfig: js.configs.all, 15 | }); 16 | 17 | export default defineConfig([ 18 | { 19 | extends: fixupConfigRules(compat.extends('@react-native', 'prettier')), 20 | plugins: { prettier }, 21 | rules: { 22 | 'react/react-in-jsx-scope': 'off', 23 | 'prettier/prettier': [ 24 | 'error', 25 | { 26 | quoteProps: 'consistent', 27 | singleQuote: true, 28 | tabWidth: 2, 29 | trailingComma: 'es5', 30 | useTabs: false, 31 | }, 32 | ], 33 | }, 34 | }, 35 | { 36 | ignores: ['node_modules/', 'lib/'], 37 | }, 38 | ]); 39 | -------------------------------------------------------------------------------- /example/ios/ShakeExample/PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSPrivacyAccessedAPITypes 6 | 7 | 8 | NSPrivacyAccessedAPIType 9 | NSPrivacyAccessedAPICategoryFileTimestamp 10 | NSPrivacyAccessedAPITypeReasons 11 | 12 | C617.1 13 | 14 | 15 | 16 | NSPrivacyAccessedAPIType 17 | NSPrivacyAccessedAPICategoryUserDefaults 18 | NSPrivacyAccessedAPITypeReasons 19 | 20 | CA92.1 21 | 22 | 23 | 24 | NSPrivacyAccessedAPIType 25 | NSPrivacyAccessedAPICategorySystemBootTime 26 | NSPrivacyAccessedAPITypeReasons 27 | 28 | 35F9.1 29 | 30 | 31 | 32 | NSPrivacyCollectedDataTypes 33 | 34 | NSPrivacyTracking 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # XDE 6 | .expo/ 7 | 8 | # VSCode 9 | .vscode/ 10 | jsconfig.json 11 | 12 | # Xcode 13 | # 14 | build/ 15 | *.pbxuser 16 | !default.pbxuser 17 | *.mode1v3 18 | !default.mode1v3 19 | *.mode2v3 20 | !default.mode2v3 21 | *.perspectivev3 22 | !default.perspectivev3 23 | xcuserdata 24 | *.xccheckout 25 | *.moved-aside 26 | DerivedData 27 | *.hmap 28 | *.ipa 29 | *.xcuserstate 30 | project.xcworkspace 31 | 32 | # Android/IJ 33 | # 34 | .classpath 35 | .cxx 36 | .gradle 37 | .idea 38 | .project 39 | .settings 40 | local.properties 41 | android.iml 42 | 43 | # Cocoapods 44 | # 45 | example/ios/Pods 46 | 47 | # Ruby 48 | example/vendor/ 49 | 50 | # node.js 51 | # 52 | node_modules/ 53 | npm-debug.log 54 | yarn-debug.log 55 | yarn-error.log 56 | 57 | # BUCK 58 | buck-out/ 59 | \.buckd/ 60 | android/app/libs 61 | android/keystores/debug.keystore 62 | 63 | # Yarn 64 | .yarn/* 65 | !.yarn/patches 66 | !.yarn/plugins 67 | !.yarn/releases 68 | !.yarn/sdks 69 | !.yarn/versions 70 | 71 | # Expo 72 | .expo/ 73 | .xcode.env.local 74 | 75 | # Turborepo 76 | .turbo/ 77 | 78 | # generated by bob 79 | lib/ 80 | 81 | # React Native Codegen 82 | ios/generated 83 | android/generated 84 | -------------------------------------------------------------------------------- /android/src/main/java/com/shake/ShakePackage.kt: -------------------------------------------------------------------------------- 1 | package com.shake 2 | 3 | import com.facebook.react.TurboReactPackage 4 | import com.facebook.react.bridge.ReactApplicationContext 5 | import com.facebook.react.bridge.NativeModule 6 | import com.facebook.react.module.model.ReactModuleInfoProvider 7 | import com.facebook.react.module.model.ReactModuleInfo 8 | import java.util.HashMap 9 | 10 | class ShakePackage : TurboReactPackage() { 11 | override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? { 12 | return if (name == ShakeModule.NAME) { 13 | ShakeModule(reactContext) 14 | } else { 15 | null 16 | } 17 | } 18 | 19 | override fun getReactModuleInfoProvider(): ReactModuleInfoProvider { 20 | return ReactModuleInfoProvider { 21 | val moduleInfos: MutableMap = HashMap() 22 | val isTurboModule: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED 23 | moduleInfos[ShakeModule.NAME] = ReactModuleInfo( 24 | ShakeModule.NAME, 25 | ShakeModule.NAME, 26 | false, // canOverrideExistingModule 27 | false, // needsEagerInit 28 | true, // hasConstants 29 | false, // isCxxModule 30 | isTurboModule // isTurboModule 31 | ) 32 | moduleInfos 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /example/ios/Podfile: -------------------------------------------------------------------------------- 1 | # Resolve react_native_pods.rb with node to allow for hoisting 2 | require Pod::Executable.execute_command('node', ['-p', 3 | 'require.resolve( 4 | "react-native/scripts/react_native_pods.rb", 5 | {paths: [process.argv[1]]}, 6 | )', __dir__]).strip 7 | 8 | platform :ios, min_ios_version_supported 9 | prepare_react_native_project! 10 | 11 | linkage = ENV['USE_FRAMEWORKS'] 12 | if linkage != nil 13 | Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green 14 | use_frameworks! :linkage => linkage.to_sym 15 | end 16 | 17 | target 'ShakeExample' do 18 | config = use_native_modules! 19 | 20 | use_react_native!( 21 | :path => config[:reactNativePath], 22 | # An absolute path to your application root. 23 | :app_path => "#{Pod::Config.instance.installation_root}/.." 24 | ) 25 | 26 | target 'ShakeExampleTests' do 27 | inherit! :complete 28 | # Pods for testing 29 | end 30 | 31 | 32 | pre_install do |installer| 33 | system("cd ../../ && npx bob build --target codegen") 34 | end 35 | 36 | post_install do |installer| 37 | # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 38 | react_native_post_install( 39 | installer, 40 | config[:reactNativePath], 41 | :mac_catalyst_enabled => false, 42 | # :ccache_enabled => true 43 | ) 44 | end 45 | end 46 | -------------------------------------------------------------------------------- /ios/RNShake.mm: -------------------------------------------------------------------------------- 1 | #import "RNShake.h" 2 | #import "RNShakeImpl.h" 3 | 4 | #if RCT_NEW_ARCH_ENABLED 5 | 6 | #import "RNShakeSpec.h" 7 | 8 | #endif 9 | 10 | @interface RNShake () 11 | @end 12 | 13 | @implementation RNShake { 14 | RNShakeImpl *moduleImpl; 15 | BOOL hasListeners; 16 | } 17 | 18 | @synthesize bridge = _bridge; 19 | 20 | RCT_EXPORT_MODULE() 21 | 22 | - (instancetype)init { 23 | self = [super init]; 24 | if (self) { 25 | moduleImpl = [RNShakeImpl new]; 26 | moduleImpl.delegate = self; 27 | } 28 | return self; 29 | } 30 | 31 | - (void)handleEventWithName:(NSString * _Nonnull)name { 32 | if (hasListeners) { 33 | [self sendEventWithName:name body:nil]; 34 | } 35 | } 36 | 37 | - (NSArray *)supportedEvents { 38 | return [RNShakeImpl supportedEvents]; 39 | } 40 | 41 | - (void)startObserving 42 | { 43 | hasListeners = YES; 44 | } 45 | 46 | -(void)stopObserving 47 | { 48 | hasListeners = NO; 49 | } 50 | 51 | + (BOOL)requiresMainQueueSetup 52 | { 53 | return NO; 54 | } 55 | 56 | // Don't compile this code when we build for the old architecture. 57 | #ifdef RCT_NEW_ARCH_ENABLED 58 | - (std::shared_ptr)getTurboModule: 59 | (const facebook::react::ObjCTurboModule::InitParams &)params 60 | { 61 | return std::make_shared(params); 62 | } 63 | #endif 64 | 65 | @end 66 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-native-shake-example", 3 | "version": "0.0.2", 4 | "private": true, 5 | "scripts": { 6 | "android": "react-native run-android", 7 | "ios": "react-native run-ios", 8 | "start": "react-native start -- --reset-cache", 9 | "build:android": "react-native build-android --extra-params \"--no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a\"", 10 | "build:ios": "react-native build-ios --scheme ShakeExample --mode Debug --extra-params \"-sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO\"" 11 | }, 12 | "dependencies": { 13 | "react": "19.0.0", 14 | "react-native": "0.79.2" 15 | }, 16 | "devDependencies": { 17 | "@babel/core": "^7.27.4", 18 | "@babel/preset-env": "^7.27.2", 19 | "@babel/runtime": "^7.27.6", 20 | "@react-native-community/cli": "18.0.0", 21 | "@react-native-community/cli-platform-android": "18.0.0", 22 | "@react-native-community/cli-platform-ios": "18.0.0", 23 | "@react-native/babel-preset": "0.79.2", 24 | "@react-native/metro-config": "0.79.2", 25 | "@react-native/typescript-config": "0.79.2", 26 | "react-native-builder-bob": "^0.40.11", 27 | "react-native-monorepo-config": "^0.1.9" 28 | }, 29 | "engines": { 30 | "node": ">=18" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /ios/RNShakeImpl.mm: -------------------------------------------------------------------------------- 1 | #import "RNShakeImpl.h" 2 | #import 3 | 4 | static NSString *const RCTShowDevMenuNotification = @"RCTShowDevMenuNotification"; 5 | static NSString *const RNShakeEventName = @"ShakeEvent"; 6 | 7 | #if !RCT_DEV 8 | 9 | @implementation UIWindow (RNShake) 10 | 11 | - (void)handleShakeEvent:(__unused UIEventSubtype)motion withEvent:(UIEvent *)event 12 | { 13 | if (event.subtype == UIEventSubtypeMotionShake) { 14 | [[NSNotificationCenter defaultCenter] postNotificationName:RCTShowDevMenuNotification object:nil]; 15 | } 16 | } 17 | 18 | @end 19 | 20 | #endif 21 | 22 | @implementation RNShakeImpl 23 | 24 | #if !RCT_DEV 25 | 26 | + (void)initialize 27 | { 28 | RCTSwapInstanceMethods([UIWindow class], @selector(motionEnded:withEvent:), @selector(handleShakeEvent:withEvent:)); 29 | } 30 | 31 | #endif 32 | 33 | + (NSArray *)supportedEvents 34 | { 35 | return @[RNShakeEventName]; 36 | } 37 | 38 | - (instancetype)init 39 | { 40 | self = [super init]; 41 | if(self){ 42 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(motionEnabled:) name:RCTShowDevMenuNotification object:nil]; 43 | } 44 | return self; 45 | } 46 | 47 | - (void)dealloc 48 | { 49 | [[NSNotificationCenter defaultCenter] removeObserver:self]; 50 | } 51 | 52 | - (void)motionEnabled:(NSNotification *)notification 53 | { 54 | [self.delegate handleEventWithName:RNShakeEventName]; 55 | } 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /android/src/main/java/com/shake/ShakeModule.kt: -------------------------------------------------------------------------------- 1 | package com.shake 2 | 3 | import android.content.Context 4 | import android.hardware.SensorManager 5 | import com.facebook.react.bridge.Promise 6 | import com.facebook.react.bridge.ReactApplicationContext 7 | import com.facebook.react.bridge.ReactMethod 8 | import com.facebook.react.modules.core.DeviceEventManagerModule 9 | 10 | 11 | class ShakeModule internal constructor(private val context: ReactApplicationContext) : 12 | ShakeSpec(context) { 13 | 14 | private lateinit var shakeDetector: CustomShakeDetector 15 | 16 | override fun getName(): String { 17 | return NAME 18 | } 19 | 20 | override fun initialize() { 21 | super.initialize() 22 | shakeDetector = CustomShakeDetector({ 23 | sendEvent() 24 | }) 25 | 26 | shakeDetector.start( 27 | context.getSystemService(Context.SENSOR_SERVICE) as SensorManager 28 | ) 29 | } 30 | 31 | override fun invalidate() { 32 | super.invalidate() 33 | shakeDetector.stop() 34 | } 35 | 36 | private fun sendEvent() { 37 | context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) 38 | .emit(EVENT_NAME, null) 39 | } 40 | 41 | // https://stackoverflow.com/questions/69538962/new-nativeeventemitter-was-called-with-a-non-null-argument-without-the-requir 42 | @ReactMethod 43 | override fun addListener(eventName: String?) { 44 | } 45 | 46 | @ReactMethod 47 | override fun removeListeners(count: Double) { 48 | } 49 | 50 | companion object { 51 | const val NAME = "RNShake" 52 | const val EVENT_NAME: String = "ShakeEvent" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /example/ios/ShakeExample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ShakeExample 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(MARKETING_VERSION) 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | $(CURRENT_PROJECT_VERSION) 25 | LSRequiresIPhoneOS 26 | 27 | NSAppTransportSecurity 28 | 29 | 30 | NSAllowsArbitraryLoads 31 | 32 | NSAllowsLocalNetworking 33 | 34 | 35 | NSLocationWhenInUseUsageDescription 36 | 37 | UILaunchStoryboardName 38 | LaunchScreen 39 | UIRequiredDeviceCapabilities 40 | 41 | arm64 42 | 43 | UISupportedInterfaceOrientations 44 | 45 | UIInterfaceOrientationPortrait 46 | UIInterfaceOrientationLandscapeLeft 47 | UIInterfaceOrientationLandscapeRight 48 | 49 | UIViewControllerBasedStatusBarAppearance 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /example/android/app/src/main/java/shake/example/MainApplication.kt: -------------------------------------------------------------------------------- 1 | package shake.example 2 | 3 | import android.app.Application 4 | import com.facebook.react.PackageList 5 | import com.facebook.react.ReactApplication 6 | import com.facebook.react.ReactHost 7 | import com.facebook.react.ReactNativeHost 8 | import com.facebook.react.ReactPackage 9 | import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load 10 | import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost 11 | import com.facebook.react.defaults.DefaultReactNativeHost 12 | import com.facebook.react.soloader.OpenSourceMergedSoMapping 13 | import com.facebook.soloader.SoLoader 14 | 15 | class MainApplication : Application(), ReactApplication { 16 | 17 | override val reactNativeHost: ReactNativeHost = 18 | object : DefaultReactNativeHost(this) { 19 | override fun getPackages(): List = 20 | PackageList(this).packages.apply { 21 | // Packages that cannot be autolinked yet can be added manually here, for example: 22 | // add(MyReactNativePackage()) 23 | } 24 | 25 | override fun getJSMainModuleName(): String = "index" 26 | 27 | override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG 28 | 29 | override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED 30 | override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED 31 | } 32 | 33 | override val reactHost: ReactHost 34 | get() = getDefaultReactHost(applicationContext, reactNativeHost) 35 | 36 | override fun onCreate() { 37 | super.onCreate() 38 | SoLoader.init(this, OpenSourceMergedSoMapping) 39 | if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { 40 | // If you opted-in for the New Architecture, we load the native entry point for this app. 41 | load() 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /example/android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx512m -XX:MaxMetaspaceSize=256m 13 | org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | 20 | # AndroidX package structure to make it clearer which packages are bundled with the 21 | # Android operating system, and which are packaged with your app's APK 22 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 23 | android.useAndroidX=true 24 | 25 | # Use this property to specify which architecture you want to build. 26 | # You can also override it from the CLI using 27 | # ./gradlew -PreactNativeArchitectures=x86_64 28 | reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 29 | 30 | # Use this property to enable support to the new architecture. 31 | # This will allow you to use TurboModules and the Fabric render in 32 | # your application. You should enable this flag either if you want 33 | # to write custom TurboModules/Fabric components OR use libraries that 34 | # are providing them. 35 | newArchEnabled=true 36 | 37 | # Use this property to enable or disable the Hermes JS engine. 38 | # If set to false, you will be using JSC instead. 39 | hermesEnabled=true 40 | -------------------------------------------------------------------------------- /react-native-shake.podspec: -------------------------------------------------------------------------------- 1 | require "json" 2 | 3 | package = JSON.parse(File.read(File.join(__dir__, "package.json"))) 4 | folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32' 5 | 6 | Pod::Spec.new do |s| 7 | s.name = "react-native-shake" 8 | s.version = package["version"] 9 | s.summary = package["description"] 10 | s.homepage = package["homepage"] 11 | s.license = package["license"] 12 | s.authors = package["author"] 13 | 14 | s.platforms = { :ios => min_ios_version_supported } 15 | s.source = { :git => "https://github.com/Doko-Demo-Doa/react-native-shake.git", :tag => "#{s.version}" } 16 | 17 | s.source_files = "ios/**/*.{h,m,mm,cpp}" 18 | s.exclude_files = "ios/generated/**/*" 19 | 20 | # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0. 21 | # See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79. 22 | if respond_to?(:install_modules_dependencies, true) 23 | install_modules_dependencies(s) 24 | else 25 | s.dependency "React-Core" 26 | 27 | # Don't install the dependencies when we run `pod install` in the old architecture. 28 | if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then 29 | s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1" 30 | s.pod_target_xcconfig = { 31 | "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"", 32 | "OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1", 33 | "CLANG_CXX_LANGUAGE_STANDARD" => "c++17" 34 | } 35 | s.dependency "React-Codegen" 36 | s.dependency "RCT-Folly" 37 | s.dependency "RCTRequired" 38 | s.dependency "RCTTypeSafety" 39 | s.dependency "ReactCommon/turbomodule/core" 40 | end 41 | end 42 | end 43 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/drawable/rn_edit_text_material.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 22 | 23 | 24 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /example/ios/ShakeExampleTests/ShakeExampleTests.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | #import 5 | #import 6 | 7 | #define TIMEOUT_SECONDS 600 8 | #define TEXT_TO_LOOK_FOR @"Welcome to React" 9 | 10 | @interface ShakeExampleTests : XCTestCase 11 | 12 | @end 13 | 14 | @implementation ShakeExampleTests 15 | 16 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test 17 | { 18 | if (test(view)) { 19 | return YES; 20 | } 21 | for (UIView *subview in [view subviews]) { 22 | if ([self findSubviewInView:subview matching:test]) { 23 | return YES; 24 | } 25 | } 26 | return NO; 27 | } 28 | 29 | - (void)testRendersWelcomeScreen 30 | { 31 | UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; 32 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; 33 | BOOL foundElement = NO; 34 | 35 | __block NSString *redboxError = nil; 36 | #ifdef DEBUG 37 | RCTSetLogFunction( 38 | ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { 39 | if (level >= RCTLogLevelError) { 40 | redboxError = message; 41 | } 42 | }); 43 | #endif 44 | 45 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { 46 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 47 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 48 | 49 | foundElement = [self findSubviewInView:vc.view 50 | matching:^BOOL(UIView *view) { 51 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { 52 | return YES; 53 | } 54 | return NO; 55 | }]; 56 | } 57 | 58 | #ifdef DEBUG 59 | RCTSetLogFunction(RCTDefaultLogFunction); 60 | #endif 61 | 62 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); 63 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); 64 | } 65 | 66 | @end 67 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # React Native Shake Event Detector 2 | 3 | If you like this, please consider... 4 | 5 | 6 | 7 | Thank you! 8 | 9 | [![Latest version](https://badge.fury.io/js/react-native-shake.svg)](https://badge.fury.io/js/react-native-shake) 10 | 11 | ![RNShake](rnshake.png) 12 | 13 | With this library, you can add shake event detector on your React Native app. Because `react-native-shake-event` is not in active development anymore, I decided to created this. 14 | 15 | It should work best on _real devices_ 16 | 17 | ## Installation 18 | 19 | ```sh 20 | npm install react-native-shake 21 | ``` 22 | 23 | or 24 | 25 | ```sh 26 | yarn add react-native-shake 27 | ``` 28 | 29 | ## Linking the native modules 30 | 31 | ### Automatic: 32 | 33 | From React Native 0.60, you don't have to manually link libraries anymore. Just 34 | 35 | ```bash 36 | cd ios 37 | pod update 38 | ``` 39 | 40 | and you're good to go. 41 | 42 | ### Manual (iOS): 43 | 44 | Follow this [guide](https://reactnative.dev/docs/linking-libraries-ios) 45 | 46 | ## Usage 47 | 48 | For 5.x.x and higher: 49 | 50 | ```tsx 51 | import React from 'react'; 52 | 53 | export const MyComponent = () => { 54 | React.useEffect(() => { 55 | const subscription = RNShake.addListener(() => { 56 | // Your code here... 57 | }); 58 | 59 | return () => { 60 | // Your code here... 61 | subscription.remove(); 62 | }; 63 | }, []); 64 | }; 65 | ``` 66 | 67 | and for older versions: 68 | 69 | ```tsx 70 | import RNShake from 'react-native-shake'; 71 | 72 | // For v3.x.x and below: 73 | class MyComponent extends React.Component { 74 | componentDidMount() { 75 | RNShake.addEventListener('ShakeEvent', () => { 76 | // Your code... 77 | }); 78 | } 79 | 80 | componentWillUnmount() { 81 | RNShake.removeEventListener('ShakeEvent'); 82 | } 83 | } 84 | 85 | // For v4.x.x onwards: 86 | class MyComponent extends React.Component { 87 | componentDidMount() { 88 | RNShake.addListener(() => { 89 | // Your code... 90 | }); 91 | } 92 | 93 | componentWillUnmount() { 94 | RNShake.removeListener(); 95 | } 96 | } 97 | ``` 98 | -------------------------------------------------------------------------------- /example/android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%"=="" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%"=="" set DIRNAME=. 29 | @rem This is normally unused 30 | set APP_BASE_NAME=%~n0 31 | set APP_HOME=%DIRNAME% 32 | 33 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 34 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 35 | 36 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 37 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 38 | 39 | @rem Find java.exe 40 | if defined JAVA_HOME goto findJavaFromJavaHome 41 | 42 | set JAVA_EXE=java.exe 43 | %JAVA_EXE% -version >NUL 2>&1 44 | if %ERRORLEVEL% equ 0 goto execute 45 | 46 | echo. 1>&2 47 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 48 | echo. 1>&2 49 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2 50 | echo location of your Java installation. 1>&2 51 | 52 | goto fail 53 | 54 | :findJavaFromJavaHome 55 | set JAVA_HOME=%JAVA_HOME:"=% 56 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 57 | 58 | if exist "%JAVA_EXE%" goto execute 59 | 60 | echo. 1>&2 61 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 62 | echo. 1>&2 63 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2 64 | echo location of your Java installation. 1>&2 65 | 66 | goto fail 67 | 68 | :execute 69 | @rem Setup the command line 70 | 71 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 72 | 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if %ERRORLEVEL% equ 0 goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | set EXIT_CODE=%ERRORLEVEL% 85 | if %EXIT_CODE% equ 0 set EXIT_CODE=1 86 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% 87 | exit /b %EXIT_CODE% 88 | 89 | :mainEnd 90 | if "%OS%"=="Windows_NT" endlocal 91 | 92 | :omega 93 | -------------------------------------------------------------------------------- /example/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | CFPropertyList (3.0.7) 5 | base64 6 | nkf 7 | rexml 8 | activesupport (7.2.0) 9 | base64 10 | bigdecimal 11 | concurrent-ruby (~> 1.0, >= 1.3.1) 12 | connection_pool (>= 2.2.5) 13 | drb 14 | i18n (>= 1.6, < 2) 15 | logger (>= 1.4.2) 16 | minitest (>= 5.1) 17 | securerandom (>= 0.3) 18 | tzinfo (~> 2.0, >= 2.0.5) 19 | addressable (2.8.7) 20 | public_suffix (>= 2.0.2, < 7.0) 21 | algoliasearch (1.27.5) 22 | httpclient (~> 2.8, >= 2.8.3) 23 | json (>= 1.5.1) 24 | atomos (0.1.3) 25 | base64 (0.2.0) 26 | bigdecimal (3.1.8) 27 | claide (1.1.0) 28 | cocoapods (1.15.2) 29 | addressable (~> 2.8) 30 | claide (>= 1.0.2, < 2.0) 31 | cocoapods-core (= 1.15.2) 32 | cocoapods-deintegrate (>= 1.0.3, < 2.0) 33 | cocoapods-downloader (>= 2.1, < 3.0) 34 | cocoapods-plugins (>= 1.0.0, < 2.0) 35 | cocoapods-search (>= 1.0.0, < 2.0) 36 | cocoapods-trunk (>= 1.6.0, < 2.0) 37 | cocoapods-try (>= 1.1.0, < 2.0) 38 | colored2 (~> 3.1) 39 | escape (~> 0.0.4) 40 | fourflusher (>= 2.3.0, < 3.0) 41 | gh_inspector (~> 1.0) 42 | molinillo (~> 0.8.0) 43 | nap (~> 1.0) 44 | ruby-macho (>= 2.3.0, < 3.0) 45 | xcodeproj (>= 1.23.0, < 2.0) 46 | cocoapods-core (1.15.2) 47 | activesupport (>= 5.0, < 8) 48 | addressable (~> 2.8) 49 | algoliasearch (~> 1.0) 50 | concurrent-ruby (~> 1.1) 51 | fuzzy_match (~> 2.0.4) 52 | nap (~> 1.0) 53 | netrc (~> 0.11) 54 | public_suffix (~> 4.0) 55 | typhoeus (~> 1.0) 56 | cocoapods-deintegrate (1.0.5) 57 | cocoapods-downloader (2.1) 58 | cocoapods-plugins (1.0.0) 59 | nap 60 | cocoapods-search (1.0.1) 61 | cocoapods-trunk (1.6.0) 62 | nap (>= 0.8, < 2.0) 63 | netrc (~> 0.11) 64 | cocoapods-try (1.2.0) 65 | colored2 (3.1.2) 66 | concurrent-ruby (1.3.4) 67 | connection_pool (2.4.1) 68 | drb (2.2.1) 69 | escape (0.0.4) 70 | ethon (0.16.0) 71 | ffi (>= 1.15.0) 72 | ffi (1.17.0) 73 | fourflusher (2.3.1) 74 | fuzzy_match (2.0.4) 75 | gh_inspector (1.1.3) 76 | httpclient (2.8.3) 77 | i18n (1.14.5) 78 | concurrent-ruby (~> 1.0) 79 | json (2.7.2) 80 | logger (1.6.0) 81 | minitest (5.25.1) 82 | molinillo (0.8.0) 83 | nanaimo (0.3.0) 84 | nap (1.1.0) 85 | netrc (0.11.0) 86 | nkf (0.2.0) 87 | public_suffix (4.0.7) 88 | rexml (3.4.2) 89 | ruby-macho (2.5.1) 90 | securerandom (0.3.1) 91 | typhoeus (1.4.1) 92 | ethon (>= 0.9.0) 93 | tzinfo (2.0.6) 94 | concurrent-ruby (~> 1.0) 95 | xcodeproj (1.25.0) 96 | CFPropertyList (>= 2.3.3, < 4.0) 97 | atomos (~> 0.1.3) 98 | claide (>= 1.0.2, < 2.0) 99 | colored2 (~> 3.1) 100 | nanaimo (~> 0.3.0) 101 | rexml (>= 3.3.2, < 4.0) 102 | 103 | PLATFORMS 104 | ruby 105 | 106 | DEPENDENCIES 107 | activesupport (>= 6.1.7.5, != 7.1.0) 108 | cocoapods (>= 1.13, != 1.15.1, != 1.15.0) 109 | 110 | RUBY VERSION 111 | ruby 3.3.4p94 112 | 113 | BUNDLED WITH 114 | 2.5.17 115 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | This is a new [**React Native**](https://reactnative.dev) project, bootstrapped using [`@react-native-community/cli`](https://github.com/react-native-community/cli). 2 | 3 | # Getting Started 4 | 5 | >**Note**: Make sure you have completed the [React Native - Environment Setup](https://reactnative.dev/docs/environment-setup) instructions till "Creating a new application" step, before proceeding. 6 | 7 | ## Step 1: Start the Metro Server 8 | 9 | First, you will need to start **Metro**, the JavaScript _bundler_ that ships _with_ React Native. 10 | 11 | To start Metro, run the following command from the _root_ of your React Native project: 12 | 13 | ```bash 14 | # using npm 15 | npm start 16 | 17 | # OR using Yarn 18 | yarn start 19 | ``` 20 | 21 | ## Step 2: Start your Application 22 | 23 | Let Metro Bundler run in its _own_ terminal. Open a _new_ terminal from the _root_ of your React Native project. Run the following command to start your _Android_ or _iOS_ app: 24 | 25 | ### For Android 26 | 27 | ```bash 28 | # using npm 29 | npm run android 30 | 31 | # OR using Yarn 32 | yarn android 33 | ``` 34 | 35 | ### For iOS 36 | 37 | ```bash 38 | # using npm 39 | npm run ios 40 | 41 | # OR using Yarn 42 | yarn ios 43 | ``` 44 | 45 | If everything is set up _correctly_, you should see your new app running in your _Android Emulator_ or _iOS Simulator_ shortly provided you have set up your emulator/simulator correctly. 46 | 47 | This is one way to run your app — you can also run it directly from within Android Studio and Xcode respectively. 48 | 49 | ## Step 3: Modifying your App 50 | 51 | Now that you have successfully run the app, let's modify it. 52 | 53 | 1. Open `App.tsx` in your text editor of choice and edit some lines. 54 | 2. For **Android**: Press the R key twice or select **"Reload"** from the **Developer Menu** (Ctrl + M (on Window and Linux) or Cmd ⌘ + M (on macOS)) to see your changes! 55 | 56 | For **iOS**: Hit Cmd ⌘ + R in your iOS Simulator to reload the app and see your changes! 57 | 58 | ## Congratulations! :tada: 59 | 60 | You've successfully run and modified your React Native App. :partying_face: 61 | 62 | ### Now what? 63 | 64 | - If you want to add this new React Native code to an existing application, check out the [Integration guide](https://reactnative.dev/docs/integration-with-existing-apps). 65 | - If you're curious to learn more about React Native, check out the [Introduction to React Native](https://reactnative.dev/docs/getting-started). 66 | 67 | # Troubleshooting 68 | 69 | If you can't get this to work, see the [Troubleshooting](https://reactnative.dev/docs/troubleshooting) page. 70 | 71 | # Learn More 72 | 73 | To learn more about React Native, take a look at the following resources: 74 | 75 | - [React Native Website](https://reactnative.dev) - learn more about React Native. 76 | - [Getting Started](https://reactnative.dev/docs/environment-setup) - an **overview** of React Native and how setup your environment. 77 | - [Learn the Basics](https://reactnative.dev/docs/getting-started) - a **guided tour** of the React Native **basics**. 78 | - [Blog](https://reactnative.dev/blog) - read the latest official React Native **Blog** posts. 79 | - [`@facebook/react-native`](https://github.com/facebook/react-native) - the Open Source; GitHub **repository** for React Native. 80 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | // Buildscript is evaluated before everything else so we can't use getExtOrDefault 3 | def kotlin_version = rootProject.ext.has("kotlinVersion") ? rootProject.ext.get("kotlinVersion") : project.properties["Shake_kotlinVersion"] 4 | 5 | repositories { 6 | google() 7 | mavenCentral() 8 | } 9 | 10 | dependencies { 11 | classpath "com.android.tools.build:gradle:8.7.2" 12 | // noinspection DifferentKotlinGradleVersion 13 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 14 | } 15 | } 16 | 17 | def reactNativeArchitectures() { 18 | def value = rootProject.getProperties().get("reactNativeArchitectures") 19 | return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] 20 | } 21 | 22 | def isNewArchitectureEnabled() { 23 | return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true" 24 | } 25 | 26 | apply plugin: "com.android.library" 27 | apply plugin: "kotlin-android" 28 | 29 | if (isNewArchitectureEnabled()) { 30 | apply plugin: "com.facebook.react" 31 | } 32 | 33 | def getExtOrDefault(name) { 34 | return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["Shake_" + name] 35 | } 36 | 37 | def getExtOrIntegerDefault(name) { 38 | return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["Shake_" + name]).toInteger() 39 | } 40 | 41 | def supportsNamespace() { 42 | def parsed = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.') 43 | def major = parsed[0].toInteger() 44 | def minor = parsed[1].toInteger() 45 | 46 | // Namespace support was added in 7.3.0 47 | return (major == 7 && minor >= 3) || major >= 8 48 | } 49 | 50 | android { 51 | if (supportsNamespace()) { 52 | namespace "com.shake" 53 | 54 | sourceSets { 55 | main { 56 | manifest.srcFile "src/main/AndroidManifestNew.xml" 57 | } 58 | } 59 | } 60 | 61 | compileSdkVersion getExtOrIntegerDefault("compileSdkVersion") 62 | 63 | defaultConfig { 64 | minSdkVersion getExtOrIntegerDefault("minSdkVersion") 65 | targetSdkVersion getExtOrIntegerDefault("targetSdkVersion") 66 | buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() 67 | 68 | } 69 | 70 | buildFeatures { 71 | buildConfig true 72 | } 73 | 74 | buildTypes { 75 | release { 76 | minifyEnabled false 77 | } 78 | } 79 | 80 | lintOptions { 81 | disable "GradleCompatible" 82 | } 83 | 84 | compileOptions { 85 | sourceCompatibility JavaVersion.VERSION_1_8 86 | targetCompatibility JavaVersion.VERSION_1_8 87 | } 88 | 89 | sourceSets { 90 | main { 91 | if (isNewArchitectureEnabled()) { 92 | java.srcDirs += [ 93 | "src/newarch", 94 | // Codegen specs 95 | "generated/java", 96 | "generated/jni" 97 | ] 98 | } else { 99 | java.srcDirs += ["src/oldarch"] 100 | } 101 | } 102 | } 103 | } 104 | 105 | repositories { 106 | mavenCentral() 107 | google() 108 | } 109 | 110 | def kotlin_version = getExtOrDefault("kotlinVersion") 111 | 112 | dependencies { 113 | // For < 0.71, this will be from the local maven repo 114 | // For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin 115 | //noinspection GradleDynamicVersion 116 | implementation "com.facebook.react:react-native:+" 117 | implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" 118 | } 119 | 120 | if (isNewArchitectureEnabled()) { 121 | react { 122 | jsRootDir = file("../src/") 123 | libraryName = "RNShake" 124 | codegenJavaPackageName = "com.shake" 125 | } 126 | } 127 | -------------------------------------------------------------------------------- /example/ios/ShakeExample.xcodeproj/xcshareddata/xcschemes/ShakeExample.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 10 | 12 | 15 | 16 | 17 | 18 | 19 | 25 | 31 | 32 | 33 | 34 | 35 | 40 | 41 | 43 | 49 | 50 | 51 | 52 | 53 | 63 | 65 | 71 | 72 | 73 | 74 | 80 | 82 | 88 | 89 | 90 | 91 | 93 | 94 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /android/src/main/java/com/shake/CustomShakeDetector.kt: -------------------------------------------------------------------------------- 1 | package com.shake 2 | 3 | import android.hardware.Sensor 4 | import android.hardware.SensorEvent 5 | import android.hardware.SensorEventListener 6 | import android.hardware.SensorManager 7 | import java.util.concurrent.TimeUnit 8 | 9 | /** Listens for the user shaking their phone. Allocation-less once it starts listening. */ 10 | public class CustomShakeDetector 11 | @JvmOverloads 12 | constructor(private val shakeListener: ShakeListener, private val minNumShakes: Int = 1) : 13 | SensorEventListener { 14 | 15 | private var accelerationX = 0f 16 | private var accelerationY = 0f 17 | private var accelerationZ = 0f 18 | 19 | public fun interface ShakeListener { 20 | public fun onShake() 21 | } 22 | 23 | private var sensorManager: SensorManager? = null 24 | private var lastTimestamp: Long = 0 25 | private var numShakes = 0 26 | private var lastShakeTimestamp: Long = 0 27 | 28 | /** Start listening for shakes. */ 29 | public fun start(manager: SensorManager): Unit { 30 | val accelerometer = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) ?: return 31 | sensorManager = manager 32 | lastTimestamp = -1 33 | manager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_UI) 34 | lastShakeTimestamp = 0 35 | reset() 36 | } 37 | 38 | /** Stop listening for shakes. */ 39 | public fun stop(): Unit { 40 | sensorManager?.unregisterListener(this) 41 | sensorManager = null 42 | } 43 | 44 | /** Reset all variables used to keep track of number of shakes recorded. */ 45 | private fun reset() { 46 | numShakes = 0 47 | accelerationX = 0f 48 | accelerationY = 0f 49 | accelerationZ = 0f 50 | } 51 | 52 | /** 53 | * Determine if acceleration applied to sensor is large enough to count as a rage shake. 54 | * 55 | * @param a acceleration in x, y, or z applied to the sensor 56 | * @return true if the magnitude of the force exceeds the minimum required amount of force. false 57 | * otherwise. 58 | */ 59 | private fun atLeastRequiredForce(a: Float): Boolean = Math.abs(a) > REQUIRED_FORCE 60 | 61 | /** 62 | * Save data about last shake 63 | * 64 | * @param timestamp (ns) of last sensor event 65 | */ 66 | private fun recordShake(timestamp: Long) { 67 | lastShakeTimestamp = timestamp 68 | numShakes++ 69 | } 70 | 71 | override fun onSensorChanged(sensorEvent: SensorEvent) { 72 | if (sensorEvent.timestamp - lastTimestamp < MIN_TIME_BETWEEN_SAMPLES_NS) { 73 | return 74 | } 75 | val ax = sensorEvent.values[0] 76 | val ay = sensorEvent.values[1] 77 | val az = sensorEvent.values[2] - SensorManager.GRAVITY_EARTH 78 | lastTimestamp = sensorEvent.timestamp 79 | when { 80 | atLeastRequiredForce(ax) && ax * accelerationX <= 0 -> { 81 | recordShake(sensorEvent.timestamp) 82 | accelerationX = ax 83 | } 84 | atLeastRequiredForce(ay) && ay * accelerationY <= 0 -> { 85 | recordShake(sensorEvent.timestamp) 86 | accelerationY = ay 87 | } 88 | atLeastRequiredForce(az) && az * accelerationZ <= 0 -> { 89 | recordShake(sensorEvent.timestamp) 90 | accelerationZ = az 91 | } 92 | } 93 | maybeDispatchShake(sensorEvent.timestamp) 94 | } 95 | 96 | override fun onAccuracyChanged(sensor: Sensor, i: Int): Unit = Unit 97 | 98 | private fun maybeDispatchShake(currentTimestamp: Long) { 99 | if (numShakes >= 8 * minNumShakes) { 100 | reset() 101 | shakeListener.onShake() 102 | } 103 | if (currentTimestamp - lastShakeTimestamp > SHAKING_WINDOW_NS) { 104 | reset() 105 | } 106 | } 107 | } 108 | 109 | // Collect sensor data in this interval (nanoseconds) 110 | private val MIN_TIME_BETWEEN_SAMPLES_NS = TimeUnit.NANOSECONDS.convert(20, TimeUnit.MILLISECONDS) 111 | 112 | // Number of nanoseconds to listen for and count shakes (nanoseconds) 113 | private val SHAKING_WINDOW_NS = TimeUnit.NANOSECONDS.convert(3, TimeUnit.SECONDS).toFloat() 114 | 115 | // Required force to constitute a rage shake. Need to multiply gravity by 1.33 because a rage 116 | // shake in one direction should have more force than just the magnitude of free fall. 117 | private const val REQUIRED_FORCE = SensorManager.GRAVITY_EARTH * 1.33f 118 | -------------------------------------------------------------------------------- /example/ios/ShakeExample/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 24 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: 3 | push: 4 | branches: 5 | - main 6 | pull_request: 7 | branches: 8 | - main 9 | merge_group: 10 | types: 11 | - checks_requested 12 | 13 | jobs: 14 | lint: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: Checkout 18 | uses: actions/checkout@v4 19 | 20 | - name: Setup 21 | uses: ./.github/actions/setup 22 | 23 | - name: Lint files 24 | run: yarn lint 25 | 26 | - name: Typecheck files 27 | run: yarn typecheck 28 | 29 | test: 30 | runs-on: ubuntu-latest 31 | steps: 32 | - name: Checkout 33 | uses: actions/checkout@v4 34 | 35 | - name: Setup 36 | uses: ./.github/actions/setup 37 | 38 | - name: Run unit tests 39 | run: yarn test --maxWorkers=2 --coverage 40 | 41 | build-library: 42 | runs-on: ubuntu-latest 43 | steps: 44 | - name: Checkout 45 | uses: actions/checkout@v4 46 | 47 | - name: Setup 48 | uses: ./.github/actions/setup 49 | 50 | - name: Build package 51 | run: yarn prepare 52 | 53 | build-android: 54 | runs-on: ubuntu-latest 55 | env: 56 | TURBO_CACHE_DIR: .turbo/android 57 | steps: 58 | - name: Checkout 59 | uses: actions/checkout@v4 60 | 61 | - name: Setup 62 | uses: ./.github/actions/setup 63 | 64 | - name: Cache turborepo for Android 65 | uses: actions/cache@v4 66 | with: 67 | path: ${{ env.TURBO_CACHE_DIR }} 68 | key: ${{ runner.os }}-turborepo-android-${{ hashFiles('yarn.lock') }} 69 | restore-keys: | 70 | ${{ runner.os }}-turborepo-android- 71 | 72 | - name: Check turborepo cache for Android 73 | run: | 74 | TURBO_CACHE_STATUS=$(node -p "($(yarn turbo run build:android --cache-dir="${{ env.TURBO_CACHE_DIR }}" --dry=json)).tasks.find(t => t.task === 'build:android').cache.status") 75 | 76 | if [[ $TURBO_CACHE_STATUS == "HIT" ]]; then 77 | echo "turbo_cache_hit=1" >> $GITHUB_ENV 78 | fi 79 | 80 | - name: Install JDK 81 | if: env.turbo_cache_hit != 1 82 | uses: actions/setup-java@v4 83 | with: 84 | distribution: 'zulu' 85 | java-version: '17' 86 | 87 | - name: Finalize Android SDK 88 | if: env.turbo_cache_hit != 1 89 | run: | 90 | /bin/bash -c "yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses > /dev/null" 91 | 92 | - name: Cache Gradle 93 | if: env.turbo_cache_hit != 1 94 | uses: actions/cache@v4 95 | with: 96 | path: | 97 | ~/.gradle/wrapper 98 | ~/.gradle/caches 99 | key: ${{ runner.os }}-gradle-${{ hashFiles('example/android/gradle/wrapper/gradle-wrapper.properties') }} 100 | restore-keys: | 101 | ${{ runner.os }}-gradle- 102 | 103 | # - name: Build example for Android 104 | # env: 105 | # JAVA_OPTS: '-XX:MaxHeapSize=6g' 106 | # run: | 107 | # yarn turbo run build:android --cache-dir="${{ env.TURBO_CACHE_DIR }}" 108 | 109 | build-ios: 110 | runs-on: macos-latest 111 | env: 112 | XCODE_VERSION: 16.2 113 | TURBO_CACHE_DIR: .turbo/ios 114 | steps: 115 | - name: Checkout 116 | uses: actions/checkout@v4 117 | 118 | - name: Setup 119 | uses: ./.github/actions/setup 120 | 121 | - name: Cache turborepo for iOS 122 | uses: actions/cache@v4 123 | with: 124 | path: ${{ env.TURBO_CACHE_DIR }} 125 | key: ${{ runner.os }}-turborepo-ios-${{ hashFiles('yarn.lock') }} 126 | restore-keys: | 127 | ${{ runner.os }}-turborepo-ios- 128 | 129 | - name: Check turborepo cache for iOS 130 | run: | 131 | TURBO_CACHE_STATUS=$(node -p "($(yarn turbo run build:ios --cache-dir="${{ env.TURBO_CACHE_DIR }}" --dry=json)).tasks.find(t => t.task === 'build:ios').cache.status") 132 | 133 | if [[ $TURBO_CACHE_STATUS == "HIT" ]]; then 134 | echo "turbo_cache_hit=1" >> $GITHUB_ENV 135 | fi 136 | 137 | - name: Use appropriate Xcode version 138 | if: env.turbo_cache_hit != 1 139 | uses: maxim-lobanov/setup-xcode@v1 140 | with: 141 | xcode-version: ${{ env.XCODE_VERSION }} 142 | 143 | - name: Restore cocoapods 144 | if: env.turbo_cache_hit != 1 145 | id: cocoapods-cache 146 | uses: actions/cache/restore@v4 147 | with: 148 | path: | 149 | **/ios/Pods 150 | key: ${{ runner.os }}-cocoapods-${{ hashFiles('example/ios/Podfile.lock') }} 151 | restore-keys: | 152 | ${{ runner.os }}-cocoapods- 153 | 154 | - name: Install cocoapods 155 | if: env.turbo_cache_hit != 1 && steps.cocoapods-cache.outputs.cache-hit != 'true' 156 | run: | 157 | cd example 158 | bundle install 159 | bundle exec pod update --project-directory=ios 160 | 161 | - name: Cache cocoapods 162 | if: env.turbo_cache_hit != 1 && steps.cocoapods-cache.outputs.cache-hit != 'true' 163 | uses: actions/cache/save@v4 164 | with: 165 | path: | 166 | **/ios/Pods 167 | key: ${{ steps.cocoapods-cache.outputs.cache-key }} 168 | 169 | # - name: Build example for iOS 170 | # run: | 171 | # yarn turbo run build:ios --cache-dir="${{ env.TURBO_CACHE_DIR }}" 172 | -------------------------------------------------------------------------------- /example/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: "com.android.application" 2 | apply plugin: "org.jetbrains.kotlin.android" 3 | apply plugin: "com.facebook.react" 4 | 5 | /** 6 | * This is the configuration block to customize your React Native Android app. 7 | * By default you don't need to apply any configuration, just uncomment the lines you need. 8 | */ 9 | react { 10 | /* Folders */ 11 | // The root of your project, i.e. where "package.json" lives. Default is '../..' 12 | // root = file("../../") 13 | // The folder where the react-native NPM package is. Default is ../../node_modules/react-native 14 | // reactNativeDir = file("../../node_modules/react-native") 15 | // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen 16 | // codegenDir = file("../../node_modules/@react-native/codegen") 17 | // The cli.js file which is the React Native CLI entrypoint. Default is ../../node_modules/react-native/cli.js 18 | // cliFile = file("../../node_modules/react-native/cli.js") 19 | 20 | /* Variants */ 21 | // The list of variants to that are debuggable. For those we're going to 22 | // skip the bundling of the JS bundle and the assets. By default is just 'debug'. 23 | // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. 24 | // debuggableVariants = ["liteDebug", "prodDebug"] 25 | 26 | /* Bundling */ 27 | // A list containing the node command and its flags. Default is just 'node'. 28 | // nodeExecutableAndArgs = ["node"] 29 | // 30 | // The command to run when bundling. By default is 'bundle' 31 | // bundleCommand = "ram-bundle" 32 | // 33 | // The path to the CLI configuration file. Default is empty. 34 | // bundleConfig = file(../rn-cli.config.js) 35 | // 36 | // The name of the generated asset file containing your JS bundle 37 | // bundleAssetName = "MyApplication.android.bundle" 38 | // 39 | // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' 40 | // entryFile = file("../js/MyApplication.android.js") 41 | // 42 | // A list of extra flags to pass to the 'bundle' commands. 43 | // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle 44 | // extraPackagerArgs = [] 45 | 46 | /* Hermes Commands */ 47 | // The hermes compiler command to run. By default it is 'hermesc' 48 | // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" 49 | // 50 | // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" 51 | // hermesFlags = ["-O", "-output-source-map"] 52 | 53 | /* Autolinking */ 54 | autolinkLibrariesWithApp() 55 | } 56 | 57 | /** 58 | * Set this to true to Run Proguard on Release builds to minify the Java bytecode. 59 | */ 60 | def enableProguardInReleaseBuilds = false 61 | 62 | /** 63 | * The preferred build flavor of JavaScriptCore (JSC) 64 | * 65 | * For example, to use the international variant, you can use: 66 | * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` 67 | * 68 | * The international variant includes ICU i18n library and necessary data 69 | * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that 70 | * give correct results when using with locales other than en-US. Note that 71 | * this variant is about 6MiB larger per architecture than default. 72 | */ 73 | def jscFlavor = 'org.webkit:android-jsc:+' 74 | 75 | android { 76 | ndkVersion rootProject.ext.ndkVersion 77 | buildToolsVersion rootProject.ext.buildToolsVersion 78 | compileSdk rootProject.ext.compileSdkVersion 79 | 80 | namespace "shake.example" 81 | defaultConfig { 82 | applicationId "shake.example" 83 | minSdkVersion rootProject.ext.minSdkVersion 84 | targetSdkVersion rootProject.ext.targetSdkVersion 85 | versionCode 1 86 | versionName "1.0" 87 | } 88 | signingConfigs { 89 | debug { 90 | storeFile file('debug.keystore') 91 | storePassword 'android' 92 | keyAlias 'androiddebugkey' 93 | keyPassword 'android' 94 | } 95 | } 96 | buildTypes { 97 | debug { 98 | signingConfig signingConfigs.debug 99 | } 100 | release { 101 | // Caution! In production, you need to generate your own keystore file. 102 | // see https://reactnative.dev/docs/signed-apk-android. 103 | signingConfig signingConfigs.debug 104 | minifyEnabled enableProguardInReleaseBuilds 105 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" 106 | } 107 | } 108 | } 109 | 110 | dependencies { 111 | // The version of react-native is set by the React Native Gradle Plugin 112 | implementation("com.facebook.react:react-android") 113 | 114 | if (hermesEnabled.toBoolean()) { 115 | implementation("com.facebook.react:hermes-android") 116 | } else { 117 | implementation jscFlavor 118 | } 119 | } 120 | 121 | def isNewArchitectureEnabled() { 122 | return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true" 123 | } 124 | 125 | if (isNewArchitectureEnabled()) { 126 | // Since our library doesn't invoke codegen automatically we need to do it here. 127 | tasks.register('invokeLibraryCodegen', Exec) { 128 | workingDir "$rootDir/../../" 129 | commandLine "npx", "bob", "build", "--target", "codegen" 130 | } 131 | preBuild.dependsOn invokeLibraryCodegen 132 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-native-shake", 3 | "version": "6.8.0", 4 | "description": "React Native shake event detector", 5 | "source": "./src/index.tsx", 6 | "main": "./lib/commonjs/index.js", 7 | "module": "./lib/module/index.js", 8 | "types": "./lib/typescript/module/src/index.d.ts", 9 | "exports": { 10 | ".": { 11 | "import": { 12 | "types": "./lib/typescript/module/src/index.d.ts", 13 | "default": "./lib/module/index.js" 14 | }, 15 | "require": { 16 | "types": "./lib/typescript/commonjs/src/index.d.ts", 17 | "default": "./lib/commonjs/index.js" 18 | } 19 | }, 20 | "./types": "./lib/typescript/module/src/index.d.ts" 21 | }, 22 | "files": [ 23 | "src", 24 | "lib", 25 | "android", 26 | "ios", 27 | "cpp", 28 | "*.podspec", 29 | "!ios/build", 30 | "!android/build", 31 | "!android/gradle", 32 | "!android/gradlew", 33 | "!android/gradlew.bat", 34 | "!android/local.properties", 35 | "!**/__tests__", 36 | "!**/__fixtures__", 37 | "!**/__mocks__", 38 | "!**/.*" 39 | ], 40 | "scripts": { 41 | "example": "yarn workspace react-native-shake-example", 42 | "test": "jest", 43 | "typecheck": "tsc", 44 | "lint": "eslint \"**/*.{js,ts,tsx}\"", 45 | "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib", 46 | "prepare": "bob build", 47 | "release": "release-it" 48 | }, 49 | "keywords": [ 50 | "react-native", 51 | "ios", 52 | "android" 53 | ], 54 | "repository": { 55 | "type": "git", 56 | "url": "git+https://github.com/Doko-Demo-Doa/react-native-shake.git" 57 | }, 58 | "author": "Quan Pham (https://github.com/Doko-Demo-Doa)", 59 | "license": "MIT", 60 | "bugs": { 61 | "url": "https://github.com/Doko-Demo-Doa/react-native-shake/issues" 62 | }, 63 | "homepage": "https://github.com/Doko-Demo-Doa/react-native-shake#readme", 64 | "publishConfig": { 65 | "registry": "https://registry.npmjs.org/" 66 | }, 67 | "devDependencies": { 68 | "@commitlint/config-conventional": "^19.8.1", 69 | "@eslint/compat": "^1.2.7", 70 | "@eslint/eslintrc": "^3.3.0", 71 | "@eslint/js": "^9.22.0", 72 | "@evilmartians/lefthook": "^1.11.13", 73 | "@react-native-community/cli": "18.0.0", 74 | "@react-native/eslint-config": "^0.79.3", 75 | "@release-it/conventional-changelog": "^10.0.1", 76 | "@types/jest": "^29.5.14", 77 | "@types/react": "^19.0.0", 78 | "commitlint": "^19.8.1", 79 | "del-cli": "^6.0.0", 80 | "eslint": "^9.28.0", 81 | "eslint-config-prettier": "^10.1.5", 82 | "eslint-plugin-prettier": "^5.4.1", 83 | "jest": "^29.7.0", 84 | "prettier": "^3.5.3", 85 | "react": "19.0.0", 86 | "react-native": "0.79.2", 87 | "react-native-builder-bob": "^0.40.11", 88 | "release-it": "^19.0.3", 89 | "turbo": "^2.5.4", 90 | "typescript": "^5.8.3" 91 | }, 92 | "resolutions": { 93 | "@types/react": "^18.2.44" 94 | }, 95 | "peerDependencies": { 96 | "react": "*", 97 | "react-native": "*" 98 | }, 99 | "workspaces": [ 100 | "example" 101 | ], 102 | "packageManager": "yarn@4.9.2", 103 | "jest": { 104 | "preset": "react-native", 105 | "modulePathIgnorePatterns": [ 106 | "/example/node_modules", 107 | "/lib/" 108 | ] 109 | }, 110 | "commitlint": { 111 | "extends": [ 112 | "@commitlint/config-conventional" 113 | ] 114 | }, 115 | "release-it": { 116 | "git": { 117 | "commitMessage": "chore: release ${version}", 118 | "tagName": "v${version}" 119 | }, 120 | "npm": { 121 | "publish": true 122 | }, 123 | "github": { 124 | "release": true 125 | }, 126 | "plugins": { 127 | "@release-it/conventional-changelog": { 128 | "preset": "angular" 129 | } 130 | } 131 | }, 132 | "eslintConfig": { 133 | "root": true, 134 | "extends": [ 135 | "@react-native", 136 | "prettier/prettier" 137 | ], 138 | "plugins": [ 139 | "prettier" 140 | ], 141 | "rules": { 142 | "react/react-in-jsx-scope": "off", 143 | "prettier/prettier": [ 144 | "error", 145 | { 146 | "quoteProps": "consistent", 147 | "singleQuote": true, 148 | "tabWidth": 2, 149 | "trailingComma": "es5", 150 | "useTabs": false 151 | } 152 | ] 153 | } 154 | }, 155 | "eslintIgnore": [ 156 | "node_modules/", 157 | "lib/" 158 | ], 159 | "prettier": { 160 | "quoteProps": "consistent", 161 | "singleQuote": true, 162 | "tabWidth": 2, 163 | "trailingComma": "es5", 164 | "useTabs": false 165 | }, 166 | "react-native-builder-bob": { 167 | "source": "src", 168 | "output": "lib", 169 | "targets": [ 170 | "codegen", 171 | [ 172 | "commonjs", 173 | { 174 | "esm": true 175 | } 176 | ], 177 | [ 178 | "module", 179 | { 180 | "esm": true 181 | } 182 | ], 183 | [ 184 | "typescript", 185 | { 186 | "project": "tsconfig.build.json" 187 | } 188 | ] 189 | ] 190 | }, 191 | "codegenConfig": { 192 | "name": "RNShakeSpec", 193 | "type": "modules", 194 | "jsSrcsDir": "src", 195 | "outputDir": { 196 | "ios": "ios/generated", 197 | "android": "android/generated" 198 | }, 199 | "android": { 200 | "javaPackageName": "com.shake" 201 | }, 202 | "includesGeneratedCode": false 203 | }, 204 | "create-react-native-library": { 205 | "type": "module-mixed", 206 | "languages": "kotlin-objc", 207 | "version": "0.48.3" 208 | } 209 | } 210 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | 2 | # Contributor Covenant Code of Conduct 3 | 4 | ## Our Pledge 5 | 6 | We as members, contributors, and leaders pledge to make participation in our 7 | community a harassment-free experience for everyone, regardless of age, body 8 | size, visible or invisible disability, ethnicity, sex characteristics, gender 9 | identity and expression, level of experience, education, socio-economic status, 10 | nationality, personal appearance, race, caste, color, religion, or sexual 11 | identity and orientation. 12 | 13 | We pledge to act and interact in ways that contribute to an open, welcoming, 14 | diverse, inclusive, and healthy community. 15 | 16 | ## Our Standards 17 | 18 | Examples of behavior that contributes to a positive environment for our 19 | community include: 20 | 21 | * Demonstrating empathy and kindness toward other people 22 | * Being respectful of differing opinions, viewpoints, and experiences 23 | * Giving and gracefully accepting constructive feedback 24 | * Accepting responsibility and apologizing to those affected by our mistakes, 25 | and learning from the experience 26 | * Focusing on what is best not just for us as individuals, but for the overall 27 | community 28 | 29 | Examples of unacceptable behavior include: 30 | 31 | * The use of sexualized language or imagery, and sexual attention or advances of 32 | any kind 33 | * Trolling, insulting or derogatory comments, and personal or political attacks 34 | * Public or private harassment 35 | * Publishing others' private information, such as a physical or email address, 36 | without their explicit permission 37 | * Other conduct which could reasonably be considered inappropriate in a 38 | professional setting 39 | 40 | ## Enforcement Responsibilities 41 | 42 | Community leaders are responsible for clarifying and enforcing our standards of 43 | acceptable behavior and will take appropriate and fair corrective action in 44 | response to any behavior that they deem inappropriate, threatening, offensive, 45 | or harmful. 46 | 47 | Community leaders have the right and responsibility to remove, edit, or reject 48 | comments, commits, code, wiki edits, issues, and other contributions that are 49 | not aligned to this Code of Conduct, and will communicate reasons for moderation 50 | decisions when appropriate. 51 | 52 | ## Scope 53 | 54 | This Code of Conduct applies within all community spaces, and also applies when 55 | an individual is officially representing the community in public spaces. 56 | Examples of representing our community include using an official e-mail address, 57 | posting via an official social media account, or acting as an appointed 58 | representative at an online or offline event. 59 | 60 | ## Enforcement 61 | 62 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 63 | reported to the community leaders responsible for enforcement at 64 | [INSERT CONTACT METHOD]. 65 | All complaints will be reviewed and investigated promptly and fairly. 66 | 67 | All community leaders are obligated to respect the privacy and security of the 68 | reporter of any incident. 69 | 70 | ## Enforcement Guidelines 71 | 72 | Community leaders will follow these Community Impact Guidelines in determining 73 | the consequences for any action they deem in violation of this Code of Conduct: 74 | 75 | ### 1. Correction 76 | 77 | **Community Impact**: Use of inappropriate language or other behavior deemed 78 | unprofessional or unwelcome in the community. 79 | 80 | **Consequence**: A private, written warning from community leaders, providing 81 | clarity around the nature of the violation and an explanation of why the 82 | behavior was inappropriate. A public apology may be requested. 83 | 84 | ### 2. Warning 85 | 86 | **Community Impact**: A violation through a single incident or series of 87 | actions. 88 | 89 | **Consequence**: A warning with consequences for continued behavior. No 90 | interaction with the people involved, including unsolicited interaction with 91 | those enforcing the Code of Conduct, for a specified period of time. This 92 | includes avoiding interactions in community spaces as well as external channels 93 | like social media. Violating these terms may lead to a temporary or permanent 94 | ban. 95 | 96 | ### 3. Temporary Ban 97 | 98 | **Community Impact**: A serious violation of community standards, including 99 | sustained inappropriate behavior. 100 | 101 | **Consequence**: A temporary ban from any sort of interaction or public 102 | communication with the community for a specified period of time. No public or 103 | private interaction with the people involved, including unsolicited interaction 104 | with those enforcing the Code of Conduct, is allowed during this period. 105 | Violating these terms may lead to a permanent ban. 106 | 107 | ### 4. Permanent Ban 108 | 109 | **Community Impact**: Demonstrating a pattern of violation of community 110 | standards, including sustained inappropriate behavior, harassment of an 111 | individual, or aggression toward or disparagement of classes of individuals. 112 | 113 | **Consequence**: A permanent ban from any sort of public interaction within the 114 | community. 115 | 116 | ## Attribution 117 | 118 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 119 | version 2.1, available at 120 | [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. 121 | 122 | Community Impact Guidelines were inspired by 123 | [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. 124 | 125 | For answers to common questions about this code of conduct, see the FAQ at 126 | [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at 127 | [https://www.contributor-covenant.org/translations][translations]. 128 | 129 | [homepage]: https://www.contributor-covenant.org 130 | [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html 131 | [Mozilla CoC]: https://github.com/mozilla/diversity 132 | [FAQ]: https://www.contributor-covenant.org/faq 133 | [translations]: https://www.contributor-covenant.org/translations 134 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Contributions are always welcome, no matter how large or small! 4 | 5 | We want this community to be friendly and respectful to each other. Please follow it in all your interactions with the project. Before contributing, please read the [code of conduct](./CODE_OF_CONDUCT.md). 6 | 7 | ## Development workflow 8 | 9 | This project is a monorepo managed using [Yarn workspaces](https://yarnpkg.com/features/workspaces). It contains the following packages: 10 | 11 | - The library package in the root directory. 12 | - An example app in the `example/` directory. 13 | 14 | To get started with the project, run `yarn` in the root directory to install the required dependencies for each package: 15 | 16 | ```sh 17 | yarn 18 | ``` 19 | 20 | > Since the project relies on Yarn workspaces, you cannot use [`npm`](https://github.com/npm/cli) for development. 21 | 22 | The [example app](/example/) demonstrates usage of the library. You need to run it to test any changes you make. 23 | 24 | It is configured to use the local version of the library, so any changes you make to the library's source code will be reflected in the example app. Changes to the library's JavaScript code will be reflected in the example app without a rebuild, but native code changes will require a rebuild of the example app. 25 | 26 | If you want to use Android Studio or XCode to edit the native code, you can open the `example/android` or `example/ios` directories respectively in those editors. To edit the Objective-C or Swift files, open `example/ios/ShakeExample.xcworkspace` in XCode and find the source files at `Pods > Development Pods > react-native-shake`. 27 | 28 | To edit the Java or Kotlin files, open `example/android` in Android studio and find the source files at `react-native-shake` under `Android`. 29 | 30 | You can use various commands from the root directory to work with the project. 31 | 32 | To start the packager: 33 | 34 | ```sh 35 | yarn example start 36 | ``` 37 | 38 | To run the example app on Android: 39 | 40 | ```sh 41 | yarn example android 42 | ``` 43 | 44 | To run the example app on iOS: 45 | 46 | ```sh 47 | yarn example ios 48 | ``` 49 | 50 | By default, the example is configured to build with the old architecture. To run the example with the new architecture, you can do the following: 51 | 52 | 1. For Android, run: 53 | 54 | ```sh 55 | ORG_GRADLE_PROJECT_newArchEnabled=true yarn example android 56 | ``` 57 | 58 | 2. For iOS, run: 59 | 60 | ```sh 61 | cd example/ios 62 | RCT_NEW_ARCH_ENABLED=1 pod install 63 | cd - 64 | yarn example ios 65 | ``` 66 | 67 | If you are building for a different architecture than your previous build, make sure to remove the build folders first. You can run the following command to cleanup all build folders: 68 | 69 | ```sh 70 | yarn clean 71 | ``` 72 | 73 | To confirm that the app is running with the new architecture, you can check the Metro logs for a message like this: 74 | 75 | ```sh 76 | Running "ShakeExample" with {"fabric":true,"initialProps":{"concurrentRoot":true},"rootTag":1} 77 | ``` 78 | 79 | Note the `"fabric":true` and `"concurrentRoot":true` properties. 80 | 81 | Make sure your code passes TypeScript and ESLint. Run the following to verify: 82 | 83 | ```sh 84 | yarn typecheck 85 | yarn lint 86 | ``` 87 | 88 | To fix formatting errors, run the following: 89 | 90 | ```sh 91 | yarn lint --fix 92 | ``` 93 | 94 | Remember to add tests for your change if possible. Run the unit tests by: 95 | 96 | ```sh 97 | yarn test 98 | ``` 99 | 100 | ### Commit message convention 101 | 102 | We follow the [conventional commits specification](https://www.conventionalcommits.org/en) for our commit messages: 103 | 104 | - `fix`: bug fixes, e.g. fix crash due to deprecated method. 105 | - `feat`: new features, e.g. add new method to the module. 106 | - `refactor`: code refactor, e.g. migrate from class components to hooks. 107 | - `docs`: changes into documentation, e.g. add usage example for the module.. 108 | - `test`: adding or updating tests, e.g. add integration tests using detox. 109 | - `chore`: tooling changes, e.g. change CI config. 110 | 111 | Our pre-commit hooks verify that your commit message matches this format when committing. 112 | 113 | ### Linting and tests 114 | 115 | [ESLint](https://eslint.org/), [Prettier](https://prettier.io/), [TypeScript](https://www.typescriptlang.org/) 116 | 117 | We use [TypeScript](https://www.typescriptlang.org/) for type checking, [ESLint](https://eslint.org/) with [Prettier](https://prettier.io/) for linting and formatting the code, and [Jest](https://jestjs.io/) for testing. 118 | 119 | Our pre-commit hooks verify that the linter and tests pass when committing. 120 | 121 | ### Publishing to npm 122 | 123 | We use [release-it](https://github.com/release-it/release-it) to make it easier to publish new versions. It handles common tasks like bumping version based on semver, creating tags and releases etc. 124 | 125 | To publish new versions, run the following: 126 | 127 | ```sh 128 | yarn release 129 | ``` 130 | 131 | ### Scripts 132 | 133 | The `package.json` file contains various scripts for common tasks: 134 | 135 | - `yarn`: setup project by installing dependencies. 136 | - `yarn typecheck`: type-check files with TypeScript. 137 | - `yarn lint`: lint files with ESLint. 138 | - `yarn test`: run unit tests with Jest. 139 | - `yarn example start`: start the Metro server for the example app. 140 | - `yarn example android`: run the example app on Android. 141 | - `yarn example ios`: run the example app on iOS. 142 | 143 | ### Sending a pull request 144 | 145 | > **Working on your first pull request?** You can learn how from this _free_ series: [How to Contribute to an Open Source Project on GitHub](https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github). 146 | 147 | When you're sending a pull request: 148 | 149 | - Prefer small pull requests focused on one change. 150 | - Verify that linters and tests are passing. 151 | - Review the documentation to make sure it looks good. 152 | - Follow the pull request template when opening a pull request. 153 | - For pull requests that change the API or implementation, discuss with maintainers first by opening an issue. 154 | -------------------------------------------------------------------------------- /example/android/gradlew: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # Copyright © 2015-2021 the original authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | # 21 | # Gradle start up script for POSIX generated by Gradle. 22 | # 23 | # Important for running: 24 | # 25 | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is 26 | # noncompliant, but you have some other compliant shell such as ksh or 27 | # bash, then to run this script, type that shell name before the whole 28 | # command line, like: 29 | # 30 | # ksh Gradle 31 | # 32 | # Busybox and similar reduced shells will NOT work, because this script 33 | # requires all of these POSIX shell features: 34 | # * functions; 35 | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}», 36 | # «${var#prefix}», «${var%suffix}», and «$( cmd )»; 37 | # * compound commands having a testable exit status, especially «case»; 38 | # * various built-in commands including «command», «set», and «ulimit». 39 | # 40 | # Important for patching: 41 | # 42 | # (2) This script targets any POSIX shell, so it avoids extensions provided 43 | # by Bash, Ksh, etc; in particular arrays are avoided. 44 | # 45 | # The "traditional" practice of packing multiple parameters into a 46 | # space-separated string is a well documented source of bugs and security 47 | # problems, so this is (mostly) avoided, by progressively accumulating 48 | # options in "$@", and eventually passing that to Java. 49 | # 50 | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, 51 | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; 52 | # see the in-line comments for details. 53 | # 54 | # There are tweaks for specific operating systems such as AIX, CygWin, 55 | # Darwin, MinGW, and NonStop. 56 | # 57 | # (3) This script is generated from the Groovy template 58 | # https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt 59 | # within the Gradle project. 60 | # 61 | # You can find Gradle at https://github.com/gradle/gradle/. 62 | # 63 | ############################################################################## 64 | 65 | # Attempt to set APP_HOME 66 | 67 | # Resolve links: $0 may be a link 68 | app_path=$0 69 | 70 | # Need this for daisy-chained symlinks. 71 | while 72 | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path 73 | [ -h "$app_path" ] 74 | do 75 | ls=$( ls -ld "$app_path" ) 76 | link=${ls#*' -> '} 77 | case $link in #( 78 | /*) app_path=$link ;; #( 79 | *) app_path=$APP_HOME$link ;; 80 | esac 81 | done 82 | 83 | # This is normally unused 84 | # shellcheck disable=SC2034 85 | APP_BASE_NAME=${0##*/} 86 | # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) 87 | APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit 88 | 89 | # Use the maximum available, or set MAX_FD != -1 to use that value. 90 | MAX_FD=maximum 91 | 92 | warn () { 93 | echo "$*" 94 | } >&2 95 | 96 | die () { 97 | echo 98 | echo "$*" 99 | echo 100 | exit 1 101 | } >&2 102 | 103 | # OS specific support (must be 'true' or 'false'). 104 | cygwin=false 105 | msys=false 106 | darwin=false 107 | nonstop=false 108 | case "$( uname )" in #( 109 | CYGWIN* ) cygwin=true ;; #( 110 | Darwin* ) darwin=true ;; #( 111 | MSYS* | MINGW* ) msys=true ;; #( 112 | NONSTOP* ) nonstop=true ;; 113 | esac 114 | 115 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 116 | 117 | 118 | # Determine the Java command to use to start the JVM. 119 | if [ -n "$JAVA_HOME" ] ; then 120 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 121 | # IBM's JDK on AIX uses strange locations for the executables 122 | JAVACMD=$JAVA_HOME/jre/sh/java 123 | else 124 | JAVACMD=$JAVA_HOME/bin/java 125 | fi 126 | if [ ! -x "$JAVACMD" ] ; then 127 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 128 | 129 | Please set the JAVA_HOME variable in your environment to match the 130 | location of your Java installation." 131 | fi 132 | else 133 | JAVACMD=java 134 | if ! command -v java >/dev/null 2>&1 135 | then 136 | die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 137 | 138 | Please set the JAVA_HOME variable in your environment to match the 139 | location of your Java installation." 140 | fi 141 | fi 142 | 143 | # Increase the maximum file descriptors if we can. 144 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then 145 | case $MAX_FD in #( 146 | max*) 147 | # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. 148 | # shellcheck disable=SC2039,SC3045 149 | MAX_FD=$( ulimit -H -n ) || 150 | warn "Could not query maximum file descriptor limit" 151 | esac 152 | case $MAX_FD in #( 153 | '' | soft) :;; #( 154 | *) 155 | # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. 156 | # shellcheck disable=SC2039,SC3045 157 | ulimit -n "$MAX_FD" || 158 | warn "Could not set maximum file descriptor limit to $MAX_FD" 159 | esac 160 | fi 161 | 162 | # Collect all arguments for the java command, stacking in reverse order: 163 | # * args from the command line 164 | # * the main class name 165 | # * -classpath 166 | # * -D...appname settings 167 | # * --module-path (only if needed) 168 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. 169 | 170 | # For Cygwin or MSYS, switch paths to Windows format before running java 171 | if "$cygwin" || "$msys" ; then 172 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) 173 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) 174 | 175 | JAVACMD=$( cygpath --unix "$JAVACMD" ) 176 | 177 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 178 | for arg do 179 | if 180 | case $arg in #( 181 | -*) false ;; # don't mess with options #( 182 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath 183 | [ -e "$t" ] ;; #( 184 | *) false ;; 185 | esac 186 | then 187 | arg=$( cygpath --path --ignore --mixed "$arg" ) 188 | fi 189 | # Roll the args list around exactly as many times as the number of 190 | # args, so each arg winds up back in the position where it started, but 191 | # possibly modified. 192 | # 193 | # NB: a `for` loop captures its iteration list before it begins, so 194 | # changing the positional parameters here affects neither the number of 195 | # iterations, nor the values presented in `arg`. 196 | shift # remove old arg 197 | set -- "$@" "$arg" # push replacement arg 198 | done 199 | fi 200 | 201 | 202 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 203 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 204 | 205 | # Collect all arguments for the java command: 206 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, 207 | # and any embedded shellness will be escaped. 208 | # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be 209 | # treated as '${Hostname}' itself on the command line. 210 | 211 | set -- \ 212 | "-Dorg.gradle.appname=$APP_BASE_NAME" \ 213 | -classpath "$CLASSPATH" \ 214 | org.gradle.wrapper.GradleWrapperMain \ 215 | "$@" 216 | 217 | # Stop when "xargs" is not available. 218 | if ! command -v xargs >/dev/null 2>&1 219 | then 220 | die "xargs is not available" 221 | fi 222 | 223 | # Use "xargs" to parse quoted args. 224 | # 225 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed. 226 | # 227 | # In Bash we could simply go: 228 | # 229 | # readarray ARGS < <( xargs -n1 <<<"$var" ) && 230 | # set -- "${ARGS[@]}" "$@" 231 | # 232 | # but POSIX shell has neither arrays nor command substitution, so instead we 233 | # post-process each arg (as a line of input to sed) to backslash-escape any 234 | # character that might be a shell metacharacter, then use eval to reverse 235 | # that process (while maintaining the separation between arguments), and wrap 236 | # the whole thing up as a single "set" statement. 237 | # 238 | # This will of course break if any of these variables contains a newline or 239 | # an unmatched quote. 240 | # 241 | 242 | eval "set -- $( 243 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | 244 | xargs -n1 | 245 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | 246 | tr '\n' ' ' 247 | )" '"$@"' 248 | 249 | exec "$JAVACMD" "$@" 250 | -------------------------------------------------------------------------------- /example/ios/ShakeExample.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 54; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 00E356F31AD99517003FC87E /* ShakeExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ShakeExampleTests.m */; }; 11 | 0C80B921A6F3F58F76C31292 /* libPods-ShakeExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-ShakeExample.a */; }; 12 | 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 14 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 15 | 7699B88040F8A987B510C191 /* libPods-ShakeExample-ShakeExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-ShakeExample-ShakeExampleTests.a */; }; 16 | 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; 17 | E756178DFFF69D45B587AA67 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 9BC650B6C0FD1D493440A337 /* PrivacyInfo.xcprivacy */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXContainerItemProxy section */ 21 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { 22 | isa = PBXContainerItemProxy; 23 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 24 | proxyType = 1; 25 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A; 26 | remoteInfo = ShakeExample; 27 | }; 28 | /* End PBXContainerItemProxy section */ 29 | 30 | /* Begin PBXFileReference section */ 31 | 00E356EE1AD99517003FC87E /* ShakeExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ShakeExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 32 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 33 | 00E356F21AD99517003FC87E /* ShakeExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ShakeExampleTests.m; sourceTree = ""; }; 34 | 13B07F961A680F5B00A75B9A /* ShakeExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ShakeExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = ShakeExample/AppDelegate.h; sourceTree = ""; }; 36 | 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = ShakeExample/AppDelegate.mm; sourceTree = ""; }; 37 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ShakeExample/Images.xcassets; sourceTree = ""; }; 38 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ShakeExample/Info.plist; sourceTree = ""; }; 39 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ShakeExample/main.m; sourceTree = ""; }; 40 | 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = ShakeExample/PrivacyInfo.xcprivacy; sourceTree = ""; }; 41 | 19F6CBCC0A4E27FBF8BF4A61 /* libPods-ShakeExample-ShakeExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ShakeExample-ShakeExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | 3B4392A12AC88292D35C810B /* Pods-ShakeExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShakeExample.debug.xcconfig"; path = "Target Support Files/Pods-ShakeExample/Pods-ShakeExample.debug.xcconfig"; sourceTree = ""; }; 43 | 5709B34CF0A7D63546082F79 /* Pods-ShakeExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShakeExample.release.xcconfig"; path = "Target Support Files/Pods-ShakeExample/Pods-ShakeExample.release.xcconfig"; sourceTree = ""; }; 44 | 5B7EB9410499542E8C5724F5 /* Pods-ShakeExample-ShakeExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShakeExample-ShakeExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-ShakeExample-ShakeExampleTests/Pods-ShakeExample-ShakeExampleTests.debug.xcconfig"; sourceTree = ""; }; 45 | 5DCACB8F33CDC322A6C60F78 /* libPods-ShakeExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ShakeExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = ShakeExample/LaunchScreen.storyboard; sourceTree = ""; }; 47 | 89C6BE57DB24E9ADA2F236DE /* Pods-ShakeExample-ShakeExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShakeExample-ShakeExampleTests.release.xcconfig"; path = "Target Support Files/Pods-ShakeExample-ShakeExampleTests/Pods-ShakeExample-ShakeExampleTests.release.xcconfig"; sourceTree = ""; }; 48 | 9BC650B6C0FD1D493440A337 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = ShakeExample/PrivacyInfo.xcprivacy; sourceTree = ""; }; 49 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; 50 | /* End PBXFileReference section */ 51 | 52 | /* Begin PBXFrameworksBuildPhase section */ 53 | 00E356EB1AD99517003FC87E /* Frameworks */ = { 54 | isa = PBXFrameworksBuildPhase; 55 | buildActionMask = 2147483647; 56 | files = ( 57 | 7699B88040F8A987B510C191 /* libPods-ShakeExample-ShakeExampleTests.a in Frameworks */, 58 | ); 59 | runOnlyForDeploymentPostprocessing = 0; 60 | }; 61 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { 62 | isa = PBXFrameworksBuildPhase; 63 | buildActionMask = 2147483647; 64 | files = ( 65 | 0C80B921A6F3F58F76C31292 /* libPods-ShakeExample.a in Frameworks */, 66 | ); 67 | runOnlyForDeploymentPostprocessing = 0; 68 | }; 69 | /* End PBXFrameworksBuildPhase section */ 70 | 71 | /* Begin PBXGroup section */ 72 | 00E356EF1AD99517003FC87E /* ShakeExampleTests */ = { 73 | isa = PBXGroup; 74 | children = ( 75 | 00E356F21AD99517003FC87E /* ShakeExampleTests.m */, 76 | 00E356F01AD99517003FC87E /* Supporting Files */, 77 | ); 78 | path = ShakeExampleTests; 79 | sourceTree = ""; 80 | }; 81 | 00E356F01AD99517003FC87E /* Supporting Files */ = { 82 | isa = PBXGroup; 83 | children = ( 84 | 00E356F11AD99517003FC87E /* Info.plist */, 85 | ); 86 | name = "Supporting Files"; 87 | sourceTree = ""; 88 | }; 89 | 13B07FAE1A68108700A75B9A /* ShakeExample */ = { 90 | isa = PBXGroup; 91 | children = ( 92 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 93 | 13B07FB01A68108700A75B9A /* AppDelegate.mm */, 94 | 13B07FB51A68108700A75B9A /* Images.xcassets */, 95 | 13B07FB61A68108700A75B9A /* Info.plist */, 96 | 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, 97 | 13B07FB71A68108700A75B9A /* main.m */, 98 | 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */, 99 | 9BC650B6C0FD1D493440A337 /* PrivacyInfo.xcprivacy */, 100 | ); 101 | name = ShakeExample; 102 | sourceTree = ""; 103 | }; 104 | 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { 105 | isa = PBXGroup; 106 | children = ( 107 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */, 108 | 5DCACB8F33CDC322A6C60F78 /* libPods-ShakeExample.a */, 109 | 19F6CBCC0A4E27FBF8BF4A61 /* libPods-ShakeExample-ShakeExampleTests.a */, 110 | ); 111 | name = Frameworks; 112 | sourceTree = ""; 113 | }; 114 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = { 115 | isa = PBXGroup; 116 | children = ( 117 | ); 118 | name = Libraries; 119 | sourceTree = ""; 120 | }; 121 | 83CBB9F61A601CBA00E9B192 = { 122 | isa = PBXGroup; 123 | children = ( 124 | 13B07FAE1A68108700A75B9A /* ShakeExample */, 125 | 832341AE1AAA6A7D00B99B32 /* Libraries */, 126 | 00E356EF1AD99517003FC87E /* ShakeExampleTests */, 127 | 83CBBA001A601CBA00E9B192 /* Products */, 128 | 2D16E6871FA4F8E400B85C8A /* Frameworks */, 129 | BBD78D7AC51CEA395F1C20DB /* Pods */, 130 | ); 131 | indentWidth = 2; 132 | sourceTree = ""; 133 | tabWidth = 2; 134 | usesTabs = 0; 135 | }; 136 | 83CBBA001A601CBA00E9B192 /* Products */ = { 137 | isa = PBXGroup; 138 | children = ( 139 | 13B07F961A680F5B00A75B9A /* ShakeExample.app */, 140 | 00E356EE1AD99517003FC87E /* ShakeExampleTests.xctest */, 141 | ); 142 | name = Products; 143 | sourceTree = ""; 144 | }; 145 | BBD78D7AC51CEA395F1C20DB /* Pods */ = { 146 | isa = PBXGroup; 147 | children = ( 148 | 3B4392A12AC88292D35C810B /* Pods-ShakeExample.debug.xcconfig */, 149 | 5709B34CF0A7D63546082F79 /* Pods-ShakeExample.release.xcconfig */, 150 | 5B7EB9410499542E8C5724F5 /* Pods-ShakeExample-ShakeExampleTests.debug.xcconfig */, 151 | 89C6BE57DB24E9ADA2F236DE /* Pods-ShakeExample-ShakeExampleTests.release.xcconfig */, 152 | ); 153 | path = Pods; 154 | sourceTree = ""; 155 | }; 156 | /* End PBXGroup section */ 157 | 158 | /* Begin PBXNativeTarget section */ 159 | 00E356ED1AD99517003FC87E /* ShakeExampleTests */ = { 160 | isa = PBXNativeTarget; 161 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ShakeExampleTests" */; 162 | buildPhases = ( 163 | A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */, 164 | 00E356EA1AD99517003FC87E /* Sources */, 165 | 00E356EB1AD99517003FC87E /* Frameworks */, 166 | 00E356EC1AD99517003FC87E /* Resources */, 167 | C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */, 168 | F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */, 169 | ); 170 | buildRules = ( 171 | ); 172 | dependencies = ( 173 | 00E356F51AD99517003FC87E /* PBXTargetDependency */, 174 | ); 175 | name = ShakeExampleTests; 176 | productName = ShakeExampleTests; 177 | productReference = 00E356EE1AD99517003FC87E /* ShakeExampleTests.xctest */; 178 | productType = "com.apple.product-type.bundle.unit-test"; 179 | }; 180 | 13B07F861A680F5B00A75B9A /* ShakeExample */ = { 181 | isa = PBXNativeTarget; 182 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ShakeExample" */; 183 | buildPhases = ( 184 | C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, 185 | 13B07F871A680F5B00A75B9A /* Sources */, 186 | 13B07F8C1A680F5B00A75B9A /* Frameworks */, 187 | 13B07F8E1A680F5B00A75B9A /* Resources */, 188 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 189 | 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, 190 | E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, 191 | ); 192 | buildRules = ( 193 | ); 194 | dependencies = ( 195 | ); 196 | name = ShakeExample; 197 | productName = ShakeExample; 198 | productReference = 13B07F961A680F5B00A75B9A /* ShakeExample.app */; 199 | productType = "com.apple.product-type.application"; 200 | }; 201 | /* End PBXNativeTarget section */ 202 | 203 | /* Begin PBXProject section */ 204 | 83CBB9F71A601CBA00E9B192 /* Project object */ = { 205 | isa = PBXProject; 206 | attributes = { 207 | LastUpgradeCheck = 1210; 208 | TargetAttributes = { 209 | 00E356ED1AD99517003FC87E = { 210 | CreatedOnToolsVersion = 6.2; 211 | TestTargetID = 13B07F861A680F5B00A75B9A; 212 | }; 213 | 13B07F861A680F5B00A75B9A = { 214 | LastSwiftMigration = 1120; 215 | }; 216 | }; 217 | }; 218 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ShakeExample" */; 219 | compatibilityVersion = "Xcode 12.0"; 220 | developmentRegion = en; 221 | hasScannedForEncodings = 0; 222 | knownRegions = ( 223 | en, 224 | Base, 225 | ); 226 | mainGroup = 83CBB9F61A601CBA00E9B192; 227 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; 228 | projectDirPath = ""; 229 | projectRoot = ""; 230 | targets = ( 231 | 13B07F861A680F5B00A75B9A /* ShakeExample */, 232 | 00E356ED1AD99517003FC87E /* ShakeExampleTests */, 233 | ); 234 | }; 235 | /* End PBXProject section */ 236 | 237 | /* Begin PBXResourcesBuildPhase section */ 238 | 00E356EC1AD99517003FC87E /* Resources */ = { 239 | isa = PBXResourcesBuildPhase; 240 | buildActionMask = 2147483647; 241 | files = ( 242 | ); 243 | runOnlyForDeploymentPostprocessing = 0; 244 | }; 245 | 13B07F8E1A680F5B00A75B9A /* Resources */ = { 246 | isa = PBXResourcesBuildPhase; 247 | buildActionMask = 2147483647; 248 | files = ( 249 | 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, 250 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 251 | E756178DFFF69D45B587AA67 /* PrivacyInfo.xcprivacy in Resources */, 252 | ); 253 | runOnlyForDeploymentPostprocessing = 0; 254 | }; 255 | /* End PBXResourcesBuildPhase section */ 256 | 257 | /* Begin PBXShellScriptBuildPhase section */ 258 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { 259 | isa = PBXShellScriptBuildPhase; 260 | buildActionMask = 2147483647; 261 | files = ( 262 | ); 263 | inputPaths = ( 264 | "$(SRCROOT)/.xcode.env.local", 265 | "$(SRCROOT)/.xcode.env", 266 | ); 267 | name = "Bundle React Native code and images"; 268 | outputPaths = ( 269 | ); 270 | runOnlyForDeploymentPostprocessing = 0; 271 | shellPath = /bin/sh; 272 | shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; 273 | }; 274 | 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { 275 | isa = PBXShellScriptBuildPhase; 276 | buildActionMask = 2147483647; 277 | files = ( 278 | ); 279 | inputFileListPaths = ( 280 | "${PODS_ROOT}/Target Support Files/Pods-ShakeExample/Pods-ShakeExample-frameworks-${CONFIGURATION}-input-files.xcfilelist", 281 | ); 282 | name = "[CP] Embed Pods Frameworks"; 283 | outputFileListPaths = ( 284 | "${PODS_ROOT}/Target Support Files/Pods-ShakeExample/Pods-ShakeExample-frameworks-${CONFIGURATION}-output-files.xcfilelist", 285 | ); 286 | runOnlyForDeploymentPostprocessing = 0; 287 | shellPath = /bin/sh; 288 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ShakeExample/Pods-ShakeExample-frameworks.sh\"\n"; 289 | showEnvVarsInLog = 0; 290 | }; 291 | A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = { 292 | isa = PBXShellScriptBuildPhase; 293 | buildActionMask = 2147483647; 294 | files = ( 295 | ); 296 | inputFileListPaths = ( 297 | ); 298 | inputPaths = ( 299 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 300 | "${PODS_ROOT}/Manifest.lock", 301 | ); 302 | name = "[CP] Check Pods Manifest.lock"; 303 | outputFileListPaths = ( 304 | ); 305 | outputPaths = ( 306 | "$(DERIVED_FILE_DIR)/Pods-ShakeExample-ShakeExampleTests-checkManifestLockResult.txt", 307 | ); 308 | runOnlyForDeploymentPostprocessing = 0; 309 | shellPath = /bin/sh; 310 | 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"; 311 | showEnvVarsInLog = 0; 312 | }; 313 | C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { 314 | isa = PBXShellScriptBuildPhase; 315 | buildActionMask = 2147483647; 316 | files = ( 317 | ); 318 | inputFileListPaths = ( 319 | ); 320 | inputPaths = ( 321 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 322 | "${PODS_ROOT}/Manifest.lock", 323 | ); 324 | name = "[CP] Check Pods Manifest.lock"; 325 | outputFileListPaths = ( 326 | ); 327 | outputPaths = ( 328 | "$(DERIVED_FILE_DIR)/Pods-ShakeExample-checkManifestLockResult.txt", 329 | ); 330 | runOnlyForDeploymentPostprocessing = 0; 331 | shellPath = /bin/sh; 332 | 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"; 333 | showEnvVarsInLog = 0; 334 | }; 335 | C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = { 336 | isa = PBXShellScriptBuildPhase; 337 | buildActionMask = 2147483647; 338 | files = ( 339 | ); 340 | inputFileListPaths = ( 341 | "${PODS_ROOT}/Target Support Files/Pods-ShakeExample-ShakeExampleTests/Pods-ShakeExample-ShakeExampleTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", 342 | ); 343 | name = "[CP] Embed Pods Frameworks"; 344 | outputFileListPaths = ( 345 | "${PODS_ROOT}/Target Support Files/Pods-ShakeExample-ShakeExampleTests/Pods-ShakeExample-ShakeExampleTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", 346 | ); 347 | runOnlyForDeploymentPostprocessing = 0; 348 | shellPath = /bin/sh; 349 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ShakeExample-ShakeExampleTests/Pods-ShakeExample-ShakeExampleTests-frameworks.sh\"\n"; 350 | showEnvVarsInLog = 0; 351 | }; 352 | E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { 353 | isa = PBXShellScriptBuildPhase; 354 | buildActionMask = 2147483647; 355 | files = ( 356 | ); 357 | inputFileListPaths = ( 358 | "${PODS_ROOT}/Target Support Files/Pods-ShakeExample/Pods-ShakeExample-resources-${CONFIGURATION}-input-files.xcfilelist", 359 | ); 360 | name = "[CP] Copy Pods Resources"; 361 | outputFileListPaths = ( 362 | "${PODS_ROOT}/Target Support Files/Pods-ShakeExample/Pods-ShakeExample-resources-${CONFIGURATION}-output-files.xcfilelist", 363 | ); 364 | runOnlyForDeploymentPostprocessing = 0; 365 | shellPath = /bin/sh; 366 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ShakeExample/Pods-ShakeExample-resources.sh\"\n"; 367 | showEnvVarsInLog = 0; 368 | }; 369 | F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = { 370 | isa = PBXShellScriptBuildPhase; 371 | buildActionMask = 2147483647; 372 | files = ( 373 | ); 374 | inputFileListPaths = ( 375 | "${PODS_ROOT}/Target Support Files/Pods-ShakeExample-ShakeExampleTests/Pods-ShakeExample-ShakeExampleTests-resources-${CONFIGURATION}-input-files.xcfilelist", 376 | ); 377 | name = "[CP] Copy Pods Resources"; 378 | outputFileListPaths = ( 379 | "${PODS_ROOT}/Target Support Files/Pods-ShakeExample-ShakeExampleTests/Pods-ShakeExample-ShakeExampleTests-resources-${CONFIGURATION}-output-files.xcfilelist", 380 | ); 381 | runOnlyForDeploymentPostprocessing = 0; 382 | shellPath = /bin/sh; 383 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ShakeExample-ShakeExampleTests/Pods-ShakeExample-ShakeExampleTests-resources.sh\"\n"; 384 | showEnvVarsInLog = 0; 385 | }; 386 | /* End PBXShellScriptBuildPhase section */ 387 | 388 | /* Begin PBXSourcesBuildPhase section */ 389 | 00E356EA1AD99517003FC87E /* Sources */ = { 390 | isa = PBXSourcesBuildPhase; 391 | buildActionMask = 2147483647; 392 | files = ( 393 | 00E356F31AD99517003FC87E /* ShakeExampleTests.m in Sources */, 394 | ); 395 | runOnlyForDeploymentPostprocessing = 0; 396 | }; 397 | 13B07F871A680F5B00A75B9A /* Sources */ = { 398 | isa = PBXSourcesBuildPhase; 399 | buildActionMask = 2147483647; 400 | files = ( 401 | 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, 402 | 13B07FC11A68108700A75B9A /* main.m in Sources */, 403 | ); 404 | runOnlyForDeploymentPostprocessing = 0; 405 | }; 406 | /* End PBXSourcesBuildPhase section */ 407 | 408 | /* Begin PBXTargetDependency section */ 409 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { 410 | isa = PBXTargetDependency; 411 | target = 13B07F861A680F5B00A75B9A /* ShakeExample */; 412 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; 413 | }; 414 | /* End PBXTargetDependency section */ 415 | 416 | /* Begin XCBuildConfiguration section */ 417 | 00E356F61AD99517003FC87E /* Debug */ = { 418 | isa = XCBuildConfiguration; 419 | baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-ShakeExample-ShakeExampleTests.debug.xcconfig */; 420 | buildSettings = { 421 | BUNDLE_LOADER = "$(TEST_HOST)"; 422 | GCC_PREPROCESSOR_DEFINITIONS = ( 423 | "DEBUG=1", 424 | "$(inherited)", 425 | ); 426 | INFOPLIST_FILE = ShakeExampleTests/Info.plist; 427 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 428 | LD_RUNPATH_SEARCH_PATHS = ( 429 | "$(inherited)", 430 | "@executable_path/Frameworks", 431 | "@loader_path/Frameworks", 432 | ); 433 | OTHER_LDFLAGS = ( 434 | "-ObjC", 435 | "-lc++", 436 | "$(inherited)", 437 | ); 438 | PRODUCT_BUNDLE_IDENTIFIER = shake.example; 439 | PRODUCT_NAME = "$(TARGET_NAME)"; 440 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ShakeExample.app/ShakeExample"; 441 | }; 442 | name = Debug; 443 | }; 444 | 00E356F71AD99517003FC87E /* Release */ = { 445 | isa = XCBuildConfiguration; 446 | baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-ShakeExample-ShakeExampleTests.release.xcconfig */; 447 | buildSettings = { 448 | BUNDLE_LOADER = "$(TEST_HOST)"; 449 | COPY_PHASE_STRIP = NO; 450 | INFOPLIST_FILE = ShakeExampleTests/Info.plist; 451 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 452 | LD_RUNPATH_SEARCH_PATHS = ( 453 | "$(inherited)", 454 | "@executable_path/Frameworks", 455 | "@loader_path/Frameworks", 456 | ); 457 | OTHER_LDFLAGS = ( 458 | "-ObjC", 459 | "-lc++", 460 | "$(inherited)", 461 | ); 462 | PRODUCT_BUNDLE_IDENTIFIER = shake.example; 463 | PRODUCT_NAME = "$(TARGET_NAME)"; 464 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ShakeExample.app/ShakeExample"; 465 | }; 466 | name = Release; 467 | }; 468 | 13B07F941A680F5B00A75B9A /* Debug */ = { 469 | isa = XCBuildConfiguration; 470 | baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-ShakeExample.debug.xcconfig */; 471 | buildSettings = { 472 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 473 | CLANG_ENABLE_MODULES = YES; 474 | CURRENT_PROJECT_VERSION = 1; 475 | ENABLE_BITCODE = NO; 476 | INFOPLIST_FILE = ShakeExample/Info.plist; 477 | LD_RUNPATH_SEARCH_PATHS = ( 478 | "$(inherited)", 479 | "@executable_path/Frameworks", 480 | ); 481 | MARKETING_VERSION = 1.0; 482 | OTHER_LDFLAGS = ( 483 | "$(inherited)", 484 | "-ObjC", 485 | "-lc++", 486 | ); 487 | PRODUCT_BUNDLE_IDENTIFIER = shake.example; 488 | PRODUCT_NAME = ShakeExample; 489 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 490 | SWIFT_VERSION = 5.0; 491 | VERSIONING_SYSTEM = "apple-generic"; 492 | }; 493 | name = Debug; 494 | }; 495 | 13B07F951A680F5B00A75B9A /* Release */ = { 496 | isa = XCBuildConfiguration; 497 | baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-ShakeExample.release.xcconfig */; 498 | buildSettings = { 499 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 500 | CLANG_ENABLE_MODULES = YES; 501 | CURRENT_PROJECT_VERSION = 1; 502 | INFOPLIST_FILE = ShakeExample/Info.plist; 503 | LD_RUNPATH_SEARCH_PATHS = ( 504 | "$(inherited)", 505 | "@executable_path/Frameworks", 506 | ); 507 | MARKETING_VERSION = 1.0; 508 | OTHER_LDFLAGS = ( 509 | "$(inherited)", 510 | "-ObjC", 511 | "-lc++", 512 | ); 513 | PRODUCT_BUNDLE_IDENTIFIER = shake.example; 514 | PRODUCT_NAME = ShakeExample; 515 | SWIFT_VERSION = 5.0; 516 | VERSIONING_SYSTEM = "apple-generic"; 517 | }; 518 | name = Release; 519 | }; 520 | 83CBBA201A601CBA00E9B192 /* Debug */ = { 521 | isa = XCBuildConfiguration; 522 | buildSettings = { 523 | ALWAYS_SEARCH_USER_PATHS = NO; 524 | CC = ""; 525 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 526 | CLANG_CXX_LANGUAGE_STANDARD = "c++20"; 527 | CLANG_CXX_LIBRARY = "libc++"; 528 | CLANG_ENABLE_MODULES = YES; 529 | CLANG_ENABLE_OBJC_ARC = YES; 530 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 531 | CLANG_WARN_BOOL_CONVERSION = YES; 532 | CLANG_WARN_COMMA = YES; 533 | CLANG_WARN_CONSTANT_CONVERSION = YES; 534 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 535 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 536 | CLANG_WARN_EMPTY_BODY = YES; 537 | CLANG_WARN_ENUM_CONVERSION = YES; 538 | CLANG_WARN_INFINITE_RECURSION = YES; 539 | CLANG_WARN_INT_CONVERSION = YES; 540 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 541 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 542 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 543 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 544 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 545 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 546 | CLANG_WARN_STRICT_PROTOTYPES = YES; 547 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 548 | CLANG_WARN_UNREACHABLE_CODE = YES; 549 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 550 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 551 | COPY_PHASE_STRIP = NO; 552 | CXX = ""; 553 | ENABLE_STRICT_OBJC_MSGSEND = YES; 554 | ENABLE_TESTABILITY = YES; 555 | "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; 556 | GCC_C_LANGUAGE_STANDARD = gnu99; 557 | GCC_DYNAMIC_NO_PIC = NO; 558 | GCC_NO_COMMON_BLOCKS = YES; 559 | GCC_OPTIMIZATION_LEVEL = 0; 560 | GCC_PREPROCESSOR_DEFINITIONS = ( 561 | "DEBUG=1", 562 | "$(inherited)", 563 | ); 564 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 565 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 566 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 567 | GCC_WARN_UNDECLARED_SELECTOR = YES; 568 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 569 | GCC_WARN_UNUSED_FUNCTION = YES; 570 | GCC_WARN_UNUSED_VARIABLE = YES; 571 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 572 | LD = ""; 573 | LDPLUSPLUS = ""; 574 | LD_RUNPATH_SEARCH_PATHS = ( 575 | /usr/lib/swift, 576 | "$(inherited)", 577 | ); 578 | LIBRARY_SEARCH_PATHS = ( 579 | "\"$(SDKROOT)/usr/lib/swift\"", 580 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", 581 | "\"$(inherited)\"", 582 | ); 583 | MTL_ENABLE_DEBUG_INFO = YES; 584 | ONLY_ACTIVE_ARCH = YES; 585 | OTHER_CPLUSPLUSFLAGS = ( 586 | "$(OTHER_CFLAGS)", 587 | "-DFOLLY_NO_CONFIG", 588 | "-DFOLLY_MOBILE=1", 589 | "-DFOLLY_USE_LIBCPP=1", 590 | "-DFOLLY_CFG_NO_COROUTINES=1", 591 | "-DFOLLY_HAVE_CLOCK_GETTIME=1", 592 | ); 593 | OTHER_LDFLAGS = ( 594 | "$(inherited)", 595 | " ", 596 | ); 597 | REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; 598 | SDKROOT = iphoneos; 599 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; 600 | USE_HERMES = true; 601 | }; 602 | name = Debug; 603 | }; 604 | 83CBBA211A601CBA00E9B192 /* Release */ = { 605 | isa = XCBuildConfiguration; 606 | buildSettings = { 607 | ALWAYS_SEARCH_USER_PATHS = NO; 608 | CC = ""; 609 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 610 | CLANG_CXX_LANGUAGE_STANDARD = "c++20"; 611 | CLANG_CXX_LIBRARY = "libc++"; 612 | CLANG_ENABLE_MODULES = YES; 613 | CLANG_ENABLE_OBJC_ARC = YES; 614 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 615 | CLANG_WARN_BOOL_CONVERSION = YES; 616 | CLANG_WARN_COMMA = YES; 617 | CLANG_WARN_CONSTANT_CONVERSION = YES; 618 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 619 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 620 | CLANG_WARN_EMPTY_BODY = YES; 621 | CLANG_WARN_ENUM_CONVERSION = YES; 622 | CLANG_WARN_INFINITE_RECURSION = YES; 623 | CLANG_WARN_INT_CONVERSION = YES; 624 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 625 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 626 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 627 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 628 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 629 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 630 | CLANG_WARN_STRICT_PROTOTYPES = YES; 631 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 632 | CLANG_WARN_UNREACHABLE_CODE = YES; 633 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 634 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 635 | COPY_PHASE_STRIP = YES; 636 | CXX = ""; 637 | ENABLE_NS_ASSERTIONS = NO; 638 | ENABLE_STRICT_OBJC_MSGSEND = YES; 639 | "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; 640 | GCC_C_LANGUAGE_STANDARD = gnu99; 641 | GCC_NO_COMMON_BLOCKS = YES; 642 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 643 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 644 | GCC_WARN_UNDECLARED_SELECTOR = YES; 645 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 646 | GCC_WARN_UNUSED_FUNCTION = YES; 647 | GCC_WARN_UNUSED_VARIABLE = YES; 648 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 649 | LD = ""; 650 | LDPLUSPLUS = ""; 651 | LD_RUNPATH_SEARCH_PATHS = ( 652 | /usr/lib/swift, 653 | "$(inherited)", 654 | ); 655 | LIBRARY_SEARCH_PATHS = ( 656 | "\"$(SDKROOT)/usr/lib/swift\"", 657 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", 658 | "\"$(inherited)\"", 659 | ); 660 | MTL_ENABLE_DEBUG_INFO = NO; 661 | OTHER_CPLUSPLUSFLAGS = ( 662 | "$(OTHER_CFLAGS)", 663 | "-DFOLLY_NO_CONFIG", 664 | "-DFOLLY_MOBILE=1", 665 | "-DFOLLY_USE_LIBCPP=1", 666 | "-DFOLLY_CFG_NO_COROUTINES=1", 667 | "-DFOLLY_HAVE_CLOCK_GETTIME=1", 668 | ); 669 | OTHER_LDFLAGS = ( 670 | "$(inherited)", 671 | " ", 672 | ); 673 | REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; 674 | SDKROOT = iphoneos; 675 | USE_HERMES = true; 676 | VALIDATE_PRODUCT = YES; 677 | }; 678 | name = Release; 679 | }; 680 | /* End XCBuildConfiguration section */ 681 | 682 | /* Begin XCConfigurationList section */ 683 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ShakeExampleTests" */ = { 684 | isa = XCConfigurationList; 685 | buildConfigurations = ( 686 | 00E356F61AD99517003FC87E /* Debug */, 687 | 00E356F71AD99517003FC87E /* Release */, 688 | ); 689 | defaultConfigurationIsVisible = 0; 690 | defaultConfigurationName = Release; 691 | }; 692 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ShakeExample" */ = { 693 | isa = XCConfigurationList; 694 | buildConfigurations = ( 695 | 13B07F941A680F5B00A75B9A /* Debug */, 696 | 13B07F951A680F5B00A75B9A /* Release */, 697 | ); 698 | defaultConfigurationIsVisible = 0; 699 | defaultConfigurationName = Release; 700 | }; 701 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ShakeExample" */ = { 702 | isa = XCConfigurationList; 703 | buildConfigurations = ( 704 | 83CBBA201A601CBA00E9B192 /* Debug */, 705 | 83CBBA211A601CBA00E9B192 /* Release */, 706 | ); 707 | defaultConfigurationIsVisible = 0; 708 | defaultConfigurationName = Release; 709 | }; 710 | /* End XCConfigurationList section */ 711 | }; 712 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; 713 | } 714 | -------------------------------------------------------------------------------- /example/ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - boost (1.84.0) 3 | - DoubleConversion (1.1.6) 4 | - fast_float (6.1.4) 5 | - FBLazyVector (0.79.2) 6 | - fmt (11.0.2) 7 | - glog (0.3.5) 8 | - hermes-engine (0.79.2): 9 | - hermes-engine/Pre-built (= 0.79.2) 10 | - hermes-engine/Pre-built (0.79.2) 11 | - RCT-Folly (2024.11.18.00): 12 | - boost 13 | - DoubleConversion 14 | - fast_float (= 6.1.4) 15 | - fmt (= 11.0.2) 16 | - glog 17 | - RCT-Folly/Default (= 2024.11.18.00) 18 | - RCT-Folly/Default (2024.11.18.00): 19 | - boost 20 | - DoubleConversion 21 | - fast_float (= 6.1.4) 22 | - fmt (= 11.0.2) 23 | - glog 24 | - RCT-Folly/Fabric (2024.11.18.00): 25 | - boost 26 | - DoubleConversion 27 | - fast_float (= 6.1.4) 28 | - fmt (= 11.0.2) 29 | - glog 30 | - RCTDeprecation (0.79.2) 31 | - RCTRequired (0.79.2) 32 | - RCTTypeSafety (0.79.2): 33 | - FBLazyVector (= 0.79.2) 34 | - RCTRequired (= 0.79.2) 35 | - React-Core (= 0.79.2) 36 | - React (0.79.2): 37 | - React-Core (= 0.79.2) 38 | - React-Core/DevSupport (= 0.79.2) 39 | - React-Core/RCTWebSocket (= 0.79.2) 40 | - React-RCTActionSheet (= 0.79.2) 41 | - React-RCTAnimation (= 0.79.2) 42 | - React-RCTBlob (= 0.79.2) 43 | - React-RCTImage (= 0.79.2) 44 | - React-RCTLinking (= 0.79.2) 45 | - React-RCTNetwork (= 0.79.2) 46 | - React-RCTSettings (= 0.79.2) 47 | - React-RCTText (= 0.79.2) 48 | - React-RCTVibration (= 0.79.2) 49 | - React-callinvoker (0.79.2) 50 | - React-Core (0.79.2): 51 | - glog 52 | - hermes-engine 53 | - RCT-Folly (= 2024.11.18.00) 54 | - RCTDeprecation 55 | - React-Core/Default (= 0.79.2) 56 | - React-cxxreact 57 | - React-featureflags 58 | - React-hermes 59 | - React-jsi 60 | - React-jsiexecutor 61 | - React-jsinspector 62 | - React-jsitooling 63 | - React-perflogger 64 | - React-runtimescheduler 65 | - React-utils 66 | - SocketRocket (= 0.7.1) 67 | - Yoga 68 | - React-Core/CoreModulesHeaders (0.79.2): 69 | - glog 70 | - hermes-engine 71 | - RCT-Folly (= 2024.11.18.00) 72 | - RCTDeprecation 73 | - React-Core/Default 74 | - React-cxxreact 75 | - React-featureflags 76 | - React-hermes 77 | - React-jsi 78 | - React-jsiexecutor 79 | - React-jsinspector 80 | - React-jsitooling 81 | - React-perflogger 82 | - React-runtimescheduler 83 | - React-utils 84 | - SocketRocket (= 0.7.1) 85 | - Yoga 86 | - React-Core/Default (0.79.2): 87 | - glog 88 | - hermes-engine 89 | - RCT-Folly (= 2024.11.18.00) 90 | - RCTDeprecation 91 | - React-cxxreact 92 | - React-featureflags 93 | - React-hermes 94 | - React-jsi 95 | - React-jsiexecutor 96 | - React-jsinspector 97 | - React-jsitooling 98 | - React-perflogger 99 | - React-runtimescheduler 100 | - React-utils 101 | - SocketRocket (= 0.7.1) 102 | - Yoga 103 | - React-Core/DevSupport (0.79.2): 104 | - glog 105 | - hermes-engine 106 | - RCT-Folly (= 2024.11.18.00) 107 | - RCTDeprecation 108 | - React-Core/Default (= 0.79.2) 109 | - React-Core/RCTWebSocket (= 0.79.2) 110 | - React-cxxreact 111 | - React-featureflags 112 | - React-hermes 113 | - React-jsi 114 | - React-jsiexecutor 115 | - React-jsinspector 116 | - React-jsitooling 117 | - React-perflogger 118 | - React-runtimescheduler 119 | - React-utils 120 | - SocketRocket (= 0.7.1) 121 | - Yoga 122 | - React-Core/RCTActionSheetHeaders (0.79.2): 123 | - glog 124 | - hermes-engine 125 | - RCT-Folly (= 2024.11.18.00) 126 | - RCTDeprecation 127 | - React-Core/Default 128 | - React-cxxreact 129 | - React-featureflags 130 | - React-hermes 131 | - React-jsi 132 | - React-jsiexecutor 133 | - React-jsinspector 134 | - React-jsitooling 135 | - React-perflogger 136 | - React-runtimescheduler 137 | - React-utils 138 | - SocketRocket (= 0.7.1) 139 | - Yoga 140 | - React-Core/RCTAnimationHeaders (0.79.2): 141 | - glog 142 | - hermes-engine 143 | - RCT-Folly (= 2024.11.18.00) 144 | - RCTDeprecation 145 | - React-Core/Default 146 | - React-cxxreact 147 | - React-featureflags 148 | - React-hermes 149 | - React-jsi 150 | - React-jsiexecutor 151 | - React-jsinspector 152 | - React-jsitooling 153 | - React-perflogger 154 | - React-runtimescheduler 155 | - React-utils 156 | - SocketRocket (= 0.7.1) 157 | - Yoga 158 | - React-Core/RCTBlobHeaders (0.79.2): 159 | - glog 160 | - hermes-engine 161 | - RCT-Folly (= 2024.11.18.00) 162 | - RCTDeprecation 163 | - React-Core/Default 164 | - React-cxxreact 165 | - React-featureflags 166 | - React-hermes 167 | - React-jsi 168 | - React-jsiexecutor 169 | - React-jsinspector 170 | - React-jsitooling 171 | - React-perflogger 172 | - React-runtimescheduler 173 | - React-utils 174 | - SocketRocket (= 0.7.1) 175 | - Yoga 176 | - React-Core/RCTImageHeaders (0.79.2): 177 | - glog 178 | - hermes-engine 179 | - RCT-Folly (= 2024.11.18.00) 180 | - RCTDeprecation 181 | - React-Core/Default 182 | - React-cxxreact 183 | - React-featureflags 184 | - React-hermes 185 | - React-jsi 186 | - React-jsiexecutor 187 | - React-jsinspector 188 | - React-jsitooling 189 | - React-perflogger 190 | - React-runtimescheduler 191 | - React-utils 192 | - SocketRocket (= 0.7.1) 193 | - Yoga 194 | - React-Core/RCTLinkingHeaders (0.79.2): 195 | - glog 196 | - hermes-engine 197 | - RCT-Folly (= 2024.11.18.00) 198 | - RCTDeprecation 199 | - React-Core/Default 200 | - React-cxxreact 201 | - React-featureflags 202 | - React-hermes 203 | - React-jsi 204 | - React-jsiexecutor 205 | - React-jsinspector 206 | - React-jsitooling 207 | - React-perflogger 208 | - React-runtimescheduler 209 | - React-utils 210 | - SocketRocket (= 0.7.1) 211 | - Yoga 212 | - React-Core/RCTNetworkHeaders (0.79.2): 213 | - glog 214 | - hermes-engine 215 | - RCT-Folly (= 2024.11.18.00) 216 | - RCTDeprecation 217 | - React-Core/Default 218 | - React-cxxreact 219 | - React-featureflags 220 | - React-hermes 221 | - React-jsi 222 | - React-jsiexecutor 223 | - React-jsinspector 224 | - React-jsitooling 225 | - React-perflogger 226 | - React-runtimescheduler 227 | - React-utils 228 | - SocketRocket (= 0.7.1) 229 | - Yoga 230 | - React-Core/RCTSettingsHeaders (0.79.2): 231 | - glog 232 | - hermes-engine 233 | - RCT-Folly (= 2024.11.18.00) 234 | - RCTDeprecation 235 | - React-Core/Default 236 | - React-cxxreact 237 | - React-featureflags 238 | - React-hermes 239 | - React-jsi 240 | - React-jsiexecutor 241 | - React-jsinspector 242 | - React-jsitooling 243 | - React-perflogger 244 | - React-runtimescheduler 245 | - React-utils 246 | - SocketRocket (= 0.7.1) 247 | - Yoga 248 | - React-Core/RCTTextHeaders (0.79.2): 249 | - glog 250 | - hermes-engine 251 | - RCT-Folly (= 2024.11.18.00) 252 | - RCTDeprecation 253 | - React-Core/Default 254 | - React-cxxreact 255 | - React-featureflags 256 | - React-hermes 257 | - React-jsi 258 | - React-jsiexecutor 259 | - React-jsinspector 260 | - React-jsitooling 261 | - React-perflogger 262 | - React-runtimescheduler 263 | - React-utils 264 | - SocketRocket (= 0.7.1) 265 | - Yoga 266 | - React-Core/RCTVibrationHeaders (0.79.2): 267 | - glog 268 | - hermes-engine 269 | - RCT-Folly (= 2024.11.18.00) 270 | - RCTDeprecation 271 | - React-Core/Default 272 | - React-cxxreact 273 | - React-featureflags 274 | - React-hermes 275 | - React-jsi 276 | - React-jsiexecutor 277 | - React-jsinspector 278 | - React-jsitooling 279 | - React-perflogger 280 | - React-runtimescheduler 281 | - React-utils 282 | - SocketRocket (= 0.7.1) 283 | - Yoga 284 | - React-Core/RCTWebSocket (0.79.2): 285 | - glog 286 | - hermes-engine 287 | - RCT-Folly (= 2024.11.18.00) 288 | - RCTDeprecation 289 | - React-Core/Default (= 0.79.2) 290 | - React-cxxreact 291 | - React-featureflags 292 | - React-hermes 293 | - React-jsi 294 | - React-jsiexecutor 295 | - React-jsinspector 296 | - React-jsitooling 297 | - React-perflogger 298 | - React-runtimescheduler 299 | - React-utils 300 | - SocketRocket (= 0.7.1) 301 | - Yoga 302 | - React-CoreModules (0.79.2): 303 | - DoubleConversion 304 | - fast_float (= 6.1.4) 305 | - fmt (= 11.0.2) 306 | - RCT-Folly (= 2024.11.18.00) 307 | - RCTTypeSafety (= 0.79.2) 308 | - React-Core/CoreModulesHeaders (= 0.79.2) 309 | - React-jsi (= 0.79.2) 310 | - React-jsinspector 311 | - React-jsinspectortracing 312 | - React-NativeModulesApple 313 | - React-RCTBlob 314 | - React-RCTFBReactNativeSpec 315 | - React-RCTImage (= 0.79.2) 316 | - ReactCommon 317 | - SocketRocket (= 0.7.1) 318 | - React-cxxreact (0.79.2): 319 | - boost 320 | - DoubleConversion 321 | - fast_float (= 6.1.4) 322 | - fmt (= 11.0.2) 323 | - glog 324 | - hermes-engine 325 | - RCT-Folly (= 2024.11.18.00) 326 | - React-callinvoker (= 0.79.2) 327 | - React-debug (= 0.79.2) 328 | - React-jsi (= 0.79.2) 329 | - React-jsinspector 330 | - React-jsinspectortracing 331 | - React-logger (= 0.79.2) 332 | - React-perflogger (= 0.79.2) 333 | - React-runtimeexecutor (= 0.79.2) 334 | - React-timing (= 0.79.2) 335 | - React-debug (0.79.2) 336 | - React-defaultsnativemodule (0.79.2): 337 | - hermes-engine 338 | - RCT-Folly 339 | - React-domnativemodule 340 | - React-featureflagsnativemodule 341 | - React-hermes 342 | - React-idlecallbacksnativemodule 343 | - React-jsi 344 | - React-jsiexecutor 345 | - React-microtasksnativemodule 346 | - React-RCTFBReactNativeSpec 347 | - React-domnativemodule (0.79.2): 348 | - hermes-engine 349 | - RCT-Folly 350 | - React-Fabric 351 | - React-FabricComponents 352 | - React-graphics 353 | - React-hermes 354 | - React-jsi 355 | - React-jsiexecutor 356 | - React-RCTFBReactNativeSpec 357 | - ReactCommon/turbomodule/core 358 | - Yoga 359 | - React-Fabric (0.79.2): 360 | - DoubleConversion 361 | - fast_float (= 6.1.4) 362 | - fmt (= 11.0.2) 363 | - glog 364 | - hermes-engine 365 | - RCT-Folly/Fabric (= 2024.11.18.00) 366 | - RCTRequired 367 | - RCTTypeSafety 368 | - React-Core 369 | - React-cxxreact 370 | - React-debug 371 | - React-Fabric/animations (= 0.79.2) 372 | - React-Fabric/attributedstring (= 0.79.2) 373 | - React-Fabric/componentregistry (= 0.79.2) 374 | - React-Fabric/componentregistrynative (= 0.79.2) 375 | - React-Fabric/components (= 0.79.2) 376 | - React-Fabric/consistency (= 0.79.2) 377 | - React-Fabric/core (= 0.79.2) 378 | - React-Fabric/dom (= 0.79.2) 379 | - React-Fabric/imagemanager (= 0.79.2) 380 | - React-Fabric/leakchecker (= 0.79.2) 381 | - React-Fabric/mounting (= 0.79.2) 382 | - React-Fabric/observers (= 0.79.2) 383 | - React-Fabric/scheduler (= 0.79.2) 384 | - React-Fabric/telemetry (= 0.79.2) 385 | - React-Fabric/templateprocessor (= 0.79.2) 386 | - React-Fabric/uimanager (= 0.79.2) 387 | - React-featureflags 388 | - React-graphics 389 | - React-hermes 390 | - React-jsi 391 | - React-jsiexecutor 392 | - React-logger 393 | - React-rendererdebug 394 | - React-runtimescheduler 395 | - React-utils 396 | - ReactCommon/turbomodule/core 397 | - React-Fabric/animations (0.79.2): 398 | - DoubleConversion 399 | - fast_float (= 6.1.4) 400 | - fmt (= 11.0.2) 401 | - glog 402 | - hermes-engine 403 | - RCT-Folly/Fabric (= 2024.11.18.00) 404 | - RCTRequired 405 | - RCTTypeSafety 406 | - React-Core 407 | - React-cxxreact 408 | - React-debug 409 | - React-featureflags 410 | - React-graphics 411 | - React-hermes 412 | - React-jsi 413 | - React-jsiexecutor 414 | - React-logger 415 | - React-rendererdebug 416 | - React-runtimescheduler 417 | - React-utils 418 | - ReactCommon/turbomodule/core 419 | - React-Fabric/attributedstring (0.79.2): 420 | - DoubleConversion 421 | - fast_float (= 6.1.4) 422 | - fmt (= 11.0.2) 423 | - glog 424 | - hermes-engine 425 | - RCT-Folly/Fabric (= 2024.11.18.00) 426 | - RCTRequired 427 | - RCTTypeSafety 428 | - React-Core 429 | - React-cxxreact 430 | - React-debug 431 | - React-featureflags 432 | - React-graphics 433 | - React-hermes 434 | - React-jsi 435 | - React-jsiexecutor 436 | - React-logger 437 | - React-rendererdebug 438 | - React-runtimescheduler 439 | - React-utils 440 | - ReactCommon/turbomodule/core 441 | - React-Fabric/componentregistry (0.79.2): 442 | - DoubleConversion 443 | - fast_float (= 6.1.4) 444 | - fmt (= 11.0.2) 445 | - glog 446 | - hermes-engine 447 | - RCT-Folly/Fabric (= 2024.11.18.00) 448 | - RCTRequired 449 | - RCTTypeSafety 450 | - React-Core 451 | - React-cxxreact 452 | - React-debug 453 | - React-featureflags 454 | - React-graphics 455 | - React-hermes 456 | - React-jsi 457 | - React-jsiexecutor 458 | - React-logger 459 | - React-rendererdebug 460 | - React-runtimescheduler 461 | - React-utils 462 | - ReactCommon/turbomodule/core 463 | - React-Fabric/componentregistrynative (0.79.2): 464 | - DoubleConversion 465 | - fast_float (= 6.1.4) 466 | - fmt (= 11.0.2) 467 | - glog 468 | - hermes-engine 469 | - RCT-Folly/Fabric (= 2024.11.18.00) 470 | - RCTRequired 471 | - RCTTypeSafety 472 | - React-Core 473 | - React-cxxreact 474 | - React-debug 475 | - React-featureflags 476 | - React-graphics 477 | - React-hermes 478 | - React-jsi 479 | - React-jsiexecutor 480 | - React-logger 481 | - React-rendererdebug 482 | - React-runtimescheduler 483 | - React-utils 484 | - ReactCommon/turbomodule/core 485 | - React-Fabric/components (0.79.2): 486 | - DoubleConversion 487 | - fast_float (= 6.1.4) 488 | - fmt (= 11.0.2) 489 | - glog 490 | - hermes-engine 491 | - RCT-Folly/Fabric (= 2024.11.18.00) 492 | - RCTRequired 493 | - RCTTypeSafety 494 | - React-Core 495 | - React-cxxreact 496 | - React-debug 497 | - React-Fabric/components/legacyviewmanagerinterop (= 0.79.2) 498 | - React-Fabric/components/root (= 0.79.2) 499 | - React-Fabric/components/scrollview (= 0.79.2) 500 | - React-Fabric/components/view (= 0.79.2) 501 | - React-featureflags 502 | - React-graphics 503 | - React-hermes 504 | - React-jsi 505 | - React-jsiexecutor 506 | - React-logger 507 | - React-rendererdebug 508 | - React-runtimescheduler 509 | - React-utils 510 | - ReactCommon/turbomodule/core 511 | - React-Fabric/components/legacyviewmanagerinterop (0.79.2): 512 | - DoubleConversion 513 | - fast_float (= 6.1.4) 514 | - fmt (= 11.0.2) 515 | - glog 516 | - hermes-engine 517 | - RCT-Folly/Fabric (= 2024.11.18.00) 518 | - RCTRequired 519 | - RCTTypeSafety 520 | - React-Core 521 | - React-cxxreact 522 | - React-debug 523 | - React-featureflags 524 | - React-graphics 525 | - React-hermes 526 | - React-jsi 527 | - React-jsiexecutor 528 | - React-logger 529 | - React-rendererdebug 530 | - React-runtimescheduler 531 | - React-utils 532 | - ReactCommon/turbomodule/core 533 | - React-Fabric/components/root (0.79.2): 534 | - DoubleConversion 535 | - fast_float (= 6.1.4) 536 | - fmt (= 11.0.2) 537 | - glog 538 | - hermes-engine 539 | - RCT-Folly/Fabric (= 2024.11.18.00) 540 | - RCTRequired 541 | - RCTTypeSafety 542 | - React-Core 543 | - React-cxxreact 544 | - React-debug 545 | - React-featureflags 546 | - React-graphics 547 | - React-hermes 548 | - React-jsi 549 | - React-jsiexecutor 550 | - React-logger 551 | - React-rendererdebug 552 | - React-runtimescheduler 553 | - React-utils 554 | - ReactCommon/turbomodule/core 555 | - React-Fabric/components/scrollview (0.79.2): 556 | - DoubleConversion 557 | - fast_float (= 6.1.4) 558 | - fmt (= 11.0.2) 559 | - glog 560 | - hermes-engine 561 | - RCT-Folly/Fabric (= 2024.11.18.00) 562 | - RCTRequired 563 | - RCTTypeSafety 564 | - React-Core 565 | - React-cxxreact 566 | - React-debug 567 | - React-featureflags 568 | - React-graphics 569 | - React-hermes 570 | - React-jsi 571 | - React-jsiexecutor 572 | - React-logger 573 | - React-rendererdebug 574 | - React-runtimescheduler 575 | - React-utils 576 | - ReactCommon/turbomodule/core 577 | - React-Fabric/components/view (0.79.2): 578 | - DoubleConversion 579 | - fast_float (= 6.1.4) 580 | - fmt (= 11.0.2) 581 | - glog 582 | - hermes-engine 583 | - RCT-Folly/Fabric (= 2024.11.18.00) 584 | - RCTRequired 585 | - RCTTypeSafety 586 | - React-Core 587 | - React-cxxreact 588 | - React-debug 589 | - React-featureflags 590 | - React-graphics 591 | - React-hermes 592 | - React-jsi 593 | - React-jsiexecutor 594 | - React-logger 595 | - React-renderercss 596 | - React-rendererdebug 597 | - React-runtimescheduler 598 | - React-utils 599 | - ReactCommon/turbomodule/core 600 | - Yoga 601 | - React-Fabric/consistency (0.79.2): 602 | - DoubleConversion 603 | - fast_float (= 6.1.4) 604 | - fmt (= 11.0.2) 605 | - glog 606 | - hermes-engine 607 | - RCT-Folly/Fabric (= 2024.11.18.00) 608 | - RCTRequired 609 | - RCTTypeSafety 610 | - React-Core 611 | - React-cxxreact 612 | - React-debug 613 | - React-featureflags 614 | - React-graphics 615 | - React-hermes 616 | - React-jsi 617 | - React-jsiexecutor 618 | - React-logger 619 | - React-rendererdebug 620 | - React-runtimescheduler 621 | - React-utils 622 | - ReactCommon/turbomodule/core 623 | - React-Fabric/core (0.79.2): 624 | - DoubleConversion 625 | - fast_float (= 6.1.4) 626 | - fmt (= 11.0.2) 627 | - glog 628 | - hermes-engine 629 | - RCT-Folly/Fabric (= 2024.11.18.00) 630 | - RCTRequired 631 | - RCTTypeSafety 632 | - React-Core 633 | - React-cxxreact 634 | - React-debug 635 | - React-featureflags 636 | - React-graphics 637 | - React-hermes 638 | - React-jsi 639 | - React-jsiexecutor 640 | - React-logger 641 | - React-rendererdebug 642 | - React-runtimescheduler 643 | - React-utils 644 | - ReactCommon/turbomodule/core 645 | - React-Fabric/dom (0.79.2): 646 | - DoubleConversion 647 | - fast_float (= 6.1.4) 648 | - fmt (= 11.0.2) 649 | - glog 650 | - hermes-engine 651 | - RCT-Folly/Fabric (= 2024.11.18.00) 652 | - RCTRequired 653 | - RCTTypeSafety 654 | - React-Core 655 | - React-cxxreact 656 | - React-debug 657 | - React-featureflags 658 | - React-graphics 659 | - React-hermes 660 | - React-jsi 661 | - React-jsiexecutor 662 | - React-logger 663 | - React-rendererdebug 664 | - React-runtimescheduler 665 | - React-utils 666 | - ReactCommon/turbomodule/core 667 | - React-Fabric/imagemanager (0.79.2): 668 | - DoubleConversion 669 | - fast_float (= 6.1.4) 670 | - fmt (= 11.0.2) 671 | - glog 672 | - hermes-engine 673 | - RCT-Folly/Fabric (= 2024.11.18.00) 674 | - RCTRequired 675 | - RCTTypeSafety 676 | - React-Core 677 | - React-cxxreact 678 | - React-debug 679 | - React-featureflags 680 | - React-graphics 681 | - React-hermes 682 | - React-jsi 683 | - React-jsiexecutor 684 | - React-logger 685 | - React-rendererdebug 686 | - React-runtimescheduler 687 | - React-utils 688 | - ReactCommon/turbomodule/core 689 | - React-Fabric/leakchecker (0.79.2): 690 | - DoubleConversion 691 | - fast_float (= 6.1.4) 692 | - fmt (= 11.0.2) 693 | - glog 694 | - hermes-engine 695 | - RCT-Folly/Fabric (= 2024.11.18.00) 696 | - RCTRequired 697 | - RCTTypeSafety 698 | - React-Core 699 | - React-cxxreact 700 | - React-debug 701 | - React-featureflags 702 | - React-graphics 703 | - React-hermes 704 | - React-jsi 705 | - React-jsiexecutor 706 | - React-logger 707 | - React-rendererdebug 708 | - React-runtimescheduler 709 | - React-utils 710 | - ReactCommon/turbomodule/core 711 | - React-Fabric/mounting (0.79.2): 712 | - DoubleConversion 713 | - fast_float (= 6.1.4) 714 | - fmt (= 11.0.2) 715 | - glog 716 | - hermes-engine 717 | - RCT-Folly/Fabric (= 2024.11.18.00) 718 | - RCTRequired 719 | - RCTTypeSafety 720 | - React-Core 721 | - React-cxxreact 722 | - React-debug 723 | - React-featureflags 724 | - React-graphics 725 | - React-hermes 726 | - React-jsi 727 | - React-jsiexecutor 728 | - React-logger 729 | - React-rendererdebug 730 | - React-runtimescheduler 731 | - React-utils 732 | - ReactCommon/turbomodule/core 733 | - React-Fabric/observers (0.79.2): 734 | - DoubleConversion 735 | - fast_float (= 6.1.4) 736 | - fmt (= 11.0.2) 737 | - glog 738 | - hermes-engine 739 | - RCT-Folly/Fabric (= 2024.11.18.00) 740 | - RCTRequired 741 | - RCTTypeSafety 742 | - React-Core 743 | - React-cxxreact 744 | - React-debug 745 | - React-Fabric/observers/events (= 0.79.2) 746 | - React-featureflags 747 | - React-graphics 748 | - React-hermes 749 | - React-jsi 750 | - React-jsiexecutor 751 | - React-logger 752 | - React-rendererdebug 753 | - React-runtimescheduler 754 | - React-utils 755 | - ReactCommon/turbomodule/core 756 | - React-Fabric/observers/events (0.79.2): 757 | - DoubleConversion 758 | - fast_float (= 6.1.4) 759 | - fmt (= 11.0.2) 760 | - glog 761 | - hermes-engine 762 | - RCT-Folly/Fabric (= 2024.11.18.00) 763 | - RCTRequired 764 | - RCTTypeSafety 765 | - React-Core 766 | - React-cxxreact 767 | - React-debug 768 | - React-featureflags 769 | - React-graphics 770 | - React-hermes 771 | - React-jsi 772 | - React-jsiexecutor 773 | - React-logger 774 | - React-rendererdebug 775 | - React-runtimescheduler 776 | - React-utils 777 | - ReactCommon/turbomodule/core 778 | - React-Fabric/scheduler (0.79.2): 779 | - DoubleConversion 780 | - fast_float (= 6.1.4) 781 | - fmt (= 11.0.2) 782 | - glog 783 | - hermes-engine 784 | - RCT-Folly/Fabric (= 2024.11.18.00) 785 | - RCTRequired 786 | - RCTTypeSafety 787 | - React-Core 788 | - React-cxxreact 789 | - React-debug 790 | - React-Fabric/observers/events 791 | - React-featureflags 792 | - React-graphics 793 | - React-hermes 794 | - React-jsi 795 | - React-jsiexecutor 796 | - React-logger 797 | - React-performancetimeline 798 | - React-rendererdebug 799 | - React-runtimescheduler 800 | - React-utils 801 | - ReactCommon/turbomodule/core 802 | - React-Fabric/telemetry (0.79.2): 803 | - DoubleConversion 804 | - fast_float (= 6.1.4) 805 | - fmt (= 11.0.2) 806 | - glog 807 | - hermes-engine 808 | - RCT-Folly/Fabric (= 2024.11.18.00) 809 | - RCTRequired 810 | - RCTTypeSafety 811 | - React-Core 812 | - React-cxxreact 813 | - React-debug 814 | - React-featureflags 815 | - React-graphics 816 | - React-hermes 817 | - React-jsi 818 | - React-jsiexecutor 819 | - React-logger 820 | - React-rendererdebug 821 | - React-runtimescheduler 822 | - React-utils 823 | - ReactCommon/turbomodule/core 824 | - React-Fabric/templateprocessor (0.79.2): 825 | - DoubleConversion 826 | - fast_float (= 6.1.4) 827 | - fmt (= 11.0.2) 828 | - glog 829 | - hermes-engine 830 | - RCT-Folly/Fabric (= 2024.11.18.00) 831 | - RCTRequired 832 | - RCTTypeSafety 833 | - React-Core 834 | - React-cxxreact 835 | - React-debug 836 | - React-featureflags 837 | - React-graphics 838 | - React-hermes 839 | - React-jsi 840 | - React-jsiexecutor 841 | - React-logger 842 | - React-rendererdebug 843 | - React-runtimescheduler 844 | - React-utils 845 | - ReactCommon/turbomodule/core 846 | - React-Fabric/uimanager (0.79.2): 847 | - DoubleConversion 848 | - fast_float (= 6.1.4) 849 | - fmt (= 11.0.2) 850 | - glog 851 | - hermes-engine 852 | - RCT-Folly/Fabric (= 2024.11.18.00) 853 | - RCTRequired 854 | - RCTTypeSafety 855 | - React-Core 856 | - React-cxxreact 857 | - React-debug 858 | - React-Fabric/uimanager/consistency (= 0.79.2) 859 | - React-featureflags 860 | - React-graphics 861 | - React-hermes 862 | - React-jsi 863 | - React-jsiexecutor 864 | - React-logger 865 | - React-rendererconsistency 866 | - React-rendererdebug 867 | - React-runtimescheduler 868 | - React-utils 869 | - ReactCommon/turbomodule/core 870 | - React-Fabric/uimanager/consistency (0.79.2): 871 | - DoubleConversion 872 | - fast_float (= 6.1.4) 873 | - fmt (= 11.0.2) 874 | - glog 875 | - hermes-engine 876 | - RCT-Folly/Fabric (= 2024.11.18.00) 877 | - RCTRequired 878 | - RCTTypeSafety 879 | - React-Core 880 | - React-cxxreact 881 | - React-debug 882 | - React-featureflags 883 | - React-graphics 884 | - React-hermes 885 | - React-jsi 886 | - React-jsiexecutor 887 | - React-logger 888 | - React-rendererconsistency 889 | - React-rendererdebug 890 | - React-runtimescheduler 891 | - React-utils 892 | - ReactCommon/turbomodule/core 893 | - React-FabricComponents (0.79.2): 894 | - DoubleConversion 895 | - fast_float (= 6.1.4) 896 | - fmt (= 11.0.2) 897 | - glog 898 | - hermes-engine 899 | - RCT-Folly/Fabric (= 2024.11.18.00) 900 | - RCTRequired 901 | - RCTTypeSafety 902 | - React-Core 903 | - React-cxxreact 904 | - React-debug 905 | - React-Fabric 906 | - React-FabricComponents/components (= 0.79.2) 907 | - React-FabricComponents/textlayoutmanager (= 0.79.2) 908 | - React-featureflags 909 | - React-graphics 910 | - React-hermes 911 | - React-jsi 912 | - React-jsiexecutor 913 | - React-logger 914 | - React-rendererdebug 915 | - React-runtimescheduler 916 | - React-utils 917 | - ReactCommon/turbomodule/core 918 | - Yoga 919 | - React-FabricComponents/components (0.79.2): 920 | - DoubleConversion 921 | - fast_float (= 6.1.4) 922 | - fmt (= 11.0.2) 923 | - glog 924 | - hermes-engine 925 | - RCT-Folly/Fabric (= 2024.11.18.00) 926 | - RCTRequired 927 | - RCTTypeSafety 928 | - React-Core 929 | - React-cxxreact 930 | - React-debug 931 | - React-Fabric 932 | - React-FabricComponents/components/inputaccessory (= 0.79.2) 933 | - React-FabricComponents/components/iostextinput (= 0.79.2) 934 | - React-FabricComponents/components/modal (= 0.79.2) 935 | - React-FabricComponents/components/rncore (= 0.79.2) 936 | - React-FabricComponents/components/safeareaview (= 0.79.2) 937 | - React-FabricComponents/components/scrollview (= 0.79.2) 938 | - React-FabricComponents/components/text (= 0.79.2) 939 | - React-FabricComponents/components/textinput (= 0.79.2) 940 | - React-FabricComponents/components/unimplementedview (= 0.79.2) 941 | - React-featureflags 942 | - React-graphics 943 | - React-hermes 944 | - React-jsi 945 | - React-jsiexecutor 946 | - React-logger 947 | - React-rendererdebug 948 | - React-runtimescheduler 949 | - React-utils 950 | - ReactCommon/turbomodule/core 951 | - Yoga 952 | - React-FabricComponents/components/inputaccessory (0.79.2): 953 | - DoubleConversion 954 | - fast_float (= 6.1.4) 955 | - fmt (= 11.0.2) 956 | - glog 957 | - hermes-engine 958 | - RCT-Folly/Fabric (= 2024.11.18.00) 959 | - RCTRequired 960 | - RCTTypeSafety 961 | - React-Core 962 | - React-cxxreact 963 | - React-debug 964 | - React-Fabric 965 | - React-featureflags 966 | - React-graphics 967 | - React-hermes 968 | - React-jsi 969 | - React-jsiexecutor 970 | - React-logger 971 | - React-rendererdebug 972 | - React-runtimescheduler 973 | - React-utils 974 | - ReactCommon/turbomodule/core 975 | - Yoga 976 | - React-FabricComponents/components/iostextinput (0.79.2): 977 | - DoubleConversion 978 | - fast_float (= 6.1.4) 979 | - fmt (= 11.0.2) 980 | - glog 981 | - hermes-engine 982 | - RCT-Folly/Fabric (= 2024.11.18.00) 983 | - RCTRequired 984 | - RCTTypeSafety 985 | - React-Core 986 | - React-cxxreact 987 | - React-debug 988 | - React-Fabric 989 | - React-featureflags 990 | - React-graphics 991 | - React-hermes 992 | - React-jsi 993 | - React-jsiexecutor 994 | - React-logger 995 | - React-rendererdebug 996 | - React-runtimescheduler 997 | - React-utils 998 | - ReactCommon/turbomodule/core 999 | - Yoga 1000 | - React-FabricComponents/components/modal (0.79.2): 1001 | - DoubleConversion 1002 | - fast_float (= 6.1.4) 1003 | - fmt (= 11.0.2) 1004 | - glog 1005 | - hermes-engine 1006 | - RCT-Folly/Fabric (= 2024.11.18.00) 1007 | - RCTRequired 1008 | - RCTTypeSafety 1009 | - React-Core 1010 | - React-cxxreact 1011 | - React-debug 1012 | - React-Fabric 1013 | - React-featureflags 1014 | - React-graphics 1015 | - React-hermes 1016 | - React-jsi 1017 | - React-jsiexecutor 1018 | - React-logger 1019 | - React-rendererdebug 1020 | - React-runtimescheduler 1021 | - React-utils 1022 | - ReactCommon/turbomodule/core 1023 | - Yoga 1024 | - React-FabricComponents/components/rncore (0.79.2): 1025 | - DoubleConversion 1026 | - fast_float (= 6.1.4) 1027 | - fmt (= 11.0.2) 1028 | - glog 1029 | - hermes-engine 1030 | - RCT-Folly/Fabric (= 2024.11.18.00) 1031 | - RCTRequired 1032 | - RCTTypeSafety 1033 | - React-Core 1034 | - React-cxxreact 1035 | - React-debug 1036 | - React-Fabric 1037 | - React-featureflags 1038 | - React-graphics 1039 | - React-hermes 1040 | - React-jsi 1041 | - React-jsiexecutor 1042 | - React-logger 1043 | - React-rendererdebug 1044 | - React-runtimescheduler 1045 | - React-utils 1046 | - ReactCommon/turbomodule/core 1047 | - Yoga 1048 | - React-FabricComponents/components/safeareaview (0.79.2): 1049 | - DoubleConversion 1050 | - fast_float (= 6.1.4) 1051 | - fmt (= 11.0.2) 1052 | - glog 1053 | - hermes-engine 1054 | - RCT-Folly/Fabric (= 2024.11.18.00) 1055 | - RCTRequired 1056 | - RCTTypeSafety 1057 | - React-Core 1058 | - React-cxxreact 1059 | - React-debug 1060 | - React-Fabric 1061 | - React-featureflags 1062 | - React-graphics 1063 | - React-hermes 1064 | - React-jsi 1065 | - React-jsiexecutor 1066 | - React-logger 1067 | - React-rendererdebug 1068 | - React-runtimescheduler 1069 | - React-utils 1070 | - ReactCommon/turbomodule/core 1071 | - Yoga 1072 | - React-FabricComponents/components/scrollview (0.79.2): 1073 | - DoubleConversion 1074 | - fast_float (= 6.1.4) 1075 | - fmt (= 11.0.2) 1076 | - glog 1077 | - hermes-engine 1078 | - RCT-Folly/Fabric (= 2024.11.18.00) 1079 | - RCTRequired 1080 | - RCTTypeSafety 1081 | - React-Core 1082 | - React-cxxreact 1083 | - React-debug 1084 | - React-Fabric 1085 | - React-featureflags 1086 | - React-graphics 1087 | - React-hermes 1088 | - React-jsi 1089 | - React-jsiexecutor 1090 | - React-logger 1091 | - React-rendererdebug 1092 | - React-runtimescheduler 1093 | - React-utils 1094 | - ReactCommon/turbomodule/core 1095 | - Yoga 1096 | - React-FabricComponents/components/text (0.79.2): 1097 | - DoubleConversion 1098 | - fast_float (= 6.1.4) 1099 | - fmt (= 11.0.2) 1100 | - glog 1101 | - hermes-engine 1102 | - RCT-Folly/Fabric (= 2024.11.18.00) 1103 | - RCTRequired 1104 | - RCTTypeSafety 1105 | - React-Core 1106 | - React-cxxreact 1107 | - React-debug 1108 | - React-Fabric 1109 | - React-featureflags 1110 | - React-graphics 1111 | - React-hermes 1112 | - React-jsi 1113 | - React-jsiexecutor 1114 | - React-logger 1115 | - React-rendererdebug 1116 | - React-runtimescheduler 1117 | - React-utils 1118 | - ReactCommon/turbomodule/core 1119 | - Yoga 1120 | - React-FabricComponents/components/textinput (0.79.2): 1121 | - DoubleConversion 1122 | - fast_float (= 6.1.4) 1123 | - fmt (= 11.0.2) 1124 | - glog 1125 | - hermes-engine 1126 | - RCT-Folly/Fabric (= 2024.11.18.00) 1127 | - RCTRequired 1128 | - RCTTypeSafety 1129 | - React-Core 1130 | - React-cxxreact 1131 | - React-debug 1132 | - React-Fabric 1133 | - React-featureflags 1134 | - React-graphics 1135 | - React-hermes 1136 | - React-jsi 1137 | - React-jsiexecutor 1138 | - React-logger 1139 | - React-rendererdebug 1140 | - React-runtimescheduler 1141 | - React-utils 1142 | - ReactCommon/turbomodule/core 1143 | - Yoga 1144 | - React-FabricComponents/components/unimplementedview (0.79.2): 1145 | - DoubleConversion 1146 | - fast_float (= 6.1.4) 1147 | - fmt (= 11.0.2) 1148 | - glog 1149 | - hermes-engine 1150 | - RCT-Folly/Fabric (= 2024.11.18.00) 1151 | - RCTRequired 1152 | - RCTTypeSafety 1153 | - React-Core 1154 | - React-cxxreact 1155 | - React-debug 1156 | - React-Fabric 1157 | - React-featureflags 1158 | - React-graphics 1159 | - React-hermes 1160 | - React-jsi 1161 | - React-jsiexecutor 1162 | - React-logger 1163 | - React-rendererdebug 1164 | - React-runtimescheduler 1165 | - React-utils 1166 | - ReactCommon/turbomodule/core 1167 | - Yoga 1168 | - React-FabricComponents/textlayoutmanager (0.79.2): 1169 | - DoubleConversion 1170 | - fast_float (= 6.1.4) 1171 | - fmt (= 11.0.2) 1172 | - glog 1173 | - hermes-engine 1174 | - RCT-Folly/Fabric (= 2024.11.18.00) 1175 | - RCTRequired 1176 | - RCTTypeSafety 1177 | - React-Core 1178 | - React-cxxreact 1179 | - React-debug 1180 | - React-Fabric 1181 | - React-featureflags 1182 | - React-graphics 1183 | - React-hermes 1184 | - React-jsi 1185 | - React-jsiexecutor 1186 | - React-logger 1187 | - React-rendererdebug 1188 | - React-runtimescheduler 1189 | - React-utils 1190 | - ReactCommon/turbomodule/core 1191 | - Yoga 1192 | - React-FabricImage (0.79.2): 1193 | - DoubleConversion 1194 | - fast_float (= 6.1.4) 1195 | - fmt (= 11.0.2) 1196 | - glog 1197 | - hermes-engine 1198 | - RCT-Folly/Fabric (= 2024.11.18.00) 1199 | - RCTRequired (= 0.79.2) 1200 | - RCTTypeSafety (= 0.79.2) 1201 | - React-Fabric 1202 | - React-featureflags 1203 | - React-graphics 1204 | - React-hermes 1205 | - React-ImageManager 1206 | - React-jsi 1207 | - React-jsiexecutor (= 0.79.2) 1208 | - React-logger 1209 | - React-rendererdebug 1210 | - React-utils 1211 | - ReactCommon 1212 | - Yoga 1213 | - React-featureflags (0.79.2): 1214 | - RCT-Folly (= 2024.11.18.00) 1215 | - React-featureflagsnativemodule (0.79.2): 1216 | - hermes-engine 1217 | - RCT-Folly 1218 | - React-featureflags 1219 | - React-hermes 1220 | - React-jsi 1221 | - React-jsiexecutor 1222 | - React-RCTFBReactNativeSpec 1223 | - ReactCommon/turbomodule/core 1224 | - React-graphics (0.79.2): 1225 | - DoubleConversion 1226 | - fast_float (= 6.1.4) 1227 | - fmt (= 11.0.2) 1228 | - glog 1229 | - hermes-engine 1230 | - RCT-Folly/Fabric (= 2024.11.18.00) 1231 | - React-hermes 1232 | - React-jsi 1233 | - React-jsiexecutor 1234 | - React-utils 1235 | - React-hermes (0.79.2): 1236 | - DoubleConversion 1237 | - fast_float (= 6.1.4) 1238 | - fmt (= 11.0.2) 1239 | - glog 1240 | - hermes-engine 1241 | - RCT-Folly (= 2024.11.18.00) 1242 | - React-cxxreact (= 0.79.2) 1243 | - React-jsi 1244 | - React-jsiexecutor (= 0.79.2) 1245 | - React-jsinspector 1246 | - React-jsinspectortracing 1247 | - React-perflogger (= 0.79.2) 1248 | - React-runtimeexecutor 1249 | - React-idlecallbacksnativemodule (0.79.2): 1250 | - glog 1251 | - hermes-engine 1252 | - RCT-Folly 1253 | - React-hermes 1254 | - React-jsi 1255 | - React-jsiexecutor 1256 | - React-RCTFBReactNativeSpec 1257 | - React-runtimescheduler 1258 | - ReactCommon/turbomodule/core 1259 | - React-ImageManager (0.79.2): 1260 | - glog 1261 | - RCT-Folly/Fabric 1262 | - React-Core/Default 1263 | - React-debug 1264 | - React-Fabric 1265 | - React-graphics 1266 | - React-rendererdebug 1267 | - React-utils 1268 | - React-jserrorhandler (0.79.2): 1269 | - glog 1270 | - hermes-engine 1271 | - RCT-Folly/Fabric (= 2024.11.18.00) 1272 | - React-cxxreact 1273 | - React-debug 1274 | - React-featureflags 1275 | - React-jsi 1276 | - ReactCommon/turbomodule/bridging 1277 | - React-jsi (0.79.2): 1278 | - boost 1279 | - DoubleConversion 1280 | - fast_float (= 6.1.4) 1281 | - fmt (= 11.0.2) 1282 | - glog 1283 | - hermes-engine 1284 | - RCT-Folly (= 2024.11.18.00) 1285 | - React-jsiexecutor (0.79.2): 1286 | - DoubleConversion 1287 | - fast_float (= 6.1.4) 1288 | - fmt (= 11.0.2) 1289 | - glog 1290 | - hermes-engine 1291 | - RCT-Folly (= 2024.11.18.00) 1292 | - React-cxxreact (= 0.79.2) 1293 | - React-jsi (= 0.79.2) 1294 | - React-jsinspector 1295 | - React-jsinspectortracing 1296 | - React-perflogger (= 0.79.2) 1297 | - React-jsinspector (0.79.2): 1298 | - DoubleConversion 1299 | - glog 1300 | - hermes-engine 1301 | - RCT-Folly 1302 | - React-featureflags 1303 | - React-jsi 1304 | - React-jsinspectortracing 1305 | - React-perflogger (= 0.79.2) 1306 | - React-runtimeexecutor (= 0.79.2) 1307 | - React-jsinspectortracing (0.79.2): 1308 | - RCT-Folly 1309 | - React-oscompat 1310 | - React-jsitooling (0.79.2): 1311 | - DoubleConversion 1312 | - fast_float (= 6.1.4) 1313 | - fmt (= 11.0.2) 1314 | - glog 1315 | - RCT-Folly (= 2024.11.18.00) 1316 | - React-cxxreact (= 0.79.2) 1317 | - React-jsi (= 0.79.2) 1318 | - React-jsinspector 1319 | - React-jsinspectortracing 1320 | - React-jsitracing (0.79.2): 1321 | - React-jsi 1322 | - React-logger (0.79.2): 1323 | - glog 1324 | - React-Mapbuffer (0.79.2): 1325 | - glog 1326 | - React-debug 1327 | - React-microtasksnativemodule (0.79.2): 1328 | - hermes-engine 1329 | - RCT-Folly 1330 | - React-hermes 1331 | - React-jsi 1332 | - React-jsiexecutor 1333 | - React-RCTFBReactNativeSpec 1334 | - ReactCommon/turbomodule/core 1335 | - react-native-shake (6.7.7): 1336 | - DoubleConversion 1337 | - glog 1338 | - hermes-engine 1339 | - RCT-Folly (= 2024.11.18.00) 1340 | - RCTRequired 1341 | - RCTTypeSafety 1342 | - React-Core 1343 | - React-debug 1344 | - React-Fabric 1345 | - React-featureflags 1346 | - React-graphics 1347 | - React-hermes 1348 | - React-ImageManager 1349 | - React-jsi 1350 | - React-NativeModulesApple 1351 | - React-RCTFabric 1352 | - React-renderercss 1353 | - React-rendererdebug 1354 | - React-utils 1355 | - ReactCodegen 1356 | - ReactCommon/turbomodule/bridging 1357 | - ReactCommon/turbomodule/core 1358 | - Yoga 1359 | - React-NativeModulesApple (0.79.2): 1360 | - glog 1361 | - hermes-engine 1362 | - React-callinvoker 1363 | - React-Core 1364 | - React-cxxreact 1365 | - React-featureflags 1366 | - React-hermes 1367 | - React-jsi 1368 | - React-jsinspector 1369 | - React-runtimeexecutor 1370 | - ReactCommon/turbomodule/bridging 1371 | - ReactCommon/turbomodule/core 1372 | - React-oscompat (0.79.2) 1373 | - React-perflogger (0.79.2): 1374 | - DoubleConversion 1375 | - RCT-Folly (= 2024.11.18.00) 1376 | - React-performancetimeline (0.79.2): 1377 | - RCT-Folly (= 2024.11.18.00) 1378 | - React-cxxreact 1379 | - React-featureflags 1380 | - React-jsinspectortracing 1381 | - React-perflogger 1382 | - React-timing 1383 | - React-RCTActionSheet (0.79.2): 1384 | - React-Core/RCTActionSheetHeaders (= 0.79.2) 1385 | - React-RCTAnimation (0.79.2): 1386 | - RCT-Folly (= 2024.11.18.00) 1387 | - RCTTypeSafety 1388 | - React-Core/RCTAnimationHeaders 1389 | - React-jsi 1390 | - React-NativeModulesApple 1391 | - React-RCTFBReactNativeSpec 1392 | - ReactCommon 1393 | - React-RCTAppDelegate (0.79.2): 1394 | - hermes-engine 1395 | - RCT-Folly (= 2024.11.18.00) 1396 | - RCTRequired 1397 | - RCTTypeSafety 1398 | - React-Core 1399 | - React-CoreModules 1400 | - React-debug 1401 | - React-defaultsnativemodule 1402 | - React-Fabric 1403 | - React-featureflags 1404 | - React-graphics 1405 | - React-hermes 1406 | - React-jsitooling 1407 | - React-NativeModulesApple 1408 | - React-RCTFabric 1409 | - React-RCTFBReactNativeSpec 1410 | - React-RCTImage 1411 | - React-RCTNetwork 1412 | - React-RCTRuntime 1413 | - React-rendererdebug 1414 | - React-RuntimeApple 1415 | - React-RuntimeCore 1416 | - React-runtimescheduler 1417 | - React-utils 1418 | - ReactCommon 1419 | - React-RCTBlob (0.79.2): 1420 | - DoubleConversion 1421 | - fast_float (= 6.1.4) 1422 | - fmt (= 11.0.2) 1423 | - hermes-engine 1424 | - RCT-Folly (= 2024.11.18.00) 1425 | - React-Core/RCTBlobHeaders 1426 | - React-Core/RCTWebSocket 1427 | - React-jsi 1428 | - React-jsinspector 1429 | - React-NativeModulesApple 1430 | - React-RCTFBReactNativeSpec 1431 | - React-RCTNetwork 1432 | - ReactCommon 1433 | - React-RCTFabric (0.79.2): 1434 | - glog 1435 | - hermes-engine 1436 | - RCT-Folly/Fabric (= 2024.11.18.00) 1437 | - React-Core 1438 | - React-debug 1439 | - React-Fabric 1440 | - React-FabricComponents 1441 | - React-FabricImage 1442 | - React-featureflags 1443 | - React-graphics 1444 | - React-hermes 1445 | - React-ImageManager 1446 | - React-jsi 1447 | - React-jsinspector 1448 | - React-jsinspectortracing 1449 | - React-performancetimeline 1450 | - React-RCTAnimation 1451 | - React-RCTImage 1452 | - React-RCTText 1453 | - React-rendererconsistency 1454 | - React-renderercss 1455 | - React-rendererdebug 1456 | - React-runtimescheduler 1457 | - React-utils 1458 | - Yoga 1459 | - React-RCTFBReactNativeSpec (0.79.2): 1460 | - hermes-engine 1461 | - RCT-Folly 1462 | - RCTRequired 1463 | - RCTTypeSafety 1464 | - React-Core 1465 | - React-hermes 1466 | - React-jsi 1467 | - React-jsiexecutor 1468 | - React-NativeModulesApple 1469 | - ReactCommon 1470 | - React-RCTImage (0.79.2): 1471 | - RCT-Folly (= 2024.11.18.00) 1472 | - RCTTypeSafety 1473 | - React-Core/RCTImageHeaders 1474 | - React-jsi 1475 | - React-NativeModulesApple 1476 | - React-RCTFBReactNativeSpec 1477 | - React-RCTNetwork 1478 | - ReactCommon 1479 | - React-RCTLinking (0.79.2): 1480 | - React-Core/RCTLinkingHeaders (= 0.79.2) 1481 | - React-jsi (= 0.79.2) 1482 | - React-NativeModulesApple 1483 | - React-RCTFBReactNativeSpec 1484 | - ReactCommon 1485 | - ReactCommon/turbomodule/core (= 0.79.2) 1486 | - React-RCTNetwork (0.79.2): 1487 | - RCT-Folly (= 2024.11.18.00) 1488 | - RCTTypeSafety 1489 | - React-Core/RCTNetworkHeaders 1490 | - React-jsi 1491 | - React-NativeModulesApple 1492 | - React-RCTFBReactNativeSpec 1493 | - ReactCommon 1494 | - React-RCTRuntime (0.79.2): 1495 | - glog 1496 | - hermes-engine 1497 | - RCT-Folly/Fabric (= 2024.11.18.00) 1498 | - React-Core 1499 | - React-hermes 1500 | - React-jsi 1501 | - React-jsinspector 1502 | - React-jsinspectortracing 1503 | - React-jsitooling 1504 | - React-RuntimeApple 1505 | - React-RuntimeCore 1506 | - React-RuntimeHermes 1507 | - React-RCTSettings (0.79.2): 1508 | - RCT-Folly (= 2024.11.18.00) 1509 | - RCTTypeSafety 1510 | - React-Core/RCTSettingsHeaders 1511 | - React-jsi 1512 | - React-NativeModulesApple 1513 | - React-RCTFBReactNativeSpec 1514 | - ReactCommon 1515 | - React-RCTText (0.79.2): 1516 | - React-Core/RCTTextHeaders (= 0.79.2) 1517 | - Yoga 1518 | - React-RCTVibration (0.79.2): 1519 | - RCT-Folly (= 2024.11.18.00) 1520 | - React-Core/RCTVibrationHeaders 1521 | - React-jsi 1522 | - React-NativeModulesApple 1523 | - React-RCTFBReactNativeSpec 1524 | - ReactCommon 1525 | - React-rendererconsistency (0.79.2) 1526 | - React-renderercss (0.79.2): 1527 | - React-debug 1528 | - React-utils 1529 | - React-rendererdebug (0.79.2): 1530 | - DoubleConversion 1531 | - fast_float (= 6.1.4) 1532 | - fmt (= 11.0.2) 1533 | - RCT-Folly (= 2024.11.18.00) 1534 | - React-debug 1535 | - React-rncore (0.79.2) 1536 | - React-RuntimeApple (0.79.2): 1537 | - hermes-engine 1538 | - RCT-Folly/Fabric (= 2024.11.18.00) 1539 | - React-callinvoker 1540 | - React-Core/Default 1541 | - React-CoreModules 1542 | - React-cxxreact 1543 | - React-featureflags 1544 | - React-jserrorhandler 1545 | - React-jsi 1546 | - React-jsiexecutor 1547 | - React-jsinspector 1548 | - React-jsitooling 1549 | - React-Mapbuffer 1550 | - React-NativeModulesApple 1551 | - React-RCTFabric 1552 | - React-RCTFBReactNativeSpec 1553 | - React-RuntimeCore 1554 | - React-runtimeexecutor 1555 | - React-RuntimeHermes 1556 | - React-runtimescheduler 1557 | - React-utils 1558 | - React-RuntimeCore (0.79.2): 1559 | - glog 1560 | - hermes-engine 1561 | - RCT-Folly/Fabric (= 2024.11.18.00) 1562 | - React-cxxreact 1563 | - React-Fabric 1564 | - React-featureflags 1565 | - React-hermes 1566 | - React-jserrorhandler 1567 | - React-jsi 1568 | - React-jsiexecutor 1569 | - React-jsinspector 1570 | - React-jsitooling 1571 | - React-performancetimeline 1572 | - React-runtimeexecutor 1573 | - React-runtimescheduler 1574 | - React-utils 1575 | - React-runtimeexecutor (0.79.2): 1576 | - React-jsi (= 0.79.2) 1577 | - React-RuntimeHermes (0.79.2): 1578 | - hermes-engine 1579 | - RCT-Folly/Fabric (= 2024.11.18.00) 1580 | - React-featureflags 1581 | - React-hermes 1582 | - React-jsi 1583 | - React-jsinspector 1584 | - React-jsinspectortracing 1585 | - React-jsitooling 1586 | - React-jsitracing 1587 | - React-RuntimeCore 1588 | - React-utils 1589 | - React-runtimescheduler (0.79.2): 1590 | - glog 1591 | - hermes-engine 1592 | - RCT-Folly (= 2024.11.18.00) 1593 | - React-callinvoker 1594 | - React-cxxreact 1595 | - React-debug 1596 | - React-featureflags 1597 | - React-hermes 1598 | - React-jsi 1599 | - React-jsinspectortracing 1600 | - React-performancetimeline 1601 | - React-rendererconsistency 1602 | - React-rendererdebug 1603 | - React-runtimeexecutor 1604 | - React-timing 1605 | - React-utils 1606 | - React-timing (0.79.2) 1607 | - React-utils (0.79.2): 1608 | - glog 1609 | - hermes-engine 1610 | - RCT-Folly (= 2024.11.18.00) 1611 | - React-debug 1612 | - React-hermes 1613 | - React-jsi (= 0.79.2) 1614 | - ReactAppDependencyProvider (0.79.2): 1615 | - ReactCodegen 1616 | - ReactCodegen (0.79.2): 1617 | - DoubleConversion 1618 | - glog 1619 | - hermes-engine 1620 | - RCT-Folly 1621 | - RCTRequired 1622 | - RCTTypeSafety 1623 | - React-Core 1624 | - React-debug 1625 | - React-Fabric 1626 | - React-FabricImage 1627 | - React-featureflags 1628 | - React-graphics 1629 | - React-hermes 1630 | - React-jsi 1631 | - React-jsiexecutor 1632 | - React-NativeModulesApple 1633 | - React-RCTAppDelegate 1634 | - React-rendererdebug 1635 | - React-utils 1636 | - ReactCommon/turbomodule/bridging 1637 | - ReactCommon/turbomodule/core 1638 | - ReactCommon (0.79.2): 1639 | - ReactCommon/turbomodule (= 0.79.2) 1640 | - ReactCommon/turbomodule (0.79.2): 1641 | - DoubleConversion 1642 | - fast_float (= 6.1.4) 1643 | - fmt (= 11.0.2) 1644 | - glog 1645 | - hermes-engine 1646 | - RCT-Folly (= 2024.11.18.00) 1647 | - React-callinvoker (= 0.79.2) 1648 | - React-cxxreact (= 0.79.2) 1649 | - React-jsi (= 0.79.2) 1650 | - React-logger (= 0.79.2) 1651 | - React-perflogger (= 0.79.2) 1652 | - ReactCommon/turbomodule/bridging (= 0.79.2) 1653 | - ReactCommon/turbomodule/core (= 0.79.2) 1654 | - ReactCommon/turbomodule/bridging (0.79.2): 1655 | - DoubleConversion 1656 | - fast_float (= 6.1.4) 1657 | - fmt (= 11.0.2) 1658 | - glog 1659 | - hermes-engine 1660 | - RCT-Folly (= 2024.11.18.00) 1661 | - React-callinvoker (= 0.79.2) 1662 | - React-cxxreact (= 0.79.2) 1663 | - React-jsi (= 0.79.2) 1664 | - React-logger (= 0.79.2) 1665 | - React-perflogger (= 0.79.2) 1666 | - ReactCommon/turbomodule/core (0.79.2): 1667 | - DoubleConversion 1668 | - fast_float (= 6.1.4) 1669 | - fmt (= 11.0.2) 1670 | - glog 1671 | - hermes-engine 1672 | - RCT-Folly (= 2024.11.18.00) 1673 | - React-callinvoker (= 0.79.2) 1674 | - React-cxxreact (= 0.79.2) 1675 | - React-debug (= 0.79.2) 1676 | - React-featureflags (= 0.79.2) 1677 | - React-jsi (= 0.79.2) 1678 | - React-logger (= 0.79.2) 1679 | - React-perflogger (= 0.79.2) 1680 | - React-utils (= 0.79.2) 1681 | - SocketRocket (0.7.1) 1682 | - Yoga (0.0.0) 1683 | 1684 | DEPENDENCIES: 1685 | - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) 1686 | - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) 1687 | - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) 1688 | - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) 1689 | - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) 1690 | - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) 1691 | - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) 1692 | - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) 1693 | - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) 1694 | - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) 1695 | - RCTRequired (from `../node_modules/react-native/Libraries/Required`) 1696 | - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) 1697 | - React (from `../node_modules/react-native/`) 1698 | - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) 1699 | - React-Core (from `../node_modules/react-native/`) 1700 | - React-Core/RCTWebSocket (from `../node_modules/react-native/`) 1701 | - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) 1702 | - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) 1703 | - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) 1704 | - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) 1705 | - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) 1706 | - React-Fabric (from `../node_modules/react-native/ReactCommon`) 1707 | - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) 1708 | - React-FabricImage (from `../node_modules/react-native/ReactCommon`) 1709 | - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) 1710 | - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) 1711 | - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) 1712 | - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) 1713 | - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) 1714 | - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) 1715 | - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) 1716 | - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) 1717 | - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) 1718 | - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) 1719 | - React-jsinspectortracing (from `../node_modules/react-native/ReactCommon/jsinspector-modern/tracing`) 1720 | - React-jsitooling (from `../node_modules/react-native/ReactCommon/jsitooling`) 1721 | - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) 1722 | - React-logger (from `../node_modules/react-native/ReactCommon/logger`) 1723 | - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) 1724 | - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) 1725 | - react-native-shake (from `../..`) 1726 | - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) 1727 | - React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`) 1728 | - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) 1729 | - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) 1730 | - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) 1731 | - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) 1732 | - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) 1733 | - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) 1734 | - React-RCTFabric (from `../node_modules/react-native/React`) 1735 | - React-RCTFBReactNativeSpec (from `../node_modules/react-native/React`) 1736 | - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) 1737 | - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) 1738 | - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) 1739 | - React-RCTRuntime (from `../node_modules/react-native/React/Runtime`) 1740 | - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) 1741 | - React-RCTText (from `../node_modules/react-native/Libraries/Text`) 1742 | - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) 1743 | - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) 1744 | - React-renderercss (from `../node_modules/react-native/ReactCommon/react/renderer/css`) 1745 | - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) 1746 | - React-rncore (from `../node_modules/react-native/ReactCommon`) 1747 | - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) 1748 | - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) 1749 | - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) 1750 | - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) 1751 | - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) 1752 | - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) 1753 | - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) 1754 | - ReactAppDependencyProvider (from `build/generated/ios`) 1755 | - ReactCodegen (from `build/generated/ios`) 1756 | - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) 1757 | - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) 1758 | 1759 | SPEC REPOS: 1760 | trunk: 1761 | - SocketRocket 1762 | 1763 | EXTERNAL SOURCES: 1764 | boost: 1765 | :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" 1766 | DoubleConversion: 1767 | :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" 1768 | fast_float: 1769 | :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" 1770 | FBLazyVector: 1771 | :path: "../node_modules/react-native/Libraries/FBLazyVector" 1772 | fmt: 1773 | :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" 1774 | glog: 1775 | :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" 1776 | hermes-engine: 1777 | :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" 1778 | :tag: hermes-2025-03-03-RNv0.79.0-bc17d964d03743424823d7dd1a9f37633459c5c5 1779 | RCT-Folly: 1780 | :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" 1781 | RCTDeprecation: 1782 | :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" 1783 | RCTRequired: 1784 | :path: "../node_modules/react-native/Libraries/Required" 1785 | RCTTypeSafety: 1786 | :path: "../node_modules/react-native/Libraries/TypeSafety" 1787 | React: 1788 | :path: "../node_modules/react-native/" 1789 | React-callinvoker: 1790 | :path: "../node_modules/react-native/ReactCommon/callinvoker" 1791 | React-Core: 1792 | :path: "../node_modules/react-native/" 1793 | React-CoreModules: 1794 | :path: "../node_modules/react-native/React/CoreModules" 1795 | React-cxxreact: 1796 | :path: "../node_modules/react-native/ReactCommon/cxxreact" 1797 | React-debug: 1798 | :path: "../node_modules/react-native/ReactCommon/react/debug" 1799 | React-defaultsnativemodule: 1800 | :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" 1801 | React-domnativemodule: 1802 | :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" 1803 | React-Fabric: 1804 | :path: "../node_modules/react-native/ReactCommon" 1805 | React-FabricComponents: 1806 | :path: "../node_modules/react-native/ReactCommon" 1807 | React-FabricImage: 1808 | :path: "../node_modules/react-native/ReactCommon" 1809 | React-featureflags: 1810 | :path: "../node_modules/react-native/ReactCommon/react/featureflags" 1811 | React-featureflagsnativemodule: 1812 | :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" 1813 | React-graphics: 1814 | :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" 1815 | React-hermes: 1816 | :path: "../node_modules/react-native/ReactCommon/hermes" 1817 | React-idlecallbacksnativemodule: 1818 | :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" 1819 | React-ImageManager: 1820 | :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" 1821 | React-jserrorhandler: 1822 | :path: "../node_modules/react-native/ReactCommon/jserrorhandler" 1823 | React-jsi: 1824 | :path: "../node_modules/react-native/ReactCommon/jsi" 1825 | React-jsiexecutor: 1826 | :path: "../node_modules/react-native/ReactCommon/jsiexecutor" 1827 | React-jsinspector: 1828 | :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" 1829 | React-jsinspectortracing: 1830 | :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/tracing" 1831 | React-jsitooling: 1832 | :path: "../node_modules/react-native/ReactCommon/jsitooling" 1833 | React-jsitracing: 1834 | :path: "../node_modules/react-native/ReactCommon/hermes/executor/" 1835 | React-logger: 1836 | :path: "../node_modules/react-native/ReactCommon/logger" 1837 | React-Mapbuffer: 1838 | :path: "../node_modules/react-native/ReactCommon" 1839 | React-microtasksnativemodule: 1840 | :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" 1841 | react-native-shake: 1842 | :path: "../.." 1843 | React-NativeModulesApple: 1844 | :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" 1845 | React-oscompat: 1846 | :path: "../node_modules/react-native/ReactCommon/oscompat" 1847 | React-perflogger: 1848 | :path: "../node_modules/react-native/ReactCommon/reactperflogger" 1849 | React-performancetimeline: 1850 | :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" 1851 | React-RCTActionSheet: 1852 | :path: "../node_modules/react-native/Libraries/ActionSheetIOS" 1853 | React-RCTAnimation: 1854 | :path: "../node_modules/react-native/Libraries/NativeAnimation" 1855 | React-RCTAppDelegate: 1856 | :path: "../node_modules/react-native/Libraries/AppDelegate" 1857 | React-RCTBlob: 1858 | :path: "../node_modules/react-native/Libraries/Blob" 1859 | React-RCTFabric: 1860 | :path: "../node_modules/react-native/React" 1861 | React-RCTFBReactNativeSpec: 1862 | :path: "../node_modules/react-native/React" 1863 | React-RCTImage: 1864 | :path: "../node_modules/react-native/Libraries/Image" 1865 | React-RCTLinking: 1866 | :path: "../node_modules/react-native/Libraries/LinkingIOS" 1867 | React-RCTNetwork: 1868 | :path: "../node_modules/react-native/Libraries/Network" 1869 | React-RCTRuntime: 1870 | :path: "../node_modules/react-native/React/Runtime" 1871 | React-RCTSettings: 1872 | :path: "../node_modules/react-native/Libraries/Settings" 1873 | React-RCTText: 1874 | :path: "../node_modules/react-native/Libraries/Text" 1875 | React-RCTVibration: 1876 | :path: "../node_modules/react-native/Libraries/Vibration" 1877 | React-rendererconsistency: 1878 | :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" 1879 | React-renderercss: 1880 | :path: "../node_modules/react-native/ReactCommon/react/renderer/css" 1881 | React-rendererdebug: 1882 | :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" 1883 | React-rncore: 1884 | :path: "../node_modules/react-native/ReactCommon" 1885 | React-RuntimeApple: 1886 | :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" 1887 | React-RuntimeCore: 1888 | :path: "../node_modules/react-native/ReactCommon/react/runtime" 1889 | React-runtimeexecutor: 1890 | :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" 1891 | React-RuntimeHermes: 1892 | :path: "../node_modules/react-native/ReactCommon/react/runtime" 1893 | React-runtimescheduler: 1894 | :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" 1895 | React-timing: 1896 | :path: "../node_modules/react-native/ReactCommon/react/timing" 1897 | React-utils: 1898 | :path: "../node_modules/react-native/ReactCommon/react/utils" 1899 | ReactAppDependencyProvider: 1900 | :path: build/generated/ios 1901 | ReactCodegen: 1902 | :path: build/generated/ios 1903 | ReactCommon: 1904 | :path: "../node_modules/react-native/ReactCommon" 1905 | Yoga: 1906 | :path: "../node_modules/react-native/ReactCommon/yoga" 1907 | 1908 | SPEC CHECKSUMS: 1909 | boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 1910 | DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb 1911 | fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 1912 | FBLazyVector: 84b955f7b4da8b895faf5946f73748267347c975 1913 | fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd 1914 | glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 1915 | hermes-engine: 314be5250afa5692b57b4dd1705959e1973a8ebe 1916 | RCT-Folly: 36fe2295e44b10d831836cc0d1daec5f8abcf809 1917 | RCTDeprecation: 83ffb90c23ee5cea353bd32008a7bca100908f8c 1918 | RCTRequired: eb7c0aba998009f47a540bec9e9d69a54f68136e 1919 | RCTTypeSafety: 659ae318c09de0477fd27bbc9e140071c7ea5c93 1920 | React: c2d3aa44c49bb34e4dfd49d3ee92da5ebacc1c1c 1921 | React-callinvoker: 1bdfb7549b5af266d85757193b5069f60659ef9d 1922 | React-Core: 7150cf9b6a5af063b37003062689f1691e79c020 1923 | React-CoreModules: 15a85e6665d61678942da6ae485b351f4c699049 1924 | React-cxxreact: 74f9de59259ac951923f5726aa14f0398f167af9 1925 | React-debug: e74e76912b91e08d580c481c34881899ccf63da9 1926 | React-defaultsnativemodule: 628285212bbd65417d40ad6a9f8781830fda6c98 1927 | React-domnativemodule: 185d9808198405c176784aaf33403d713bd24fb7 1928 | React-Fabric: c814804affbe1952e16149ddd20256e1bccae67e 1929 | React-FabricComponents: 81ef47d596966121784afec9924f9562a29b1691 1930 | React-FabricImage: f14f371d678aa557101def954ac3ba27e48948ff 1931 | React-featureflags: d5facceff8f8f6de430e0acecf4979a9a0839ba9 1932 | React-featureflagsnativemodule: 96f0ab285382d95c90f663e02526a5ceefa95a11 1933 | React-graphics: 1a66ee0a3f093b125b853f6370296fadcaf6f233 1934 | React-hermes: 8b86e5f54a65ecb69cdf22b3a00a11562eda82d2 1935 | React-idlecallbacksnativemodule: 5c25ab145c602264d00cb26a397ab52e0efa031c 1936 | React-ImageManager: 15e34bd5ef1ac4a18e96660817ef70a7f99ee8c2 1937 | React-jserrorhandler: 02cdf2cd45350108be1ffd2b164578936dbbdff7 1938 | React-jsi: 6af1987cfbb1b6621664fdbf6c7b62bd4d38c923 1939 | React-jsiexecutor: 51f372998e0303585cb0317232b938d694663cbd 1940 | React-jsinspector: 3539ad976d073bfaa8a7d2fa9bef35e70e55033e 1941 | React-jsinspectortracing: e8dbacaf67c201f23052ca1c2bae2f7b84dec443 1942 | React-jsitooling: 95a34f41e3c249d42181de13b4f8d854f178ca9f 1943 | React-jsitracing: 25b029cf5cad488252d46da19dd8c4c134fd5fe4 1944 | React-logger: 368570a253f00879a1e4fea24ed4047e72e7bbf3 1945 | React-Mapbuffer: c04fcda1c6281fc0a6824c7dcc1633dd217ac1ec 1946 | React-microtasksnativemodule: ca2804a25fdcefffa0aa942aa23ab53b99614a34 1947 | react-native-shake: 6671cfa5469a6c9d086f1e7cc026195a127b56e8 1948 | React-NativeModulesApple: 452b86b29fae99ed0a4015dca3ad9cd222f88abf 1949 | React-oscompat: ef5df1c734f19b8003e149317d041b8ce1f7d29c 1950 | React-perflogger: 6fd2f6811533e9c19a61e855c3033eecbf4ad2a0 1951 | React-performancetimeline: abf31259d794c9274b3ea19c5016186925eec6c4 1952 | React-RCTActionSheet: a499b0d6d9793886b67ba3e16046a3fef2cdbbc3 1953 | React-RCTAnimation: 2595dcb10a82216a511b54742f8c28d793852ac6 1954 | React-RCTAppDelegate: f03604b70f57c9469a84a159d8abecf793a5bcff 1955 | React-RCTBlob: e00f9b4e2f151938f4d9864cf33ebf24ac03328a 1956 | React-RCTFabric: 3945d116fd271598db262d4e6ed5691d431ed9e8 1957 | React-RCTFBReactNativeSpec: 0f4d4f0da938101f2ca9d5333a8f46e527ad2819 1958 | React-RCTImage: dac5e9f8ec476aefe6e60ee640ebc1dfaf1a4dbe 1959 | React-RCTLinking: 494b785a40d952a1dfbe712f43214376e5f0e408 1960 | React-RCTNetwork: b3d7c30cd21793e268db107dd0980cb61b3c1c44 1961 | React-RCTRuntime: a8ff419d437228e7b8a793b14f9d711e1cbb82af 1962 | React-RCTSettings: a060c7e381a3896104761b8eed7e284d95e37df3 1963 | React-RCTText: 4f272b72dbb61f390d8c8274528f9fdbff983806 1964 | React-RCTVibration: 0e5326220719aca12473d703aa46693e3b4ce67a 1965 | React-rendererconsistency: 351fdbc5c1fe4da24243d939094a80f0e149c7a1 1966 | React-renderercss: d333f2ada83969591100d91ec6b23ca2e17e1507 1967 | React-rendererdebug: 039e5949b72ba63c703de020701e3fd152434c61 1968 | React-rncore: 57ed480649bb678d8bdc386d20fee8bf2b0c307c 1969 | React-RuntimeApple: 344a5e1105256000afabaa8df12c3e4cab880340 1970 | React-RuntimeCore: 0e48fb5e5160acc0334c7a723a42d42cef4b58b6 1971 | React-runtimeexecutor: d60846710facedd1edb70c08b738119b3ee2c6c2 1972 | React-RuntimeHermes: 064286a03871d932c99738e0f8ef854962ab4b99 1973 | React-runtimescheduler: e917ab17ae08c204af1ebf8f669b7e411b0220c8 1974 | React-timing: a90f4654cbda9c628614f9bee68967f1768bd6a5 1975 | React-utils: 51c4e71608b8133fecc9a15801d244ae7bdf3758 1976 | ReactAppDependencyProvider: d5dcc564f129632276bd3184e60f053fcd574d6b 1977 | ReactCodegen: 2b79c9b8d02549b88cb4b6934bda01547b7ef050 1978 | ReactCommon: 4d0da92a5eb8da86c08e3ec34bd23ab439fb2461 1979 | SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 1980 | Yoga: c758bfb934100bb4bf9cbaccb52557cee35e8bdf 1981 | 1982 | PODFILE CHECKSUM: 1e2f9b6846eba78115fb30bb792640c1f56bedee 1983 | 1984 | COCOAPODS: 1.15.2 1985 | --------------------------------------------------------------------------------