From 04f4ead6717ca1d17e52590cbbd0dd7fc929ec27 Mon Sep 17 00:00:00 2001 From: floydkim Date: Wed, 18 Feb 2026 01:50:37 +0900 Subject: [PATCH 1/2] chore: add example app for react-native 0.84.0 --- Examples/RN0840/.bundle/config | 2 + Examples/RN0840/.eslintrc.js | 4 + Examples/RN0840/.gitignore | 75 +++ Examples/RN0840/.prettierrc.js | 5 + Examples/RN0840/.watchmanconfig | 1 + Examples/RN0840/App.tsx | 188 +++++++ Examples/RN0840/Gemfile | 16 + Examples/RN0840/README.md | 97 ++++ Examples/RN0840/__tests__/App.test.tsx | 13 + Examples/RN0840/android/app/build.gradle | 119 +++++ Examples/RN0840/android/app/debug.keystore | Bin 0 -> 2257 bytes .../RN0840/android/app/proguard-rules.pro | 10 + .../android/app/src/main/AndroidManifest.xml | 27 + .../src/main/java/com/rn0840/MainActivity.kt | 22 + .../main/java/com/rn0840/MainApplication.kt | 29 ++ .../res/drawable/rn_edit_text_material.xml | 37 ++ .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3056 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5024 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2096 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2858 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4569 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7098 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6464 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10676 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9250 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15523 bytes .../app/src/main/res/values/strings.xml | 3 + .../app/src/main/res/values/styles.xml | 9 + Examples/RN0840/android/build.gradle | 21 + Examples/RN0840/android/gradle.properties | 44 ++ .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 45457 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + Examples/RN0840/android/gradlew | 251 +++++++++ Examples/RN0840/android/gradlew.bat | 99 ++++ Examples/RN0840/android/settings.gradle | 6 + Examples/RN0840/app.json | 4 + Examples/RN0840/babel.config.js | 3 + Examples/RN0840/code-push.config.ts | 116 +++++ Examples/RN0840/index.js | 9 + Examples/RN0840/ios/.xcode.env | 11 + Examples/RN0840/ios/Podfile | 34 ++ .../ios/RN0840.xcodeproj/project.pbxproj | 485 ++++++++++++++++++ .../xcshareddata/xcschemes/RN0840.xcscheme | 88 ++++ Examples/RN0840/ios/RN0840/AppDelegate.swift | 48 ++ .../AppIcon.appiconset/Contents.json | 53 ++ .../ios/RN0840/Images.xcassets/Contents.json | 6 + Examples/RN0840/ios/RN0840/Info.plist | 59 +++ .../RN0840/ios/RN0840/LaunchScreen.storyboard | 47 ++ .../RN0840/ios/RN0840/PrivacyInfo.xcprivacy | 37 ++ .../ios/RN0840/RN0840-Bridging-Header.h | 1 + Examples/RN0840/jest.config.js | 3 + Examples/RN0840/metro.config.js | 11 + Examples/RN0840/package.json | 49 ++ Examples/RN0840/tsconfig.json | 25 + 54 files changed, 2174 insertions(+) create mode 100644 Examples/RN0840/.bundle/config create mode 100644 Examples/RN0840/.eslintrc.js create mode 100644 Examples/RN0840/.gitignore create mode 100644 Examples/RN0840/.prettierrc.js create mode 100644 Examples/RN0840/.watchmanconfig create mode 100644 Examples/RN0840/App.tsx create mode 100644 Examples/RN0840/Gemfile create mode 100644 Examples/RN0840/README.md create mode 100644 Examples/RN0840/__tests__/App.test.tsx create mode 100644 Examples/RN0840/android/app/build.gradle create mode 100644 Examples/RN0840/android/app/debug.keystore create mode 100644 Examples/RN0840/android/app/proguard-rules.pro create mode 100644 Examples/RN0840/android/app/src/main/AndroidManifest.xml create mode 100644 Examples/RN0840/android/app/src/main/java/com/rn0840/MainActivity.kt create mode 100644 Examples/RN0840/android/app/src/main/java/com/rn0840/MainApplication.kt create mode 100644 Examples/RN0840/android/app/src/main/res/drawable/rn_edit_text_material.xml create mode 100644 Examples/RN0840/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 Examples/RN0840/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 Examples/RN0840/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 Examples/RN0840/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 Examples/RN0840/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 Examples/RN0840/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 Examples/RN0840/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 Examples/RN0840/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 Examples/RN0840/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 Examples/RN0840/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 Examples/RN0840/android/app/src/main/res/values/strings.xml create mode 100644 Examples/RN0840/android/app/src/main/res/values/styles.xml create mode 100644 Examples/RN0840/android/build.gradle create mode 100644 Examples/RN0840/android/gradle.properties create mode 100644 Examples/RN0840/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 Examples/RN0840/android/gradle/wrapper/gradle-wrapper.properties create mode 100755 Examples/RN0840/android/gradlew create mode 100644 Examples/RN0840/android/gradlew.bat create mode 100644 Examples/RN0840/android/settings.gradle create mode 100644 Examples/RN0840/app.json create mode 100644 Examples/RN0840/babel.config.js create mode 100644 Examples/RN0840/code-push.config.ts create mode 100644 Examples/RN0840/index.js create mode 100644 Examples/RN0840/ios/.xcode.env create mode 100644 Examples/RN0840/ios/Podfile create mode 100644 Examples/RN0840/ios/RN0840.xcodeproj/project.pbxproj create mode 100644 Examples/RN0840/ios/RN0840.xcodeproj/xcshareddata/xcschemes/RN0840.xcscheme create mode 100644 Examples/RN0840/ios/RN0840/AppDelegate.swift create mode 100644 Examples/RN0840/ios/RN0840/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Examples/RN0840/ios/RN0840/Images.xcassets/Contents.json create mode 100644 Examples/RN0840/ios/RN0840/Info.plist create mode 100644 Examples/RN0840/ios/RN0840/LaunchScreen.storyboard create mode 100644 Examples/RN0840/ios/RN0840/PrivacyInfo.xcprivacy create mode 100644 Examples/RN0840/ios/RN0840/RN0840-Bridging-Header.h create mode 100644 Examples/RN0840/jest.config.js create mode 100644 Examples/RN0840/metro.config.js create mode 100644 Examples/RN0840/package.json create mode 100644 Examples/RN0840/tsconfig.json diff --git a/Examples/RN0840/.bundle/config b/Examples/RN0840/.bundle/config new file mode 100644 index 000000000..848943bb5 --- /dev/null +++ b/Examples/RN0840/.bundle/config @@ -0,0 +1,2 @@ +BUNDLE_PATH: "vendor/bundle" +BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/Examples/RN0840/.eslintrc.js b/Examples/RN0840/.eslintrc.js new file mode 100644 index 000000000..187894b6a --- /dev/null +++ b/Examples/RN0840/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: '@react-native', +}; diff --git a/Examples/RN0840/.gitignore b/Examples/RN0840/.gitignore new file mode 100644 index 000000000..de9995595 --- /dev/null +++ b/Examples/RN0840/.gitignore @@ -0,0 +1,75 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +**/.xcode.env.local + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml +*.hprof +.cxx/ +*.keystore +!debug.keystore +.kotlin/ + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +**/fastlane/report.xml +**/fastlane/Preview.html +**/fastlane/screenshots +**/fastlane/test_output + +# Bundle artifact +*.jsbundle + +# Ruby / CocoaPods +**/Pods/ +/vendor/bundle/ + +# Temporary files created by Metro to check the health of the file watcher +.metro-health-check* + +# testing +/coverage + +# Yarn +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions diff --git a/Examples/RN0840/.prettierrc.js b/Examples/RN0840/.prettierrc.js new file mode 100644 index 000000000..06860c8d1 --- /dev/null +++ b/Examples/RN0840/.prettierrc.js @@ -0,0 +1,5 @@ +module.exports = { + arrowParens: 'avoid', + singleQuote: true, + trailingComma: 'all', +}; diff --git a/Examples/RN0840/.watchmanconfig b/Examples/RN0840/.watchmanconfig new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/Examples/RN0840/.watchmanconfig @@ -0,0 +1 @@ +{} diff --git a/Examples/RN0840/App.tsx b/Examples/RN0840/App.tsx new file mode 100644 index 000000000..d65b485bc --- /dev/null +++ b/Examples/RN0840/App.tsx @@ -0,0 +1,188 @@ +import React, { useCallback, useState } from 'react'; +import { + Button, + Platform, + ScrollView, + StatusBar, + Text, + TextInput, + View, +} from 'react-native'; +import CodePush, { + ReleaseHistoryInterface, + UpdateCheckRequest, +} from '@bravemobile/react-native-code-push'; +import axios from 'axios'; +import { SafeAreaProvider, useSafeAreaInsets } from 'react-native-safe-area-context'; + +// Set this to true before run `npx code-push release` to release a new bundle +const IS_RELEASING_BUNDLE = false; + +const REACT_NATIVE_VERSION = (() => { + const { major, minor, patch, prerelease } = Platform.constants.reactNativeVersion; + return `${major}.${minor}.${patch}` + (prerelease ? `-${prerelease}` : ''); +})(); + +function App() { + const { top } = useSafeAreaInsets(); + const [syncResult, setSyncResult] = useState(''); + const [progress, setProgress] = useState(0); + const [runningMetadata, setRunningMetadata] = useState(''); + const [pendingMetadata, setPendingMetadata] = useState(''); + const [latestMetadata, setLatestMetadata] = useState(''); + + const handleSync = useCallback(() => { + CodePush.sync( + {}, + status => { + setSyncResult(findKeyByValue(CodePush.SyncStatus, status) ?? ''); + }, + ({ receivedBytes, totalBytes }) => { + setProgress(Math.round((receivedBytes / totalBytes) * 100)); + }, + mismatch => { + console.log('CodePush mismatch', JSON.stringify(mismatch, null, 2)); + }, + ).catch(error => { + console.error(error); + console.log('Sync failed', error.message ?? 'Unknown error'); + }); + }, []); + + const handleMetadata = useCallback(async () => { + const [running, pending, latest] = await Promise.all([ + CodePush.getUpdateMetadata(CodePush.UpdateState.RUNNING), + CodePush.getUpdateMetadata(CodePush.UpdateState.PENDING), + CodePush.getUpdateMetadata(CodePush.UpdateState.LATEST), + ]); + setRunningMetadata(JSON.stringify(running ?? null, null, 2)); + setPendingMetadata(JSON.stringify(pending ?? null, null, 2)); + setLatestMetadata(JSON.stringify(latest ?? null, null, 2)); + }, []); + + return ( + + + {`React Native ${REACT_NATIVE_VERSION}`} + + {IS_RELEASING_BUNDLE && + {'UPDATED!'} + } + + + +