diff --git a/CHANGELOG.md b/CHANGELOG.md index 2eed3df..9f044a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.3.2] - 2026-05-12 + +### Fixed +- Fixed an issue where Ktor classes were getting stripped due to proguard rules. +- Fixed an issue related to blank user identifier in identification calls. +- Added a fix for masking stability during scrolls. +- Fixed an issue related to garbage characters in custom events. +- Fixed an issue with empty crash types in iOS. +- Fixed an issue with push notifications not being delivered in sandbox environments in iOS. ## [2.3.1] - 2026-04-27 @@ -28,7 +37,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [2.2.6] - 2026-02-16 ### Fixed -- Fixed an issue with session recordings on QR scan screens on Android. +- Fixed an issue with session recordings on QR scan screens on Android. ## [2.2.5] - 2026-02-02 diff --git a/devrev-sdk-react-native-2.3.2.tgz b/devrev-sdk-react-native-2.3.2.tgz new file mode 100644 index 0000000..94365de Binary files /dev/null and b/devrev-sdk-react-native-2.3.2.tgz differ diff --git a/sample/expo/app.json b/sample/expo/app.json index 0f6e793..ad36729 100644 --- a/sample/expo/app.json +++ b/sample/expo/app.json @@ -77,7 +77,15 @@ } } ], - "expo-asset" + [ + "expo-asset", + { + "assets": [ + "./assets/devrev.mp4" + ] + } + ], + "expo-video" ], "extra": { "eas": { @@ -85,4 +93,4 @@ } } } -} \ No newline at end of file +} diff --git a/sample/expo/assets/devrev.mp4 b/sample/expo/assets/devrev.mp4 new file mode 100644 index 0000000..f23eb71 Binary files /dev/null and b/sample/expo/assets/devrev.mp4 differ diff --git a/sample/expo/assets/inter-medium.ttf b/sample/expo/assets/inter-medium.ttf new file mode 100644 index 0000000..9da6019 Binary files /dev/null and b/sample/expo/assets/inter-medium.ttf differ diff --git a/sample/expo/navigator/Navigator.tsx b/sample/expo/navigator/Navigator.tsx index 1298f32..11f7e55 100644 --- a/sample/expo/navigator/Navigator.tsx +++ b/sample/expo/navigator/Navigator.tsx @@ -11,6 +11,9 @@ import FlatListScreen from '../screens/FlatListScreen'; import { TouchableOpacity, StyleSheet, Text } from 'react-native'; import CameraScreen from '../screens/CameraScreen'; import ImageUploadScreen from '../screens/ImageUpload'; +import QRScannerScreen from '../screens/QRScannerScreen'; +import LiveChartScreen from '../screens/LiveChartScreen'; +import HeavyUIScreen from '../screens/HeavyUIScreen'; export type RootStackParamList = { Home: undefined; @@ -23,6 +26,9 @@ export type RootStackParamList = { FlatListScreen: undefined; ImageUploadScreen: undefined; CameraScreen: undefined; + QRScannerScreen: undefined; + LiveChartScreen: undefined; + HeavyUIScreen: undefined; }; const Stack = createStackNavigator(); @@ -74,6 +80,21 @@ const screens = [ component: ImageUploadScreen, title: 'Gallery Upload', }, + { + name: 'QRScannerScreen', + component: QRScannerScreen, + title: 'QR Scanner', + }, + { + name: 'LiveChartScreen', + component: LiveChartScreen, + title: 'Real Time UI', + }, + { + name: 'HeavyUIScreen', + component: HeavyUIScreen, + title: 'Complex UI with Animations', + }, ] as const; const createScreen = ( diff --git a/sample/expo/package.json b/sample/expo/package.json index f307c36..3a7e389 100644 --- a/sample/expo/package.json +++ b/sample/expo/package.json @@ -19,22 +19,29 @@ "@react-navigation/native": "^7.0.15", "@react-navigation/native-stack": "^7.3.14", "@react-navigation/stack": "^7.1.2", + "@shopify/react-native-skia": "^2.4.21", "expo": "^53.0.0", "expo-asset": "~11.1.7", "expo-build-properties": "~0.14.8", "expo-camera": "~16.1.11", "expo-file-system": "~18.1.11", "expo-firebase-messaging": "^2.0.0", + "expo-image": "~2.4.1", "expo-image-picker": "~16.1.4", "expo-notifications": "~0.31.4", "expo-system-ui": "~5.0.11", + "expo-video": "^3.0.16", + "lottie-react-native": "5.1.6", "react": "19.0.0", "react-native": "0.79.5", "react-native-device-info": "^14.0.2", "react-native-gesture-handler": "~2.24.0", + "react-native-reanimated": "~4.1.0", "react-native-safe-area-context": "^5.6.2", "react-native-screens": "~4.11.1", - "react-native-webview": "13.13.5" + "react-native-webview": "13.13.5", + "react-native-worklets": "~0.5.0", + "victory-native": "^41.20.2" }, "devDependencies": { "@babel/core": "^7.25.2", diff --git a/sample/expo/screens/HeavyUIScreen.tsx b/sample/expo/screens/HeavyUIScreen.tsx new file mode 100644 index 0000000..803c894 --- /dev/null +++ b/sample/expo/screens/HeavyUIScreen.tsx @@ -0,0 +1,220 @@ +import React from 'react'; +import { + View, + StyleSheet, + StatusBar, + Platform, + ScrollView, + Text, +} from 'react-native'; +import { Image } from 'expo-image'; +import LottieView from 'lottie-react-native'; +import { VideoView, useVideoPlayer } from 'expo-video'; + +const LottieAnimationURLs = [ + [ + 'https://assets9.lottiefiles.com/packages/lf20_jbrw3hcz.json', + 'https://assets1.lottiefiles.com/packages/lf20_touohxv0.json', + 'https://assets4.lottiefiles.com/packages/lf20_lk80fpsm.json', + ], + [ + 'https://assets4.lottiefiles.com/packages/lf20_p8bfn5to.json', + 'https://assets8.lottiefiles.com/packages/lf20_j3UXNf.json', + 'https://assets2.lottiefiles.com/packages/lf20_rwq6ciql.json', + ], + [ + 'https://assets2.lottiefiles.com/packages/lf20_uu0x8lqv.json', + 'https://assets1.lottiefiles.com/packages/lf20_V9t630.json', + 'https://assets8.lottiefiles.com/packages/lf20_atippmse.json', + ], + [ + 'https://assets5.lottiefiles.com/packages/lf20_w98qte06.json', + 'https://assets3.lottiefiles.com/packages/lf20_w51pcehl.json', + 'https://assets6.lottiefiles.com/packages/lf20_ydo1amjm.json', + ], +] as const; + +const ImageUrls = [ + 'https://images.unsplash.com/photo-1555066931-4365d14bab8c', + 'https://images.unsplash.com/photo-1521737604893-d14cc237f11d', + 'https://images.unsplash.com/photo-1677442136019-21780ecad995', + 'https://images.unsplash.com/photo-1498050108023-c5249f4df085', +] as const; + +function Video() { + const videoPlayer = useVideoPlayer( + require('../assets/devrev.mp4'), + (player) => { + player.loop = true; + player.play(); + player.muted = true; + } + ); + + return ( + + ); +} + +export default function HeavyUIScreen() { + return ( + + + + + + Video + + + + + + + + + Lottie Animations + + + {LottieAnimationURLs.map((urls, index) => ( + + {urls.map((url, idx) => ( + + + + ))} + + ))} + + + + + Images + + + {ImageUrls.map((url, index) => ( + + + + ))} + + + + + ); +} + +const styles = StyleSheet.create({ + screen: { + flex: 1, + backgroundColor: '#F4F6F8', + }, + container: { + flex: 1, + }, + contentContainer: { + padding: 16, + paddingBottom: 40, + }, + section: { + marginBottom: 28, + }, + title: { + fontSize: 24, + fontWeight: '700', + color: '#111', + marginBottom: 12, + paddingHorizontal: 4, + }, + card: { + borderRadius: 16, + backgroundColor: '#fff', + shadowColor: '#000', + shadowOffset: { width: 0, height: 6 }, + shadowOpacity: 0.12, + shadowRadius: 10, + elevation: 6, + overflow: Platform.OS === 'android' ? 'hidden' : 'visible', + }, + mediaWrapper: { + borderRadius: 16, + overflow: 'hidden', + }, + horizontalScrollContainer: { + paddingHorizontal: 4, + gap: 14, + }, + verticalScroll: { + marginRight: 16, + maxHeight: 320, + }, + verticalScrollContainer: { + paddingVertical: 4, + }, + horizontalCard: { + width: 150, + height: 150, + marginBottom: 14, + borderRadius: 16, + backgroundColor: '#fff', + shadowColor: '#000', + shadowOffset: { width: 0, height: 4 }, + shadowOpacity: 0.12, + shadowRadius: 8, + elevation: 5, + overflow: 'hidden', + justifyContent: 'center', + alignItems: 'center', + }, + lottie: { + width: 120, + height: 120, + }, + image: { + width: '100%', + height: '100%', + borderRadius: 16, + }, + media: { + flex: 1, + width: '100%', + aspectRatio: 16 / 9, + backgroundColor: '#E5E7EB', + }, +}); diff --git a/sample/expo/screens/LiveChartScreen.tsx b/sample/expo/screens/LiveChartScreen.tsx new file mode 100644 index 0000000..ea06cdd --- /dev/null +++ b/sample/expo/screens/LiveChartScreen.tsx @@ -0,0 +1,387 @@ +import { useFont } from '@shopify/react-native-skia'; +import React, { useRef, useState, useMemo } from 'react'; +import { + View, + Text, + StyleSheet, + Pressable, + TextInput, + FlatList, +} from 'react-native'; +import { CartesianChart, Line, useChartTransformState } from 'victory-native'; +import TouchableOpacityButton from '../components/TouchableOpacityButton'; + +const MAX_POINTS = 200; + +type ChartPoint = { + time: number; + price: number; +}; + +type PriceState = { + price: number; + open: number; +}; + +const SYMBOLS = [ + { symbol: 'btcusdt', name: 'Bitcoin' }, + { symbol: 'ethusdt', name: 'Ethereum' }, + { symbol: 'bnbusdt', name: 'BNB' }, + { symbol: 'xrpusdt', name: 'XRP' }, + { symbol: 'adausdt', name: 'Cardano' }, + { symbol: 'solusdt', name: 'Solana' }, + { symbol: 'dogeusdt', name: 'Dogecoin' }, + { symbol: 'maticusdt', name: 'Polygon' }, + { symbol: 'ltcusdt', name: 'Litecoin' }, + { symbol: 'trxusdt', name: 'TRON' }, + { symbol: 'dotusdt', name: 'Polkadot' }, + { symbol: 'avaxusdt', name: 'Avalanche' }, + { symbol: 'linkusdt', name: 'Chainlink' }, + { symbol: 'atomusdt', name: 'Cosmos' }, + { symbol: 'uniusdt', name: 'Uniswap' }, +]; + +type ConnectionStatus = 'connecting' | 'connected' | 'disconnected' | 'error'; + +const MarketRow = React.memo( + ({ + item, + priceState, + selected, + onSelect, + }: { + item: { symbol: string; name: string }; + priceState?: PriceState; + selected: string; + onSelect: (symbol: string) => void; + }) => { + const price = priceState?.price ?? 0; + const open = priceState?.open ?? price; + const change = price - open; + const percent = open !== 0 ? ((change / open) * 100).toFixed(2) : '0.00'; + + const isUp = change >= 0; + + return ( + onSelect(item.symbol)} + style={[styles.card, item.symbol === selected && styles.selectedCard]} + > + + {item.name} + {item.symbol.toUpperCase()} + + + + ${price.toFixed(2)} + + {isUp ? '+' : ''} + {percent}% + + + + ); + } +); + +const LiveChartScreen: React.FC = () => { + const [selected, setSelected] = useState('btcusdt'); + const [chartData, setChartData] = useState([]); + const [prices, setPrices] = useState>({}); + const [search, setSearch] = useState(''); + const [connectionStatus, setConnectionStatus] = + React.useState('connecting'); + const reconnectTimeout = React.useRef(null); + + const { state: transformState } = useChartTransformState({ + scaleX: 1.0, + scaleY: 1.0, + }); + + const ws = useRef(null); + + const font = useFont(require('../assets/inter-medium.ttf'), 10); + + React.useEffect(() => { + let isMounted = true; + + const connectWebSocket = () => { + setConnectionStatus('connecting'); + + const streams = SYMBOLS.map((s) => `${s.symbol}@trade`).join('/'); + + const socket = new WebSocket( + `wss://stream.binance.com:9443/stream?streams=${streams}` + ); + + ws.current = socket; + + socket.onopen = () => { + if (!isMounted) return; + setConnectionStatus('connected'); + console.log('WebSocket connected'); + }; + + socket.onmessage = (event) => { + const message = JSON.parse(event.data); + const trade = message.data; + + const symbol = trade.s.toLowerCase(); + const price = parseFloat(trade.p); + + setPrices((prev) => { + const prevSymbol = prev[symbol]; + return { + ...prev, + [symbol]: { + price, + open: prevSymbol?.open ?? price, + }, + }; + }); + + if (symbol === selected) { + setChartData((prev) => { + const newData = [...prev, { time: Date.now(), price }]; + return newData.slice(-MAX_POINTS); + }); + } + }; + + socket.onerror = () => { + if (!isMounted) return; + setConnectionStatus('error'); + scheduleReconnect(); + }; + + socket.onclose = () => { + if (!isMounted) return; + setConnectionStatus('disconnected'); + scheduleReconnect(); + }; + }; + + const scheduleReconnect = () => { + if (reconnectTimeout.current) return; + + reconnectTimeout.current = setTimeout(() => { + reconnectTimeout.current = null; + connectWebSocket(); + }, 3000); + }; + + connectWebSocket(); + + return () => { + isMounted = false; + ws.current?.close(); + if (reconnectTimeout.current) { + clearTimeout(reconnectTimeout.current); + } + }; + }, [selected]); + + const filteredSymbols = useMemo(() => { + const selectedSymbol = SYMBOLS.find((s) => s.symbol === selected); + + if (!search) { + return selectedSymbol + ? [selectedSymbol, ...SYMBOLS.filter((s) => s.symbol !== selected)] + : SYMBOLS; + } + + const otherMatchedSymbols = SYMBOLS.filter( + (s) => + s.symbol !== selected && + (s.name.toLowerCase().includes(search.toLowerCase()) || + s.symbol.toLowerCase().includes(search.toLowerCase())) + ); + + return selectedSymbol + ? [selectedSymbol, ...otherMatchedSymbols] + : otherMatchedSymbols; + }, [search, selected]); + + const latestPrice = prices[selected]?.price?.toFixed(2) ?? '--'; + + if (connectionStatus !== 'connected') { + + + {connectionStatus === 'connecting' && 'Connecting to live market...'} + {connectionStatus === 'disconnected' && + 'Connection lost. Reconnecting...'} + {connectionStatus === 'error' && 'Connection error. Retrying...'} + + + { + ws.current?.close(); + setConnectionStatus('connecting'); + }} + buttonStyle={styles.retryButton} + textStyle={styles.retryText} + buttonText="Retry Now" + /> + ; + } + + return ( + item.symbol} + contentContainerStyle={styles.container} + keyboardShouldPersistTaps="handled" + ListHeaderComponent={ + <> + + + {SYMBOLS.find((s) => s.symbol === selected)?.name} + + ${latestPrice} + + + + + {({ points }) => ( + + )} + + + + Market Watch + + + + } + initialNumToRender={20} + renderItem={({ item }) => ( + + )} + /> + ); +}; + +const styles = StyleSheet.create({ + perecentageText: { + fontWeight: '600', + }, + selectedCard: { + backgroundColor: '#e0f2ff', + }, + itemEnd: { + alignItems: 'flex-end', + }, + container: { + backgroundColor: '#fff', + paddingHorizontal: 20, + paddingVertical: 20, + }, + titleContainer: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + }, + title: { + fontSize: 22, + fontWeight: 'bold', + }, + price: { + fontSize: 18, + }, + chart: { + height: 280, + width: '100%', + }, + section: { + fontSize: 18, + fontWeight: '600', + marginBottom: 10, + }, + search: { + color: '#000', + padding: 10, + borderRadius: 8, + backgroundColor: '#f1f1f1', + }, + card: { + flexDirection: 'row', + justifyContent: 'space-between', + marginVertical: 8, + padding: 15, + borderRadius: 10, + backgroundColor: '#f9f9f9', + }, + coinName: { + fontSize: 16, + fontWeight: '600', + }, + symbol: { + color: 'gray', + }, + priceSmall: { + fontSize: 16, + fontWeight: '600', + }, + connectionBanner: { + backgroundColor: '#ffe9e9', + padding: 12, + borderRadius: 8, + marginVertical: 10, + }, + connectionText: { + color: '#c62828', + fontWeight: '500', + marginBottom: 6, + }, + retryButton: { + alignSelf: 'flex-start', + backgroundColor: '#c62828', + paddingHorizontal: 12, + paddingVertical: 6, + borderRadius: 6, + }, + retryText: { + color: '#fff', + fontWeight: '600', + }, + colorGreen: { + color: 'green', + }, + colorRed: { + color: 'red', + }, +}); + +export default LiveChartScreen; diff --git a/sample/expo/screens/QRScannerScreen.tsx b/sample/expo/screens/QRScannerScreen.tsx new file mode 100644 index 0000000..b0902f3 --- /dev/null +++ b/sample/expo/screens/QRScannerScreen.tsx @@ -0,0 +1,130 @@ +import React, { useCallback } from 'react'; +import { View, Text, StyleSheet, TouchableOpacity } from 'react-native'; +import { + BarcodeScanningResult, + CameraView, + useCameraPermissions, +} from 'expo-camera'; + +const QRScannerScreen: React.FC = () => { + const [permission, requestPermission] = useCameraPermissions(); + const cameraRef = React.useRef(null); + const [result, setResult] = React.useState(null); + const [scanned, setScanned] = React.useState(false); + + const handleScan = useCallback( + ({ data }: BarcodeScanningResult) => { + if (scanned) return; + + setScanned(true); + setResult(data); + }, + [scanned] + ); + + const handleScanAgain = () => { + setResult(null); + setScanned(false); + }; + + if (!permission?.granted) { + return ( + + Camera permission is required + + + Grant Permission + + + ); + } + + return ( + + + + + Scanned Result + + + {result ?? 'No QR code scanned yet'} + + + {scanned && ( + + Scan Again + + )} + + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#fff', + }, + camera: { + flex: 4, + }, + resultContainer: { + flex: 1, + padding: 16, + borderTopWidth: 1, + borderColor: '#eee', + justifyContent: 'center', + }, + label: { + fontSize: 14, + fontWeight: '600', + color: '#666', + }, + resultText: { + fontSize: 16, + color: '#007AFF', + marginTop: 8, + }, + scanAgainButton: { + marginTop: 12, + backgroundColor: '#007AFF', + padding: 12, + borderRadius: 8, + alignItems: 'center', + }, + scanAgainText: { + color: '#fff', + fontWeight: '600', + }, + center: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + permissionText: { + fontSize: 16, + marginBottom: 10, + }, + button: { + backgroundColor: '#007AFF', + padding: 12, + borderRadius: 8, + }, + buttonText: { + color: '#fff', + }, +}); + +export default QRScannerScreen; diff --git a/sample/expo/screens/SessionAnalyticsScreen.tsx b/sample/expo/screens/SessionAnalyticsScreen.tsx index ab44415..ed2046d 100644 --- a/sample/expo/screens/SessionAnalyticsScreen.tsx +++ b/sample/expo/screens/SessionAnalyticsScreen.tsx @@ -1,4 +1,4 @@ -import React, { useRef } from 'react'; +import React, { useEffect, useRef } from 'react'; import { ScrollView, Text, @@ -77,7 +77,23 @@ const MediaButtons = [ text: 'Gallery Image Upload', screenname: 'ImageUploadScreen', }, + { + text: 'QR Scanner', + screenname: 'QRScannerScreen', + }, ] as const; + +const HeavyUIButtons = [ + { + text: 'Real Time UI', + screenname: 'LiveChartScreen', + }, + { + text: 'Complex UI with Animations', + screenname: 'HeavyUIScreen', + }, +] as const; + const SessionAnalyticsScreen = ({ navigation }: { navigation: any }) => { const sensitiveLabelRef = useRef(null); const unsensitiveLabelRef = useRef(null); @@ -87,25 +103,31 @@ const SessionAnalyticsScreen = ({ navigation }: { navigation: any }) => { DevRev.trackScreen('Session Analytics Screen'); - if (sensitiveLabelRef.current) { - const sensitiveLabelHandle = findNodeHandle(sensitiveLabelRef.current); - if (sensitiveLabelHandle) { - try { - DevRev.markSensitiveViews([`devrev-mask-${sensitiveLabelHandle}`]); - } catch (error) { - console.error('Failed to mark view as sensitive:', error); + useEffect(() => { + if (sensitiveLabelRef.current) { + const sensitiveLabelHandle = findNodeHandle(sensitiveLabelRef.current); + if (sensitiveLabelHandle) { + try { + DevRev.markSensitiveViews([sensitiveLabelHandle]); + } catch (error) { + console.error('Failed to mark view as sensitive:', error); + } } } - const unsensitiveLabelHandle = findNodeHandle(unsensitiveLabelRef.current); - if (unsensitiveLabelHandle) { - try { - DevRev.markSensitiveViews([`devrev-mask-${unsensitiveLabelHandle}`]); - } catch (error) { - console.error('Failed to mark view as unsensitive:', error); + if (unsensitiveLabelRef.current) { + const unsensitiveLabelHandle = findNodeHandle( + unsensitiveLabelRef.current + ); + if (unsensitiveLabelHandle) { + try { + DevRev.unmarkSensitiveViews([unsensitiveLabelHandle]); + } catch (error) { + console.error('Failed to mark view as unsensitive:', error); + } } } - } + }, []); const displayScreenTransition = () => { if (Platform.OS === 'android') { @@ -151,6 +173,17 @@ const SessionAnalyticsScreen = ({ navigation }: { navigation: any }) => { /> ))} + Heavy UI + {HeavyUIButtons.map((button, index) => ( + navigation.navigate(button.screenname)} + buttonText={button.text} + buttonStyle={styles.button} + textStyle={styles.buttonText} + /> + ))} + Timers {Timer.map((button, index) => ( aps-environment - development + production diff --git a/sample/react-native/ios/DevRevSDKSampleRN.xcodeproj/project.pbxproj b/sample/react-native/ios/DevRevSDKSampleRN.xcodeproj/project.pbxproj index 203aae0..921030c 100644 --- a/sample/react-native/ios/DevRevSDKSampleRN.xcodeproj/project.pbxproj +++ b/sample/react-native/ios/DevRevSDKSampleRN.xcodeproj/project.pbxproj @@ -12,21 +12,21 @@ 1CA606002D13FC7000B2293B /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1CA605FF2D13FC7000B2293B /* GoogleService-Info.plist */; }; 343065452DDCF35A009F6083 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 343065442DDCF35A009F6083 /* AppDelegate.swift */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; - EF1AA09255E944CC774FB0C1 /* Pods_DevRevSDKSampleRN.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3EE8C8BC611A9CAA5574249 /* Pods_DevRevSDKSampleRN.framework */; }; + 9A7308EF88995ACC89BC2D5E /* Pods_DevRevSDKSampleRN.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B805A1AA9820977AFB76CD04 /* Pods_DevRevSDKSampleRN.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 0D11B4630DE9A1CBBC436572 /* Pods-DevRevSDKSampleRN.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DevRevSDKSampleRN.release.xcconfig"; path = "Target Support Files/Pods-DevRevSDKSampleRN/Pods-DevRevSDKSampleRN.release.xcconfig"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* DevRevSDKSampleRN.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DevRevSDKSampleRN.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Sources/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Sources/Info.plist; sourceTree = ""; }; 1CA605FF2D13FC7000B2293B /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 1CA606012D13FCE400B2293B /* DevRevSDKSampleRN.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DevRevSDKSampleRN.entitlements; sourceTree = ""; }; + 2B0E65D32F3CD21B96AC4526 /* Pods-DevRevSDKSampleRN.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DevRevSDKSampleRN.debug.xcconfig"; path = "Target Support Files/Pods-DevRevSDKSampleRN/Pods-DevRevSDKSampleRN.debug.xcconfig"; sourceTree = ""; }; 343065442DDCF35A009F6083 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = Sources/AppDelegate.swift; sourceTree = ""; }; - 60508B310A9753744EE0782C /* Pods-DevRevSDKSampleRN.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DevRevSDKSampleRN.release.xcconfig"; path = "Target Support Files/Pods-DevRevSDKSampleRN/Pods-DevRevSDKSampleRN.release.xcconfig"; sourceTree = ""; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = Sources/LaunchScreen.storyboard; sourceTree = ""; }; - 8AC6DBD62B5701538664BE92 /* Pods-DevRevSDKSampleRN.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DevRevSDKSampleRN.debug.xcconfig"; path = "Target Support Files/Pods-DevRevSDKSampleRN/Pods-DevRevSDKSampleRN.debug.xcconfig"; sourceTree = ""; }; A2B83FA1ACA1BE40552EEA27 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = ""; }; - E3EE8C8BC611A9CAA5574249 /* Pods_DevRevSDKSampleRN.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DevRevSDKSampleRN.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B805A1AA9820977AFB76CD04 /* Pods_DevRevSDKSampleRN.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DevRevSDKSampleRN.framework; sourceTree = BUILT_PRODUCTS_DIR; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -35,7 +35,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EF1AA09255E944CC774FB0C1 /* Pods_DevRevSDKSampleRN.framework in Frameworks */, + 9A7308EF88995ACC89BC2D5E /* Pods_DevRevSDKSampleRN.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -59,7 +59,7 @@ isa = PBXGroup; children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - E3EE8C8BC611A9CAA5574249 /* Pods_DevRevSDKSampleRN.framework */, + B805A1AA9820977AFB76CD04 /* Pods_DevRevSDKSampleRN.framework */, ); name = Frameworks; sourceTree = ""; @@ -105,8 +105,8 @@ BBD78D7AC51CEA395F1C20DB /* Pods */ = { isa = PBXGroup; children = ( - 8AC6DBD62B5701538664BE92 /* Pods-DevRevSDKSampleRN.debug.xcconfig */, - 60508B310A9753744EE0782C /* Pods-DevRevSDKSampleRN.release.xcconfig */, + 2B0E65D32F3CD21B96AC4526 /* Pods-DevRevSDKSampleRN.debug.xcconfig */, + 0D11B4630DE9A1CBBC436572 /* Pods-DevRevSDKSampleRN.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -118,14 +118,15 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "DevRevSDKSampleRN" */; buildPhases = ( - 79D99AFFD42C79566699A194 /* [CP] Check Pods Manifest.lock */, + 8B8627DD21B3CE1F1BC53627 /* [CP] Check Pods Manifest.lock */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 9EEBE2A4BA4AAA08EBC649BE /* [CP] Embed Pods Frameworks */, - 2DB4C6E723704CE6C198EFF3 /* [CP] Copy Pods Resources */, - 84F618E3FF9BDBCFDD8C71E6 /* [CP-User] [RNFB] Core Configuration */, + 562D1844B67636292AE9C0EE /* [DevRev] Embed SPM Frameworks */, + 0613B587B6D102BCD69A3171 /* [CP] Embed Pods Frameworks */, + 723C2962CCD2DE0D7A350B3D /* [CP] Copy Pods Resources */, + 94ABE5EF039C55FDBA9B3116 /* [CP-User] [RNFB] Core Configuration */, ); buildRules = ( ); @@ -198,7 +199,42 @@ shellPath = /bin/sh; 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"; }; - 2DB4C6E723704CE6C198EFF3 /* [CP] Copy Pods Resources */ = { + 0613B587B6D102BCD69A3171 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-DevRevSDKSampleRN/Pods-DevRevSDKSampleRN-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-DevRevSDKSampleRN/Pods-DevRevSDKSampleRN-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-DevRevSDKSampleRN/Pods-DevRevSDKSampleRN-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 562D1844B67636292AE9C0EE /* [DevRev] Embed SPM Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "[DevRev] Embed SPM Frameworks"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "FRAMEWORKS_TO_EMBED=(\"DevRevSDK\")\nfor fw in \"${FRAMEWORKS_TO_EMBED[@]}\"; do\n FW_PATH=\"${BUILT_PRODUCTS_DIR}/PackageFrameworks/${fw}.framework\"\n if [ ! -d \"$FW_PATH\" ]; then\n FW_PATH=\"${BUILT_PRODUCTS_DIR}/${fw}.framework\"\n fi\n if [ -d \"$FW_PATH\" ]; then\n DEST=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n mkdir -p \"$DEST\"\n rsync -av --delete \"$FW_PATH\" \"$DEST/\"\n if [ \"${CODE_SIGNING_ALLOWED:-NO}\" = \"YES\" ] && [ -n \"${EXPANDED_CODE_SIGN_IDENTITY:-}\" ]; then\n codesign --force --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" --preserve-metadata=identifier,entitlements \"$DEST/${fw}.framework\"\n fi\n fi\ndone\n"; + }; + 723C2962CCD2DE0D7A350B3D /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -215,7 +251,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-DevRevSDKSampleRN/Pods-DevRevSDKSampleRN-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 79D99AFFD42C79566699A194 /* [CP] Check Pods Manifest.lock */ = { + 8B8627DD21B3CE1F1BC53627 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -237,7 +273,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 84F618E3FF9BDBCFDD8C71E6 /* [CP-User] [RNFB] Core Configuration */ = { + 94ABE5EF039C55FDBA9B3116 /* [CP-User] [RNFB] Core Configuration */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -250,23 +286,6 @@ shellPath = /bin/sh; shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##########################################################################\n##########################################################################\n#\n# NOTE THAT IF YOU CHANGE THIS FILE YOU MUST RUN pod install AFTERWARDS\n#\n# This file is installed as an Xcode build script in the project file\n# by cocoapods, and you will not see your changes until you pod install\n#\n##########################################################################\n##########################################################################\n\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -Ku -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -Ku -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_analytics_storage\n _ANALYTICS_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_analytics_storage\")\n if [[ $_ANALYTICS_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_storage\n _ANALYTICS_AD_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_storage\")\n if [[ $_ANALYTICS_AD_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_user_data\n _ANALYTICS_AD_USER_DATA=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_user_data\")\n if [[ $_ANALYTICS_AD_USER_DATA ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_USER_DATA\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.analytics_registration_with_ad_network_enabled\n _ANALYTICS_REGISTRATION_WITH_AD_NETWORK=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_registration_with_ad_network_enabled\")\n if [[ $_ANALYTICS_REGISTRATION_WITH_AD_NETWORK ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_REGISTRATION_WITH_AD_NETWORK_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_REGISTRATION_WITH_AD_NETWORK\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n"; }; - 9EEBE2A4BA4AAA08EBC649BE /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-DevRevSDKSampleRN/Pods-DevRevSDKSampleRN-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-DevRevSDKSampleRN/Pods-DevRevSDKSampleRN-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-DevRevSDKSampleRN/Pods-DevRevSDKSampleRN-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -283,13 +302,13 @@ /* Begin XCBuildConfiguration section */ 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8AC6DBD62B5701538664BE92 /* Pods-DevRevSDKSampleRN.debug.xcconfig */; + baseConfigurationReference = 2B0E65D32F3CD21B96AC4526 /* Pods-DevRevSDKSampleRN.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = DevRevSDKSampleRN.entitlements; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = NJDA6Y3XRS; ENABLE_BITCODE = NO; INFOPLIST_FILE = Sources/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -302,7 +321,7 @@ "-ObjC", "-lc++", ); - PRODUCT_BUNDLE_IDENTIFIER = ai.devrev.sdk.bridge.reactnative.sample; + PRODUCT_BUNDLE_IDENTIFIER = ai.devrev.mobile.dev; PRODUCT_NAME = DevRevSDKSampleRN; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -312,13 +331,15 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60508B310A9753744EE0782C /* Pods-DevRevSDKSampleRN.release.xcconfig */; + baseConfigurationReference = 0D11B4630DE9A1CBBC436572 /* Pods-DevRevSDKSampleRN.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = DevRevSDKSampleRN.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = NJDA6Y3XRS; INFOPLIST_FILE = Sources/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -332,6 +353,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = ai.devrev.sdk.bridge.reactnative.sample; PRODUCT_NAME = DevRevSDKSampleRN; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; }; @@ -421,10 +443,7 @@ "-DFOLLY_CFG_NO_COROUTINES=1", "-DFOLLY_HAVE_CLOCK_GETTIME=1", ); - OTHER_LDFLAGS = ( - "$(inherited)", - " ", - ); + OTHER_LDFLAGS = "$(inherited) "; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; @@ -508,10 +527,7 @@ "-DFOLLY_CFG_NO_COROUTINES=1", "-DFOLLY_HAVE_CLOCK_GETTIME=1", ); - OTHER_LDFLAGS = ( - "$(inherited)", - " ", - ); + OTHER_LDFLAGS = "$(inherited) "; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; USE_HERMES = true; diff --git a/sample/react-native/ios/DevRevSDKSampleRN.xcodeproj/xcshareddata/xcschemes/DevRevSDKSampleRN.xcscheme b/sample/react-native/ios/DevRevSDKSampleRN.xcodeproj/xcshareddata/xcschemes/DevRevSDKSampleRN.xcscheme index d3c6ac5..ddb460f 100644 --- a/sample/react-native/ios/DevRevSDKSampleRN.xcodeproj/xcshareddata/xcschemes/DevRevSDKSampleRN.xcscheme +++ b/sample/react-native/ios/DevRevSDKSampleRN.xcodeproj/xcshareddata/xcschemes/DevRevSDKSampleRN.xcscheme @@ -31,7 +31,7 @@ shouldAutocreateTestPlan = "YES"> + + + + diff --git a/sample/react-native/ios/DevRevSDKSampleRN.xcworkspace/xcshareddata/swiftpm/Package.resolved b/sample/react-native/ios/DevRevSDKSampleRN.xcworkspace/xcshareddata/swiftpm/Package.resolved index db01ae6..c8f7252 100644 --- a/sample/react-native/ios/DevRevSDKSampleRN.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/sample/react-native/ios/DevRevSDKSampleRN.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -6,8 +6,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/devrev/devrev-sdk-ios.git", "state" : { - "revision" : "a272becbeccba748545bc78d47ac2b01372b4ae7", - "version" : "2.2.9" + "revision" : "9d0c748067ed66906dc0a9388abdf2aa2a3b9de7", + "version" : "2.3.6" } } ], diff --git a/sample/react-native/ios/GoogleService-Info.plist b/sample/react-native/ios/GoogleService-Info.plist index ba10bf1..50d3c49 100644 --- a/sample/react-native/ios/GoogleService-Info.plist +++ b/sample/react-native/ios/GoogleService-Info.plist @@ -2,15 +2,29 @@ - API_KEY - DUMMY_API_KEY - CLIENT_ID - DUMMY_CLIENT_ID - GOOGLE_APP_ID - 1:1234567890:ios:abcdef123456 - PROJECT_ID - dummy-project - BUNDLE_ID - ai.devrev.sdk.bridge.reactnative.sample + API_KEY + AIzaSyAP61uxqfXCAvpmtqPU_k5XR35Kmx2IU-c + GCM_SENDER_ID + 91712188040 + PLIST_VERSION + 1 + BUNDLE_ID + ai.devrev.sdk.sample.swiftui + PROJECT_ID + devrev-sdk-samples + STORAGE_BUCKET + devrev-sdk-samples.firebasestorage.app + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:91712188040:ios:8dbb42b4deb282afdf393d - + \ No newline at end of file diff --git a/sample/react-native/ios/Podfile b/sample/react-native/ios/Podfile index 90c2000..14eaa41 100644 --- a/sample/react-native/ios/Podfile +++ b/sample/react-native/ios/Podfile @@ -30,5 +30,38 @@ target 'DevRevSDKSampleRN' do :mac_catalyst_enabled => false, # :ccache_enabled => true ) + + # Embed SPM-resolved DevRevSDK.framework into the app bundle. + # The spm_dependency in the podspec links DevRevSDK to the pod target, + # but does not embed it in the app — causing a dyld "Library not loaded" crash. + project_path = File.join(__dir__, "DevRevSDKSampleRN.xcodeproj") + project = Xcodeproj::Project.open(project_path) + app_target = project.targets.find { |t| t.name == "DevRevSDKSampleRN" } + + if app_target + phase_name = "[DevRev] Embed SPM Frameworks" + existing = app_target.shell_script_build_phases.find { |p| p.name == phase_name } + unless existing + phase = app_target.new_shell_script_build_phase(phase_name) + phase.shell_script = <<~'SCRIPT' + FRAMEWORKS_TO_EMBED=("DevRevSDK") + for fw in "${FRAMEWORKS_TO_EMBED[@]}"; do + FW_PATH="${BUILT_PRODUCTS_DIR}/PackageFrameworks/${fw}.framework" + if [ ! -d "$FW_PATH" ]; then + FW_PATH="${BUILT_PRODUCTS_DIR}/${fw}.framework" + fi + if [ -d "$FW_PATH" ]; then + DEST="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "$DEST" + rsync -av --delete "$FW_PATH" "$DEST/" + if [ "${CODE_SIGNING_ALLOWED:-NO}" = "YES" ] && [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" ]; then + codesign --force --sign "${EXPANDED_CODE_SIGN_IDENTITY}" --preserve-metadata=identifier,entitlements "$DEST/${fw}.framework" + fi + fi + done + SCRIPT + end + project.save + end end end diff --git a/sample/react-native/ios/Podfile.lock b/sample/react-native/ios/Podfile.lock index cc44017..1987c68 100644 --- a/sample/react-native/ios/Podfile.lock +++ b/sample/react-native/ios/Podfile.lock @@ -1,6 +1,8 @@ PODS: - boost (1.84.0) - - devrev-sdk-react-native (2.2.4): + - BVLinearGradient (2.8.3): + - React-Core + - devrev-sdk-react-native (2.3.2): - DoubleConversion - glog - hermes-engine @@ -26,30 +28,30 @@ PODS: - Yoga - DoubleConversion (1.1.6) - fast_float (6.1.4) - - FBLazyVector (0.79.2) - - Firebase/CoreOnly (11.10.0): - - FirebaseCore (~> 11.10.0) - - Firebase/Installations (11.10.0): + - FBLazyVector (0.79.7) + - Firebase/CoreOnly (11.11.0): + - FirebaseCore (~> 11.11.0) + - Firebase/Installations (11.11.0): - Firebase/CoreOnly - - FirebaseInstallations (~> 11.10.0) - - Firebase/Messaging (11.10.0): + - FirebaseInstallations (~> 11.11.0) + - Firebase/Messaging (11.11.0): - Firebase/CoreOnly - - FirebaseMessaging (~> 11.10.0) - - FirebaseCore (11.10.0): - - FirebaseCoreInternal (~> 11.10.0) + - FirebaseMessaging (~> 11.11.0) + - FirebaseCore (11.11.0): + - FirebaseCoreInternal (~> 11.11.0) - GoogleUtilities/Environment (~> 8.0) - GoogleUtilities/Logger (~> 8.0) - - FirebaseCoreExtension (11.10.0): - - FirebaseCore (~> 11.10.0) - - FirebaseCoreInternal (11.10.0): + - FirebaseCoreExtension (11.11.0): + - FirebaseCore (~> 11.11.0) + - FirebaseCoreInternal (11.11.0): - "GoogleUtilities/NSData+zlib (~> 8.0)" - - FirebaseInstallations (11.10.0): - - FirebaseCore (~> 11.10.0) + - FirebaseInstallations (11.11.0): + - FirebaseCore (~> 11.11.0) - GoogleUtilities/Environment (~> 8.0) - GoogleUtilities/UserDefaults (~> 8.0) - PromisesObjC (~> 2.4) - - FirebaseMessaging (11.10.0): - - FirebaseCore (~> 11.10.0) + - FirebaseMessaging (11.11.0): + - FirebaseCore (~> 11.11.0) - FirebaseInstallations (~> 11.0) - GoogleDataTransport (~> 10.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.0) @@ -86,9 +88,35 @@ PODS: - GoogleUtilities/UserDefaults (8.1.0): - GoogleUtilities/Logger - GoogleUtilities/Privacy - - hermes-engine (0.79.2): - - hermes-engine/Pre-built (= 0.79.2) - - hermes-engine/Pre-built (0.79.2) + - hermes-engine (0.79.7): + - hermes-engine/Pre-built (= 0.79.7) + - hermes-engine/Pre-built (0.79.7) + - lottie-ios (4.6.0) + - lottie-react-native (7.3.6): + - DoubleConversion + - glog + - hermes-engine + - lottie-ios (= 4.6.0) + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - nanopb (3.30910.0): - nanopb/decode (= 3.30910.0) - nanopb/encode (= 3.30910.0) @@ -114,32 +142,32 @@ PODS: - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - - RCTDeprecation (0.79.2) - - RCTRequired (0.79.2) - - RCTTypeSafety (0.79.2): - - FBLazyVector (= 0.79.2) - - RCTRequired (= 0.79.2) - - React-Core (= 0.79.2) - - React (0.79.2): - - React-Core (= 0.79.2) - - React-Core/DevSupport (= 0.79.2) - - React-Core/RCTWebSocket (= 0.79.2) - - React-RCTActionSheet (= 0.79.2) - - React-RCTAnimation (= 0.79.2) - - React-RCTBlob (= 0.79.2) - - React-RCTImage (= 0.79.2) - - React-RCTLinking (= 0.79.2) - - React-RCTNetwork (= 0.79.2) - - React-RCTSettings (= 0.79.2) - - React-RCTText (= 0.79.2) - - React-RCTVibration (= 0.79.2) - - React-callinvoker (0.79.2) - - React-Core (0.79.2): + - RCTDeprecation (0.79.7) + - RCTRequired (0.79.7) + - RCTTypeSafety (0.79.7): + - FBLazyVector (= 0.79.7) + - RCTRequired (= 0.79.7) + - React-Core (= 0.79.7) + - React (0.79.7): + - React-Core (= 0.79.7) + - React-Core/DevSupport (= 0.79.7) + - React-Core/RCTWebSocket (= 0.79.7) + - React-RCTActionSheet (= 0.79.7) + - React-RCTAnimation (= 0.79.7) + - React-RCTBlob (= 0.79.7) + - React-RCTImage (= 0.79.7) + - React-RCTLinking (= 0.79.7) + - React-RCTNetwork (= 0.79.7) + - React-RCTSettings (= 0.79.7) + - React-RCTText (= 0.79.7) + - React-RCTVibration (= 0.79.7) + - React-callinvoker (0.79.7) + - React-Core (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 0.79.2) + - React-Core/Default (= 0.79.7) - React-cxxreact - React-featureflags - React-hermes @@ -152,7 +180,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/CoreModulesHeaders (0.79.2): + - React-Core/CoreModulesHeaders (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -170,7 +198,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/Default (0.79.2): + - React-Core/Default (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -187,13 +215,13 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/DevSupport (0.79.2): + - React-Core/DevSupport (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 0.79.2) - - React-Core/RCTWebSocket (= 0.79.2) + - React-Core/Default (= 0.79.7) + - React-Core/RCTWebSocket (= 0.79.7) - React-cxxreact - React-featureflags - React-hermes @@ -206,7 +234,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.79.2): + - React-Core/RCTActionSheetHeaders (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -224,7 +252,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTAnimationHeaders (0.79.2): + - React-Core/RCTAnimationHeaders (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -242,7 +270,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTBlobHeaders (0.79.2): + - React-Core/RCTBlobHeaders (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -260,7 +288,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTImageHeaders (0.79.2): + - React-Core/RCTImageHeaders (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -278,7 +306,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTLinkingHeaders (0.79.2): + - React-Core/RCTLinkingHeaders (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -296,7 +324,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTNetworkHeaders (0.79.2): + - React-Core/RCTNetworkHeaders (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -314,7 +342,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTSettingsHeaders (0.79.2): + - React-Core/RCTSettingsHeaders (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -332,7 +360,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTTextHeaders (0.79.2): + - React-Core/RCTTextHeaders (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -350,7 +378,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTVibrationHeaders (0.79.2): + - React-Core/RCTVibrationHeaders (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -368,12 +396,12 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTWebSocket (0.79.2): + - React-Core/RCTWebSocket (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 0.79.2) + - React-Core/Default (= 0.79.7) - React-cxxreact - React-featureflags - React-hermes @@ -386,23 +414,23 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-CoreModules (0.79.2): + - React-CoreModules (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - RCT-Folly (= 2024.11.18.00) - - RCTTypeSafety (= 0.79.2) - - React-Core/CoreModulesHeaders (= 0.79.2) - - React-jsi (= 0.79.2) + - RCTTypeSafety (= 0.79.7) + - React-Core/CoreModulesHeaders (= 0.79.7) + - React-jsi (= 0.79.7) - React-jsinspector - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.79.2) + - React-RCTImage (= 0.79.7) - ReactCommon - SocketRocket (= 0.7.1) - - React-cxxreact (0.79.2): + - React-cxxreact (0.79.7): - boost - DoubleConversion - fast_float (= 6.1.4) @@ -410,17 +438,17 @@ PODS: - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-callinvoker (= 0.79.2) - - React-debug (= 0.79.2) - - React-jsi (= 0.79.2) + - React-callinvoker (= 0.79.7) + - React-debug (= 0.79.7) + - React-jsi (= 0.79.7) - React-jsinspector - React-jsinspectortracing - - React-logger (= 0.79.2) - - React-perflogger (= 0.79.2) - - React-runtimeexecutor (= 0.79.2) - - React-timing (= 0.79.2) - - React-debug (0.79.2) - - React-defaultsnativemodule (0.79.2): + - React-logger (= 0.79.7) + - React-perflogger (= 0.79.7) + - React-runtimeexecutor (= 0.79.7) + - React-timing (= 0.79.7) + - React-debug (0.79.7) + - React-defaultsnativemodule (0.79.7): - hermes-engine - RCT-Folly - React-domnativemodule @@ -431,7 +459,7 @@ PODS: - React-jsiexecutor - React-microtasksnativemodule - React-RCTFBReactNativeSpec - - React-domnativemodule (0.79.2): + - React-domnativemodule (0.79.7): - hermes-engine - RCT-Folly - React-Fabric @@ -443,7 +471,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - Yoga - - React-Fabric (0.79.2): + - React-Fabric (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -455,22 +483,22 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.79.2) - - React-Fabric/attributedstring (= 0.79.2) - - React-Fabric/componentregistry (= 0.79.2) - - React-Fabric/componentregistrynative (= 0.79.2) - - React-Fabric/components (= 0.79.2) - - React-Fabric/consistency (= 0.79.2) - - React-Fabric/core (= 0.79.2) - - React-Fabric/dom (= 0.79.2) - - React-Fabric/imagemanager (= 0.79.2) - - React-Fabric/leakchecker (= 0.79.2) - - React-Fabric/mounting (= 0.79.2) - - React-Fabric/observers (= 0.79.2) - - React-Fabric/scheduler (= 0.79.2) - - React-Fabric/telemetry (= 0.79.2) - - React-Fabric/templateprocessor (= 0.79.2) - - React-Fabric/uimanager (= 0.79.2) + - React-Fabric/animations (= 0.79.7) + - React-Fabric/attributedstring (= 0.79.7) + - React-Fabric/componentregistry (= 0.79.7) + - React-Fabric/componentregistrynative (= 0.79.7) + - React-Fabric/components (= 0.79.7) + - React-Fabric/consistency (= 0.79.7) + - React-Fabric/core (= 0.79.7) + - React-Fabric/dom (= 0.79.7) + - React-Fabric/imagemanager (= 0.79.7) + - React-Fabric/leakchecker (= 0.79.7) + - React-Fabric/mounting (= 0.79.7) + - React-Fabric/observers (= 0.79.7) + - React-Fabric/scheduler (= 0.79.7) + - React-Fabric/telemetry (= 0.79.7) + - React-Fabric/templateprocessor (= 0.79.7) + - React-Fabric/uimanager (= 0.79.7) - React-featureflags - React-graphics - React-hermes @@ -481,7 +509,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.79.2): + - React-Fabric/animations (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -503,7 +531,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.79.2): + - React-Fabric/attributedstring (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -525,7 +553,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.79.2): + - React-Fabric/componentregistry (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -547,7 +575,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.79.2): + - React-Fabric/componentregistrynative (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -569,7 +597,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.79.2): + - React-Fabric/components (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -581,10 +609,10 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.79.2) - - React-Fabric/components/root (= 0.79.2) - - React-Fabric/components/scrollview (= 0.79.2) - - React-Fabric/components/view (= 0.79.2) + - React-Fabric/components/legacyviewmanagerinterop (= 0.79.7) + - React-Fabric/components/root (= 0.79.7) + - React-Fabric/components/scrollview (= 0.79.7) + - React-Fabric/components/view (= 0.79.7) - React-featureflags - React-graphics - React-hermes @@ -595,7 +623,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.79.2): + - React-Fabric/components/legacyviewmanagerinterop (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -617,7 +645,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.79.2): + - React-Fabric/components/root (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -639,7 +667,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/scrollview (0.79.2): + - React-Fabric/components/scrollview (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -661,7 +689,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.79.2): + - React-Fabric/components/view (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -685,7 +713,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/consistency (0.79.2): + - React-Fabric/consistency (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -707,7 +735,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/core (0.79.2): + - React-Fabric/core (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -729,7 +757,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/dom (0.79.2): + - React-Fabric/dom (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -751,7 +779,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.79.2): + - React-Fabric/imagemanager (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -773,7 +801,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.79.2): + - React-Fabric/leakchecker (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -795,7 +823,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.79.2): + - React-Fabric/mounting (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -817,7 +845,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers (0.79.2): + - React-Fabric/observers (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -829,7 +857,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.79.2) + - React-Fabric/observers/events (= 0.79.7) - React-featureflags - React-graphics - React-hermes @@ -840,7 +868,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers/events (0.79.2): + - React-Fabric/observers/events (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -862,7 +890,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.79.2): + - React-Fabric/scheduler (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -886,7 +914,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.79.2): + - React-Fabric/telemetry (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -908,7 +936,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.79.2): + - React-Fabric/templateprocessor (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -930,7 +958,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.79.2): + - React-Fabric/uimanager (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -942,7 +970,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.79.2) + - React-Fabric/uimanager/consistency (= 0.79.7) - React-featureflags - React-graphics - React-hermes @@ -954,7 +982,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager/consistency (0.79.2): + - React-Fabric/uimanager/consistency (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -977,7 +1005,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricComponents (0.79.2): + - React-FabricComponents (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -990,8 +1018,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.79.2) - - React-FabricComponents/textlayoutmanager (= 0.79.2) + - React-FabricComponents/components (= 0.79.7) + - React-FabricComponents/textlayoutmanager (= 0.79.7) - React-featureflags - React-graphics - React-hermes @@ -1003,7 +1031,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components (0.79.2): + - React-FabricComponents/components (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1016,15 +1044,15 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.79.2) - - React-FabricComponents/components/iostextinput (= 0.79.2) - - React-FabricComponents/components/modal (= 0.79.2) - - React-FabricComponents/components/rncore (= 0.79.2) - - React-FabricComponents/components/safeareaview (= 0.79.2) - - React-FabricComponents/components/scrollview (= 0.79.2) - - React-FabricComponents/components/text (= 0.79.2) - - React-FabricComponents/components/textinput (= 0.79.2) - - React-FabricComponents/components/unimplementedview (= 0.79.2) + - React-FabricComponents/components/inputaccessory (= 0.79.7) + - React-FabricComponents/components/iostextinput (= 0.79.7) + - React-FabricComponents/components/modal (= 0.79.7) + - React-FabricComponents/components/rncore (= 0.79.7) + - React-FabricComponents/components/safeareaview (= 0.79.7) + - React-FabricComponents/components/scrollview (= 0.79.7) + - React-FabricComponents/components/text (= 0.79.7) + - React-FabricComponents/components/textinput (= 0.79.7) + - React-FabricComponents/components/unimplementedview (= 0.79.7) - React-featureflags - React-graphics - React-hermes @@ -1036,7 +1064,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/inputaccessory (0.79.2): + - React-FabricComponents/components/inputaccessory (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1060,7 +1088,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/iostextinput (0.79.2): + - React-FabricComponents/components/iostextinput (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1084,7 +1112,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/modal (0.79.2): + - React-FabricComponents/components/modal (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1108,7 +1136,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/rncore (0.79.2): + - React-FabricComponents/components/rncore (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1132,7 +1160,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/safeareaview (0.79.2): + - React-FabricComponents/components/safeareaview (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1156,7 +1184,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/scrollview (0.79.2): + - React-FabricComponents/components/scrollview (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1180,7 +1208,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/text (0.79.2): + - React-FabricComponents/components/text (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1204,7 +1232,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/textinput (0.79.2): + - React-FabricComponents/components/textinput (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1228,7 +1256,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/unimplementedview (0.79.2): + - React-FabricComponents/components/unimplementedview (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1252,7 +1280,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/textlayoutmanager (0.79.2): + - React-FabricComponents/textlayoutmanager (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1276,30 +1304,30 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricImage (0.79.2): + - React-FabricImage (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) - - RCTRequired (= 0.79.2) - - RCTTypeSafety (= 0.79.2) + - RCTRequired (= 0.79.7) + - RCTTypeSafety (= 0.79.7) - React-Fabric - React-featureflags - React-graphics - React-hermes - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.79.2) + - React-jsiexecutor (= 0.79.7) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.79.2): + - React-featureflags (0.79.7): - RCT-Folly (= 2024.11.18.00) - - React-featureflagsnativemodule (0.79.2): + - React-featureflagsnativemodule (0.79.7): - hermes-engine - RCT-Folly - React-featureflags @@ -1308,7 +1336,7 @@ PODS: - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - React-graphics (0.79.2): + - React-graphics (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1319,21 +1347,21 @@ PODS: - React-jsi - React-jsiexecutor - React-utils - - React-hermes (0.79.2): + - React-hermes (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-cxxreact (= 0.79.2) + - React-cxxreact (= 0.79.7) - React-jsi - - React-jsiexecutor (= 0.79.2) + - React-jsiexecutor (= 0.79.7) - React-jsinspector - React-jsinspectortracing - - React-perflogger (= 0.79.2) + - React-perflogger (= 0.79.7) - React-runtimeexecutor - - React-idlecallbacksnativemodule (0.79.2): + - React-idlecallbacksnativemodule (0.79.7): - glog - hermes-engine - RCT-Folly @@ -1343,7 +1371,7 @@ PODS: - React-RCTFBReactNativeSpec - React-runtimescheduler - ReactCommon/turbomodule/core - - React-ImageManager (0.79.2): + - React-ImageManager (0.79.7): - glog - RCT-Folly/Fabric - React-Core/Default @@ -1352,7 +1380,7 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (0.79.2): + - React-jserrorhandler (0.79.7): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) @@ -1361,7 +1389,7 @@ PODS: - React-featureflags - React-jsi - ReactCommon/turbomodule/bridging - - React-jsi (0.79.2): + - React-jsi (0.79.7): - boost - DoubleConversion - fast_float (= 6.1.4) @@ -1369,19 +1397,19 @@ PODS: - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-jsiexecutor (0.79.2): + - React-jsiexecutor (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-cxxreact (= 0.79.2) - - React-jsi (= 0.79.2) + - React-cxxreact (= 0.79.7) + - React-jsi (= 0.79.7) - React-jsinspector - React-jsinspectortracing - - React-perflogger (= 0.79.2) - - React-jsinspector (0.79.2): + - React-perflogger (= 0.79.7) + - React-jsinspector (0.79.7): - DoubleConversion - glog - hermes-engine @@ -1389,29 +1417,29 @@ PODS: - React-featureflags - React-jsi - React-jsinspectortracing - - React-perflogger (= 0.79.2) - - React-runtimeexecutor (= 0.79.2) - - React-jsinspectortracing (0.79.2): + - React-perflogger (= 0.79.7) + - React-runtimeexecutor (= 0.79.7) + - React-jsinspectortracing (0.79.7): - RCT-Folly - React-oscompat - - React-jsitooling (0.79.2): + - React-jsitooling (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - RCT-Folly (= 2024.11.18.00) - - React-cxxreact (= 0.79.2) - - React-jsi (= 0.79.2) + - React-cxxreact (= 0.79.7) + - React-jsi (= 0.79.7) - React-jsinspector - React-jsinspectortracing - - React-jsitracing (0.79.2): + - React-jsitracing (0.79.7): - React-jsi - - React-logger (0.79.2): + - React-logger (0.79.7): - glog - - React-Mapbuffer (0.79.2): + - React-Mapbuffer (0.79.7): - glog - React-debug - - React-microtasksnativemodule (0.79.2): + - React-microtasksnativemodule (0.79.7): - hermes-engine - RCT-Folly - React-hermes @@ -1443,9 +1471,9 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-notifications (5.1.0): + - react-native-notifications (5.2.2): - React-Core - - react-native-safe-area-context (5.4.0): + - react-native-safe-area-context (5.7.0): - DoubleConversion - glog - hermes-engine @@ -1460,8 +1488,8 @@ PODS: - React-hermes - React-ImageManager - React-jsi - - react-native-safe-area-context/common (= 5.4.0) - - react-native-safe-area-context/fabric (= 5.4.0) + - react-native-safe-area-context/common (= 5.7.0) + - react-native-safe-area-context/fabric (= 5.7.0) - React-NativeModulesApple - React-RCTFabric - React-renderercss @@ -1471,7 +1499,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-safe-area-context/common (5.4.0): + - react-native-safe-area-context/common (5.7.0): - DoubleConversion - glog - hermes-engine @@ -1495,7 +1523,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-safe-area-context/fabric (5.4.0): + - react-native-safe-area-context/fabric (5.7.0): - DoubleConversion - glog - hermes-engine @@ -1520,7 +1548,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-webview (13.16.0): + - react-native-webview (13.16.1): - DoubleConversion - glog - hermes-engine @@ -1544,7 +1572,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-NativeModulesApple (0.79.2): + - React-NativeModulesApple (0.79.7): - glog - hermes-engine - React-callinvoker @@ -1557,20 +1585,20 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-oscompat (0.79.2) - - React-perflogger (0.79.2): + - React-oscompat (0.79.7) + - React-perflogger (0.79.7): - DoubleConversion - RCT-Folly (= 2024.11.18.00) - - React-performancetimeline (0.79.2): + - React-performancetimeline (0.79.7): - RCT-Folly (= 2024.11.18.00) - React-cxxreact - React-featureflags - React-jsinspectortracing - React-perflogger - React-timing - - React-RCTActionSheet (0.79.2): - - React-Core/RCTActionSheetHeaders (= 0.79.2) - - React-RCTAnimation (0.79.2): + - React-RCTActionSheet (0.79.7): + - React-Core/RCTActionSheetHeaders (= 0.79.7) + - React-RCTAnimation (0.79.7): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTAnimationHeaders @@ -1578,7 +1606,7 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTAppDelegate (0.79.2): + - React-RCTAppDelegate (0.79.7): - hermes-engine - RCT-Folly (= 2024.11.18.00) - RCTRequired @@ -1604,7 +1632,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon - - React-RCTBlob (0.79.2): + - React-RCTBlob (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1618,7 +1646,7 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - React-RCTFabric (0.79.2): + - React-RCTFabric (0.79.7): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) @@ -1644,7 +1672,7 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTFBReactNativeSpec (0.79.2): + - React-RCTFBReactNativeSpec (0.79.7): - hermes-engine - RCT-Folly - RCTRequired @@ -1655,7 +1683,7 @@ PODS: - React-jsiexecutor - React-NativeModulesApple - ReactCommon - - React-RCTImage (0.79.2): + - React-RCTImage (0.79.7): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTImageHeaders @@ -1664,14 +1692,14 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - React-RCTLinking (0.79.2): - - React-Core/RCTLinkingHeaders (= 0.79.2) - - React-jsi (= 0.79.2) + - React-RCTLinking (0.79.7): + - React-Core/RCTLinkingHeaders (= 0.79.7) + - React-jsi (= 0.79.7) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.79.2) - - React-RCTNetwork (0.79.2): + - ReactCommon/turbomodule/core (= 0.79.7) + - React-RCTNetwork (0.79.7): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTNetworkHeaders @@ -1679,7 +1707,7 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTRuntime (0.79.2): + - React-RCTRuntime (0.79.7): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) @@ -1692,7 +1720,7 @@ PODS: - React-RuntimeApple - React-RuntimeCore - React-RuntimeHermes - - React-RCTSettings (0.79.2): + - React-RCTSettings (0.79.7): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTSettingsHeaders @@ -1700,28 +1728,28 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTText (0.79.2): - - React-Core/RCTTextHeaders (= 0.79.2) + - React-RCTText (0.79.7): + - React-Core/RCTTextHeaders (= 0.79.7) - Yoga - - React-RCTVibration (0.79.2): + - React-RCTVibration (0.79.7): - RCT-Folly (= 2024.11.18.00) - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-rendererconsistency (0.79.2) - - React-renderercss (0.79.2): + - React-rendererconsistency (0.79.7) + - React-renderercss (0.79.7): - React-debug - React-utils - - React-rendererdebug (0.79.2): + - React-rendererdebug (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - RCT-Folly (= 2024.11.18.00) - React-debug - - React-rncore (0.79.2) - - React-RuntimeApple (0.79.2): + - React-rncore (0.79.7) + - React-RuntimeApple (0.79.7): - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) - React-callinvoker @@ -1743,7 +1771,7 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - React-RuntimeCore (0.79.2): + - React-RuntimeCore (0.79.7): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) @@ -1760,9 +1788,9 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.79.2): - - React-jsi (= 0.79.2) - - React-RuntimeHermes (0.79.2): + - React-runtimeexecutor (0.79.7): + - React-jsi (= 0.79.7) + - React-RuntimeHermes (0.79.7): - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) - React-featureflags @@ -1774,7 +1802,7 @@ PODS: - React-jsitracing - React-RuntimeCore - React-utils - - React-runtimescheduler (0.79.2): + - React-runtimescheduler (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -1791,17 +1819,17 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - React-timing (0.79.2) - - React-utils (0.79.2): + - React-timing (0.79.7) + - React-utils (0.79.7): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - React-debug - React-hermes - - React-jsi (= 0.79.2) - - ReactAppDependencyProvider (0.79.2): + - React-jsi (= 0.79.7) + - ReactAppDependencyProvider (0.79.7): - ReactCodegen - - ReactCodegen (0.79.2): + - ReactCodegen (0.79.7): - DoubleConversion - glog - hermes-engine @@ -1823,64 +1851,64 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactCommon (0.79.2): - - ReactCommon/turbomodule (= 0.79.2) - - ReactCommon/turbomodule (0.79.2): + - ReactCommon (0.79.7): + - ReactCommon/turbomodule (= 0.79.7) + - ReactCommon/turbomodule (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-callinvoker (= 0.79.2) - - React-cxxreact (= 0.79.2) - - React-jsi (= 0.79.2) - - React-logger (= 0.79.2) - - React-perflogger (= 0.79.2) - - ReactCommon/turbomodule/bridging (= 0.79.2) - - ReactCommon/turbomodule/core (= 0.79.2) - - ReactCommon/turbomodule/bridging (0.79.2): + - React-callinvoker (= 0.79.7) + - React-cxxreact (= 0.79.7) + - React-jsi (= 0.79.7) + - React-logger (= 0.79.7) + - React-perflogger (= 0.79.7) + - ReactCommon/turbomodule/bridging (= 0.79.7) + - ReactCommon/turbomodule/core (= 0.79.7) + - ReactCommon/turbomodule/bridging (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-callinvoker (= 0.79.2) - - React-cxxreact (= 0.79.2) - - React-jsi (= 0.79.2) - - React-logger (= 0.79.2) - - React-perflogger (= 0.79.2) - - ReactCommon/turbomodule/core (0.79.2): + - React-callinvoker (= 0.79.7) + - React-cxxreact (= 0.79.7) + - React-jsi (= 0.79.7) + - React-logger (= 0.79.7) + - React-perflogger (= 0.79.7) + - ReactCommon/turbomodule/core (0.79.7): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-callinvoker (= 0.79.2) - - React-cxxreact (= 0.79.2) - - React-debug (= 0.79.2) - - React-featureflags (= 0.79.2) - - React-jsi (= 0.79.2) - - React-logger (= 0.79.2) - - React-perflogger (= 0.79.2) - - React-utils (= 0.79.2) - - RNDeviceInfo (14.0.4): + - React-callinvoker (= 0.79.7) + - React-cxxreact (= 0.79.7) + - React-debug (= 0.79.7) + - React-featureflags (= 0.79.7) + - React-jsi (= 0.79.7) + - React-logger (= 0.79.7) + - React-perflogger (= 0.79.7) + - React-utils (= 0.79.7) + - RNDeviceInfo (14.1.1): - React-Core - - RNFBApp (21.13.0): - - Firebase/CoreOnly (= 11.10.0) + - RNFBApp (21.14.0): + - Firebase/CoreOnly (= 11.11.0) - React-Core - - RNFBInstallations (21.13.0): - - Firebase/Installations (= 11.10.0) + - RNFBInstallations (21.14.0): + - Firebase/Installations (= 11.11.0) - React-Core - RNFBApp - - RNFBMessaging (21.13.0): - - Firebase/Messaging (= 11.10.0) + - RNFBMessaging (21.14.0): + - Firebase/Messaging (= 11.11.0) - FirebaseCoreExtension - React-Core - RNFBApp - - RNGestureHandler (2.25.0): + - RNGestureHandler (2.31.2): - DoubleConversion - glog - hermes-engine @@ -1905,7 +1933,56 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNPermissions (5.4.4): + - RNPermissions (5.5.1): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNSVG (15.15.5): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNSVG/common (= 15.15.5) + - Yoga + - RNSVG/common (15.15.5): - DoubleConversion - glog - hermes-engine @@ -1930,10 +2007,17 @@ PODS: - ReactCommon/turbomodule/core - Yoga - SocketRocket (0.7.1) + - VisionCamera (4.7.3): + - VisionCamera/Core (= 4.7.3) + - VisionCamera/React (= 4.7.3) + - VisionCamera/Core (4.7.3) + - VisionCamera/React (4.7.3): + - React-Core - Yoga (0.0.0) DEPENDENCIES: - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - BVLinearGradient (from `../node_modules/react-native-linear-gradient`) - devrev-sdk-react-native (from `../../..`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) @@ -1941,6 +2025,7 @@ DEPENDENCIES: - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) + - lottie-react-native (from `../node_modules/lottie-react-native`) - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) @@ -2015,6 +2100,8 @@ DEPENDENCIES: - "RNFBMessaging (from `../node_modules/@react-native-firebase/messaging`)" - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - RNPermissions (from `../node_modules/react-native-permissions`) + - RNSVG (from `../node_modules/react-native-svg`) + - VisionCamera (from `../node_modules/react-native-vision-camera`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: @@ -2027,6 +2114,7 @@ SPEC REPOS: - FirebaseMessaging - GoogleDataTransport - GoogleUtilities + - lottie-ios - nanopb - PromisesObjC - SocketRocket @@ -2034,6 +2122,8 @@ SPEC REPOS: EXTERNAL SOURCES: boost: :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + BVLinearGradient: + :path: "../node_modules/react-native-linear-gradient" devrev-sdk-react-native: :path: "../../.." DoubleConversion: @@ -2048,7 +2138,9 @@ EXTERNAL SOURCES: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-2025-03-03-RNv0.79.0-bc17d964d03743424823d7dd1a9f37633459c5c5 + :tag: hermes-2025-06-04-RNv0.79.3-7f9a871eefeb2c3852365ee80f0b6733ec12ac3b + lottie-react-native: + :path: "../node_modules/lottie-react-native" RCT-Folly: :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTDeprecation: @@ -2193,103 +2285,112 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-gesture-handler" RNPermissions: :path: "../node_modules/react-native-permissions" + RNSVG: + :path: "../node_modules/react-native-svg" + VisionCamera: + :path: "../node_modules/react-native-vision-camera" Yoga: :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 - devrev-sdk-react-native: 4a55bcbfa1e43f3a9d0f9ab4462e79816e2fd729 + BVLinearGradient: cb006ba232a1f3e4f341bb62c42d1098c284da70 + devrev-sdk-react-native: 146e6600a96c7bdb545e45c8d9af0aadd5fdf0f2 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 - FBLazyVector: 84b955f7b4da8b895faf5946f73748267347c975 - Firebase: 1fe1c0a7d9aaea32efe01fbea5f0ebd8d70e53a2 - FirebaseCore: 8344daef5e2661eb004b177488d6f9f0f24251b7 - FirebaseCoreExtension: 6f357679327f3614e995dc7cf3f2d600bdc774ac - FirebaseCoreInternal: ef4505d2afb1d0ebbc33162cb3795382904b5679 - FirebaseInstallations: 9980995bdd06ec8081dfb6ab364162bdd64245c3 - FirebaseMessaging: 2b9f56aa4ed286e1f0ce2ee1d413aabb8f9f5cb9 + FBLazyVector: b60fe06f0f15b7d7408f169442176e69e8eeacde + Firebase: 6a8f201c61eda24e98f1ce2b44b1b9c2caf525cc + FirebaseCore: 2321536f9c423b1f857e047a82b8a42abc6d9e2c + FirebaseCoreExtension: 3a64994969dd05f4bcb7e6896c654eded238e75b + FirebaseCoreInternal: 31ee350d87b30a9349e907f84bf49ef8e6791e5a + FirebaseInstallations: 781e0e37aa0e1c92b44d00e739aba79ad31b2dba + FirebaseMessaging: c7be9357fd8ba33bc45b9a6c3cdff0b466e1e2a4 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - hermes-engine: 314be5250afa5692b57b4dd1705959e1973a8ebe + hermes-engine: 13c84524b3b6e884b2cf3b3b1e002ffd147d88a3 + lottie-ios: 8f959969761e9c45d70353667d00af0e5b9cadb3 + lottie-react-native: 2227e3334f2c60685bb95c4cad691053e71c427e nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82 - RCTDeprecation: 83ffb90c23ee5cea353bd32008a7bca100908f8c - RCTRequired: eb7c0aba998009f47a540bec9e9d69a54f68136e - RCTTypeSafety: 659ae318c09de0477fd27bbc9e140071c7ea5c93 - React: c2d3aa44c49bb34e4dfd49d3ee92da5ebacc1c1c - React-callinvoker: 1bdfb7549b5af266d85757193b5069f60659ef9d - React-Core: 10597593fdbae06f0089881e025a172e51d4a769 - React-CoreModules: 6907b255529dd46895cf687daa67b24484a612c2 - React-cxxreact: a9f5b8180d6955bc3f6a3fcd657c4d9b4d95c1f6 - React-debug: a9861ea2196e886642887e29fd1d86c6eee93454 - React-defaultsnativemodule: 48bed05d5e7a6b90c63775bc042acba50f1ac46c - React-domnativemodule: 4603dc552b8f2b75cfd708b6175f0f3ab005d661 - React-Fabric: c48e870a557e39fc38c49bf2f43a62f837876318 - React-FabricComponents: d0c0029b9066819e736ee70ce8481fe52632ccad - React-FabricImage: a843d50c9d21f4a6255c3cd1654cdf16209ac76d - React-featureflags: 4ef61c283dfae8f327dbae70f41bb0399bd9e0fc - React-featureflagsnativemodule: 879cdf94179dc7395f28b9bf0fd340fd45c05ab7 - React-graphics: 4e247c50991de6e2c0abd25f8367cfa3113198c0 - React-hermes: 9116d4e6d07abeb519a2852672de087f44da8f12 - React-idlecallbacksnativemodule: 5fd6d838b045d3f5b630a6a0714635bc9c882fdc - React-ImageManager: ad3f561d76883d6f7f1cf3a97e823fa39ca1b132 - React-jserrorhandler: 35d127a39a5bc16d9ae97edce7ab4c06dc77e3a2 - React-jsi: 753ba30c902f3a41fa7f956aca8eea3317a44ee6 - React-jsiexecutor: 47520714aa7d9589c51c0f3713dfbfca4895d4f9 - React-jsinspector: ec984e95482ee98692ec74f78771447599ed9781 - React-jsinspectortracing: 7bd661f34f08b320bb797dc464d6002116fca145 - React-jsitooling: 90d7ecbb60f70d12f60a4964dfcad0e38d9d970d - React-jsitracing: a9de0d25bf430574dc01f1fe67f06fd50e8a578c - React-logger: 8edfcedc100544791cd82692ca5a574240a16219 - React-Mapbuffer: da73f30b000114058d6bc41490dcce204a8ede32 - React-microtasksnativemodule: 444c5701aece79629bb73bd9e7ad8937ae65238c + RCTDeprecation: b9b1716eec53aaeaa859aa45e27de7b615cff732 + RCTRequired: 862acb469086f601f81aab298e00c2a13d572099 + RCTTypeSafety: 45120b9028ec6819266f3ef7a6b8e8a9f0a083d4 + React: 49e89943d7b1bc95c5895a05c6cf106ba112d037 + React-callinvoker: 9baafac613e363728c47ceaf65b9597bd1b96df0 + React-Core: 2f642fff28911adf30dd5169a7d9d2b95dc59bc9 + React-CoreModules: a499af0e4a8dfa78cbc04c131b59fa3286210148 + React-cxxreact: 1a485bb66f4bdde62f89eb0e5db1262182fc40e0 + React-debug: 090e5ae472d1be3c545bf67dd6bccefb80e25526 + React-defaultsnativemodule: e157a231e823ba0b80313b2b105104390dfaf995 + React-domnativemodule: a34a26932c50ff1b8e9a3d93c64f2b65c5ae9afd + React-Fabric: e3864d63b0255af9484de6e3fb9f0bf9225804c2 + React-FabricComponents: c08e6053808f2d6421ec8564f0c852befab42a28 + React-FabricImage: 17c6192f586e2e71e6227a4bb7cdb69a4d9518b8 + React-featureflags: 4d2bcee572ceaacd0efe58316e31e28a31f0ab3d + React-featureflagsnativemodule: 6579b85402e8cabd09fb33db7040159a49927c6e + React-graphics: 95a117913e8fa70d6a1c889ae6dff682b21946c6 + React-hermes: 59edcac48ec38831b40cf28ed34b6d4d735cbdd3 + React-idlecallbacksnativemodule: f434df42af541bd497250827d171f15074a13878 + React-ImageManager: 1ed752b7276b18806ac782d2abf7f5034cb25803 + React-jserrorhandler: 68eb80a2756baca4eb1c96ca6cdb694feade05ac + React-jsi: f6fee849355b8819936b02d5c5b23a55a3d69540 + React-jsiexecutor: cd6fd873482d7183206eb612ce362d02c6fb8556 + React-jsinspector: f4692ae6cc5d8aa1e282806c4d46aefaf1046a07 + React-jsinspectortracing: 9b0c94891ff81cfb242824489b4874149250f61d + React-jsitooling: 9cb6fdbaf3eb9a7585ef61a77b1f9e66731b3f3f + React-jsitracing: 0d15ad2b0b20bb7500eefe81e86c31065e636bde + React-logger: fbdc0814b62fefa412a90af7cacc666387f1bc9a + React-Mapbuffer: c7fdcd8e297435045947a4e6c0824fcb831fb5c7 + React-microtasksnativemodule: aa6b872c40429aa7b4bce78ec34fe8e89c45481a react-native-image-picker: f6ece66f251f4a17aab08f5add7be6eb9e7f5356 - react-native-notifications: 3bafa1237ae8a47569a84801f17d80242fe9f6a5 - react-native-safe-area-context: 5928d84c879db2f9eb6969ca70e68f58623dbf25 - react-native-webview: f0d598682cbc88a97d66da4121873d3467f76635 - React-NativeModulesApple: df8e5bc59e78ca3040ffbf41336889f3bd0fad68 - React-oscompat: ef5df1c734f19b8003e149317d041b8ce1f7d29c - React-perflogger: 9a151e0b4c933c9205fd648c246506a83f31395d - React-performancetimeline: d6a5fd3640c873875badb33020ebe5af46ef2a12 - React-RCTActionSheet: a499b0d6d9793886b67ba3e16046a3fef2cdbbc3 - React-RCTAnimation: cc64adc259aabc3354b73065e2231d796dfce576 - React-RCTAppDelegate: 9d523da768f1c9e84c5f3b7e3624d097dfb0e16b - React-RCTBlob: e727f53eeefded7e6432eb76bd22b57bc880e5d1 - React-RCTFabric: a704a0eea3a9a32621ccc79261fe5b010bfcaccb - React-RCTFBReactNativeSpec: 9064c63d99e467a3893e328ba3612745c3c3a338 - React-RCTImage: 7159cbdbb18a09d97ba1a611416eced75b3ccb29 - React-RCTLinking: 46293afdb859bccc63e1d3dedc6901a3c04ef360 - React-RCTNetwork: 4a6cd18f5bcd0363657789c64043123a896b1170 - React-RCTRuntime: 4b47b6380420e9fbfb4bd3cc16d6ea988640ddc1 - React-RCTSettings: 61e361dc85136d1cb0e148b7541993d2ee950ea7 - React-RCTText: abd1e196c3167175e6baef18199c6d9d8ac54b4e - React-RCTVibration: 490e0dcb01a3fe4a0dfb7bc51ad5856d8b84f343 - React-rendererconsistency: 68db5a64f0c42b0337e25ba7b0e9513caae1389d - React-renderercss: 59c892b54a92f2f62b98c2700f5ff7592f0629cb - React-rendererdebug: f9dfe8ef736c98268f87114d05f49615f7f9af46 - React-rncore: 0f64cacb1becc6f89c99018ca920d012f9044ebd - React-RuntimeApple: f2bc2dc51b9b3c194c0eec4351ae99d033485792 - React-RuntimeCore: 4e5475d506e7f9c4b3f3c6e6a654b83cba7f1a42 - React-runtimeexecutor: d60846710facedd1edb70c08b738119b3ee2c6c2 - React-RuntimeHermes: 2b238368a56fc50e9372afde7a3f2eeb0cdc63a7 - React-runtimescheduler: c65050ab5c3911dd553bb9223c76543198c5854f - React-timing: beb0ba912f9ffc1a6758afa767ae5c03302dc9ee - React-utils: 4b32801a05eff845d316edd59b313a3e25c5fc08 - ReactAppDependencyProvider: 04d5eb15eb46be6720e17a4a7fa92940a776e584 - ReactCodegen: 041559ba76d00f6680dfa0916b3c791f4babe5ea - ReactCommon: 1511ef100f1afa4c199fe52fe7a8d2529a41429a - RNDeviceInfo: d863506092aef7e7af3a1c350c913d867d795047 - RNFBApp: a438a9444c965b4b1053330f8e54217de2075823 - RNFBInstallations: e44e81b6eb5966481315f4576134748591c9dd8e - RNFBMessaging: c1dc973d87a82fd9e58bd8c3a8c269dcca337669 - RNGestureHandler: 381f81c675883fec9f8f10976aa278babc48d8eb - RNPermissions: 298c197829862f0f5fa41db8e51be213e8715176 + react-native-notifications: e2d3c022d6077de7e420ba5c01b4bd9464f3941d + react-native-safe-area-context: bd7d084270bba25cff40dc1c917883f20da5039f + react-native-webview: 3fa25e595ae48899139dc2ccfcf975b1dab9f743 + React-NativeModulesApple: 889490414c604f57066540e84e7bd8f672dac9b0 + React-oscompat: 0047f0ce53a328ce225777a6c617970556602c7c + React-perflogger: bf00d816c3c3ad91658b44f93ce9ee343b4c70df + React-performancetimeline: e4b41f114770b8b188897afb76ee660389f5e621 + React-RCTActionSheet: 9b3b04bbe75241c964d59a3ec18716d0bec22b2c + React-RCTAnimation: 2ffefa3b11df9aa1248182fac5b74e6a9b5ebd21 + React-RCTAppDelegate: 535dd2b407b204bbdd0c46d4c7050ee1a28fa6f9 + React-RCTBlob: 3cf08a694a3f7b082e23717c7587b8d914685582 + React-RCTFabric: 3effa0547b7b9f7760b19994022b58aec68725b7 + React-RCTFBReactNativeSpec: 43cea3b898e0e7e81abfeafd2dd4084dd8afe662 + React-RCTImage: 4eaca67175ed2a33d39eeb8bad0e724c849bdc11 + React-RCTLinking: 5133d7bf648707bc3fb65fb7ab3cfa7f445e9893 + React-RCTNetwork: 708cf70b59721a23cc362cde08dd204375c9d0ac + React-RCTRuntime: 240610413033c895cfbc7b304b436b561682aa9a + React-RCTSettings: 6d413683ae5a36e80c7965f1ff8efa893b211a17 + React-RCTText: 0bd1e63583ba3dab0358f62ade056732b76463f8 + React-RCTVibration: bab25bb8bc2f017e4729deb59d26bb32240b16db + React-rendererconsistency: 975bf53aa8a3f3c5234a1d4e778574d2feb48d4a + React-renderercss: 5bfe2d2b6bebe2ebd94d949f652246c00c434d96 + React-rendererdebug: f94c8b4cb6c3bde3793548950027703944cec9f4 + React-rncore: 5d9376763826f30f35bee2a00fc082ad97ec8253 + React-RuntimeApple: 8d10fd9d8c978b9a5e068199ab7c14449e5b584d + React-RuntimeCore: 7bcfa8203cec826f88938955ff2a5b06d9e956ce + React-runtimeexecutor: e6aceac245c2e4f0dca15c2c57182d1dabc90e11 + React-RuntimeHermes: 390de7efbfab6f93d46cb14d73f4a6e3b2713fd2 + React-runtimescheduler: 9f19092e4b7bfb1702b97aee02d654a7d76d5153 + React-timing: d55a2f336216d30d96e5d13c13ce7a12fcf9d585 + React-utils: ebe536eb86e1eb1679c06314f28a6352a1db2e48 + ReactAppDependencyProvider: b203bace11326361b7f0513b3f5854cd340aa929 + ReactCodegen: 7241880e54e276454ced5735f7d422df215bec6e + ReactCommon: 7aecadba671f30ab03ce021f3c6445ef8acafa9a + RNDeviceInfo: bcce8752b5043a623fe3c26789679b473f705d3c + RNFBApp: 4105e54d9ca4a1c10893a032268470f670181110 + RNFBInstallations: 0af3ed83ee414205ae466cc5dde4864c01179f99 + RNFBMessaging: 6857871d9dff8f26b0c325fc7d97ba69cb77d213 + RNGestureHandler: ee4fab31b7325a6090ccd19392800a5e0911a2d5 + RNPermissions: a1e9844aad4410e084c81ce16458cd6befbf86aa + RNSVG: 76243ae0219c97fc021489356341a1d044b08466 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 50518ade05048235d91a78b803336dbb5b159d5d + VisionCamera: 7187b3dac1ff3071234ead959ce311875748e14f + Yoga: fce72270ebed754904bbe5e18bb05cda3c3075db -PODFILE CHECKSUM: 77a3bbff7d76f2ae1551ede8ef62e45eff2a9e3b +PODFILE CHECKSUM: 17c41740150e0aa30fa43f2bef2bda13b6c352b6 COCOAPODS: 1.16.2 diff --git a/sample/react-native/ios/Sources/Info.plist b/sample/react-native/ios/Sources/Info.plist index 508207f..5247d68 100644 --- a/sample/react-native/ios/Sources/Info.plist +++ b/sample/react-native/ios/Sources/Info.plist @@ -31,14 +31,14 @@ NSAllowsLocalNetworking - NSLocationWhenInUseUsageDescription - NSCameraUsageDescription This app needs access to your camera to take photos - NSPhotoLibraryUsageDescription - This app needs access to your photo library to select photos + NSLocationWhenInUseUsageDescription + NSPhotoLibraryAddUsageDescription This app needs permission to save photos to your library + NSPhotoLibraryUsageDescription + This app needs access to your photo library to select photos UIBackgroundModes remote-notification diff --git a/sample/react-native/ios/ab.plist b/sample/react-native/ios/ab.plist new file mode 100644 index 0000000..eead124 --- /dev/null +++ b/sample/react-native/ios/ab.plist @@ -0,0 +1,30 @@ + + + + + API_KEY + AIzaSyCPhIrzLPPDw6yeEAemKq2DR3doq2iWtC8 + GCM_SENDER_ID + 237385117319 + PLIST_VERSION + 1 + BUNDLE_ID + ai.devrev.mobile.dev + PROJECT_ID + app-devrev-dev + STORAGE_BUCKET + app-devrev-dev.firebasestorage.app + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:237385117319:ios:82eb9d5d8c51b079281222 + + \ No newline at end of file diff --git a/sample/react-native/package.json b/sample/react-native/package.json index 74c31b5..506ebe5 100644 --- a/sample/react-native/package.json +++ b/sample/react-native/package.json @@ -14,9 +14,14 @@ "@react-native-firebase/app": "^21.0.0", "@react-native-firebase/installations": "^21.0.0", "@react-native-firebase/messaging": "^21.0.0", + "lottie-react-native": "^7.3.6", "react-native-device-info": "^14.0.1", + "react-native-gifted-charts": "^1.4.74", "react-native-image-picker": "^8.2.1", + "react-native-linear-gradient": "^2.8.3", "react-native-notifications": "^5.1.0", + "react-native-permissions": "^5.4.4", + "react-native-svg": "^15.15.3", "react-native-vision-camera": "^4.7.3", "react-native-webview": "^13.15.0" }, diff --git a/sample/react-native/src/App.tsx b/sample/react-native/src/App.tsx index e0c476d..2417ae8 100644 --- a/sample/react-native/src/App.tsx +++ b/sample/react-native/src/App.tsx @@ -16,6 +16,9 @@ import FlatListScreen from './screens/FlatListScreen'; import ImageUploadScreen from './screens/ImageUploadScreen'; import CameraScreen from './screens/CameraScreen'; import { commonStyles } from './styles/styles'; +import QRScannerScreen from './screens/QRScannerScreen'; +import LiveChartScreen from './screens/LiveChartScreen'; +import HeavyUIScreen from './screens/HeavyUIScreen'; export type RootStackParamList = { Home: undefined; @@ -28,6 +31,9 @@ export type RootStackParamList = { FlatListScreen: undefined; ImageUploadScreen: undefined; CameraScreen: undefined; + QRScannerScreen: undefined; + LiveChartScreen: undefined; + HeavyUIScreen: undefined; }; const Stack = createStackNavigator(); @@ -79,6 +85,21 @@ const screens = [ component: ImageUploadScreen, title: 'Gallery Upload', }, + { + name: 'QRScannerScreen', + component: QRScannerScreen, + title: 'QR Scanner', + }, + { + name: 'LiveChartScreen', + component: LiveChartScreen, + title: 'Real Time UI', + }, + { + name: 'HeavyUIScreen', + component: HeavyUIScreen, + title: 'Complex UI with Animations', + }, ] as const; const createScreen = ( @@ -110,7 +131,7 @@ const createScreen = ( const App = () => { React.useEffect(() => { try { - DevRev.configure('YOUR_APP_ID'); + DevRev.configure('DvRvStPZG9uOmNvcmU6ZHZydi11cy0xOmRldm8vM2ZBSEVDOnBsdWdfc2V0dGluZy8xX198fF9fMjAyNC0wNy0yOSAwOTozMjoxNC4xNjU1Mjc4NTggKzAwMDAgVVRDxlxendsDvRv'); DevRev.setShouldDismissModalsOnOpenLink(true); PushNotificationsService.configure(); } catch (error) { diff --git a/sample/react-native/src/assets/devrev.mp4 b/sample/react-native/src/assets/devrev.mp4 new file mode 100644 index 0000000..f23eb71 Binary files /dev/null and b/sample/react-native/src/assets/devrev.mp4 differ diff --git a/sample/react-native/src/screens/HeavyUIScreen.tsx b/sample/react-native/src/screens/HeavyUIScreen.tsx new file mode 100644 index 0000000..d611f66 --- /dev/null +++ b/sample/react-native/src/screens/HeavyUIScreen.tsx @@ -0,0 +1,249 @@ +import React, { useEffect, useState } from 'react'; +import { + View, + StyleSheet, + StatusBar, + Platform, + ScrollView, + Text, + Image, +} from 'react-native'; +import LottieView, { AnimationObject } from 'lottie-react-native'; +import WebView from 'react-native-webview'; +import DevRevVideo from '../assets/devrev.mp4'; + +const RemoteLottie: React.FC<{ url: string; style: object }> = ({ + url, + style, +}) => { + const [data, setData] = useState(null); + + useEffect(() => { + let cancelled = false; + fetch(url) + .then((res) => res.json()) + .then((json) => { + if (!cancelled) setData(json); + }) + .catch(() => { + if (!cancelled) setData(null); + }); + return () => { + cancelled = true; + }; + }, [url]); + + if (!data) { + return ; + } + + return ; +}; + +const devRevVideoUri = Image.resolveAssetSource(DevRevVideo).uri; +const videoHtml = ` + + + + + + + + +`; + +const LottieAnimationURLs = [ + [ + 'https://assets9.lottiefiles.com/packages/lf20_jbrw3hcz.json', + 'https://assets1.lottiefiles.com/packages/lf20_touohxv0.json', + 'https://assets4.lottiefiles.com/packages/lf20_lk80fpsm.json', + ], + [ + 'https://assets4.lottiefiles.com/packages/lf20_p8bfn5to.json', + 'https://assets8.lottiefiles.com/packages/lf20_j3UXNf.json', + 'https://assets2.lottiefiles.com/packages/lf20_rwq6ciql.json', + ], + [ + 'https://assets2.lottiefiles.com/packages/lf20_uu0x8lqv.json', + 'https://assets1.lottiefiles.com/packages/lf20_V9t630.json', + 'https://assets8.lottiefiles.com/packages/lf20_atippmse.json', + ], + [ + 'https://assets5.lottiefiles.com/packages/lf20_w98qte06.json', + 'https://assets3.lottiefiles.com/packages/lf20_w51pcehl.json', + 'https://assets6.lottiefiles.com/packages/lf20_ydo1amjm.json', + ], +] as const; + +const ImageUrls = [ + 'https://images.unsplash.com/photo-1555066931-4365d14bab8c', + 'https://images.unsplash.com/photo-1521737604893-d14cc237f11d', + 'https://images.unsplash.com/photo-1677442136019-21780ecad995', + 'https://images.unsplash.com/photo-1498050108023-c5249f4df085', +] as const; + +const HeavyUIScreen: React.FC = () => { + return ( + + + + + + Video + + + + + + + + + + Lottie Animations + + + {LottieAnimationURLs.map((urls, index) => ( + + {urls.map((url, idx) => ( + + + + ))} + + ))} + + + + + Images + + + {ImageUrls.map((url, index) => ( + + + + ))} + + + + + ); +}; + +const styles = StyleSheet.create({ + screen: { + flex: 1, + backgroundColor: '#F4F6F8', + }, + container: { + flex: 1, + }, + contentContainer: { + padding: 16, + paddingBottom: 40, + }, + section: { + marginBottom: 28, + }, + title: { + fontSize: 24, + fontWeight: '700', + color: '#111', + marginBottom: 12, + paddingHorizontal: 4, + }, + card: { + borderRadius: 16, + backgroundColor: '#fff', + shadowColor: '#000', + shadowOffset: { width: 0, height: 6 }, + shadowOpacity: 0.12, + shadowRadius: 10, + elevation: 6, + overflow: Platform.OS === 'android' ? 'hidden' : 'visible', + }, + mediaWrapper: { + borderRadius: 16, + overflow: 'hidden', + }, + horizontalScrollContainer: { + paddingHorizontal: 4, + gap: 14, + }, + verticalScroll: { + marginRight: 16, + maxHeight: 320, + }, + verticalScrollContainer: { + paddingVertical: 4, + }, + horizontalCard: { + width: 150, + height: 150, + marginBottom: 14, + borderRadius: 16, + backgroundColor: '#fff', + shadowColor: '#000', + shadowOffset: { width: 0, height: 4 }, + shadowOpacity: 0.12, + shadowRadius: 8, + elevation: 5, + overflow: 'hidden', + justifyContent: 'center', + alignItems: 'center', + }, + lottie: { + width: 120, + height: 120, + }, + image: { + width: '100%', + height: '100%', + borderRadius: 16, + }, + media: { + flex: 1, + width: '100%', + aspectRatio: 16 / 9, + backgroundColor: '#E5E7EB', + }, +}); + +export default HeavyUIScreen; diff --git a/sample/react-native/src/screens/LiveChartScreen.tsx b/sample/react-native/src/screens/LiveChartScreen.tsx new file mode 100644 index 0000000..df2d2a4 --- /dev/null +++ b/sample/react-native/src/screens/LiveChartScreen.tsx @@ -0,0 +1,380 @@ +import React from 'react'; +import { + View, + Text, + StyleSheet, + Pressable, + TextInput, + FlatList, +} from 'react-native'; +import { LineChart } from 'react-native-gifted-charts'; +import TouchableOpacityButton from '../components/TouchableOpacityButton'; + +const MAX_POINTS = 200; + +type ChartPoint = { + time: number; + price: number; +}; + +type PriceState = { + price: number; + open: number; +}; + +const SYMBOLS = [ + { symbol: 'btcusdt', name: 'Bitcoin' }, + { symbol: 'ethusdt', name: 'Ethereum' }, + { symbol: 'bnbusdt', name: 'BNB' }, + { symbol: 'xrpusdt', name: 'XRP' }, + { symbol: 'adausdt', name: 'Cardano' }, + { symbol: 'solusdt', name: 'Solana' }, + { symbol: 'dogeusdt', name: 'Dogecoin' }, + { symbol: 'maticusdt', name: 'Polygon' }, + { symbol: 'ltcusdt', name: 'Litecoin' }, + { symbol: 'trxusdt', name: 'TRON' }, + { symbol: 'dotusdt', name: 'Polkadot' }, + { symbol: 'avaxusdt', name: 'Avalanche' }, + { symbol: 'linkusdt', name: 'Chainlink' }, + { symbol: 'atomusdt', name: 'Cosmos' }, + { symbol: 'uniusdt', name: 'Uniswap' }, +]; + +type ConnectionStatus = 'connecting' | 'connected' | 'disconnected' | 'error'; + +const MarketRow = React.memo( + ({ + item, + priceState, + selected, + onSelect, + }: { + item: { symbol: string; name: string }; + priceState?: PriceState; + selected: string; + onSelect: (symbol: string) => void; + }) => { + const price = priceState?.price ?? 0; + const open = priceState?.open ?? price; + const change = price - open; + const percent = open !== 0 ? ((change / open) * 100).toFixed(2) : '0.00'; + + const isUp = change >= 0; + + return ( + onSelect(item.symbol)} + style={[styles.card, item.symbol === selected && styles.selectedCard]} + > + + {item.name} + {item.symbol.toUpperCase()} + + + + ${price.toFixed(2)} + + {isUp ? '+' : ''} + {percent}% + + + + ); + } +); + +const LiveChartScreen: React.FC = () => { + const [selected, setSelected] = React.useState('btcusdt'); + const [chartData, setChartData] = React.useState([]); + const [prices, setPrices] = React.useState>({}); + const [search, setSearch] = React.useState(''); + const [connectionStatus, setConnectionStatus] = + React.useState('connecting'); + const reconnectTimeout = React.useRef(null); + + const ws = React.useRef(null); + + React.useEffect(() => { + let isMounted = true; + + const connectWebSocket = () => { + setConnectionStatus('connecting'); + + const streams = SYMBOLS.map((s) => `${s.symbol}@trade`).join('/'); + + const socket = new WebSocket( + `wss://stream.binance.com:9443/stream?streams=${streams}` + ); + + ws.current = socket; + + socket.onopen = () => { + if (!isMounted) return; + setConnectionStatus('connected'); + console.log('WebSocket connected'); + }; + + socket.onmessage = (event) => { + const message = JSON.parse(event.data); + const trade = message.data; + + const symbol = trade.s.toLowerCase(); + const price = parseFloat(trade.p); + + setPrices((prev) => { + const prevSymbol = prev[symbol]; + return { + ...prev, + [symbol]: { + price, + open: prevSymbol?.open ?? price, + }, + }; + }); + + if (symbol === selected) { + setChartData((prev) => { + const newData = [...prev, { time: Date.now(), price }]; + return newData.slice(-MAX_POINTS); + }); + } + }; + + socket.onerror = () => { + if (!isMounted) return; + setConnectionStatus('error'); + scheduleReconnect(); + }; + + socket.onclose = () => { + if (!isMounted) return; + setConnectionStatus('disconnected'); + scheduleReconnect(); + }; + }; + + const scheduleReconnect = () => { + if (reconnectTimeout.current) return; + + reconnectTimeout.current = setTimeout(() => { + reconnectTimeout.current = null; + connectWebSocket(); + }, 3000); + }; + + connectWebSocket(); + + return () => { + isMounted = false; + ws.current?.close(); + if (reconnectTimeout.current) { + clearTimeout(reconnectTimeout.current); + } + }; + }, [selected]); + + const filteredSymbols = React.useMemo(() => { + const selectedSymbol = SYMBOLS.find((s) => s.symbol === selected); + + if (!search) { + return selectedSymbol + ? [selectedSymbol, ...SYMBOLS.filter((s) => s.symbol !== selected)] + : SYMBOLS; + } + + const otherMatchedSymbols = SYMBOLS.filter( + (s) => + s.symbol !== selected && + (s.name.toLowerCase().includes(search.toLowerCase()) || + s.symbol.toLowerCase().includes(search.toLowerCase())) + ); + + return selectedSymbol + ? [selectedSymbol, ...otherMatchedSymbols] + : otherMatchedSymbols; + }, [search, selected]); + + const latestPrice = prices[selected]?.price?.toFixed(2) ?? '--'; + + if (connectionStatus !== 'connected') { + + + {connectionStatus === 'connecting' && 'Connecting to live market...'} + {connectionStatus === 'disconnected' && + 'Connection lost. Reconnecting...'} + {connectionStatus === 'error' && 'Connection error. Retrying...'} + + + { + ws.current?.close(); + setConnectionStatus('connecting'); + }} + buttonStyle={styles.retryButton} + textStyle={styles.retryText} + buttonText="Retry Now" + /> + ; + } + + return ( + item.symbol} + contentContainerStyle={styles.container} + keyboardShouldPersistTaps="handled" + ListHeaderComponent={ + <> + + + {SYMBOLS.find((s) => s.symbol === selected)?.name} + + ${latestPrice} + + + + ({ + value: item.price, + }))} + height={260} + width={350} + thickness={3} + color="#2979FF" + hideDataPoints + isAnimated + animationDuration={300} + hideRules + yAxisColor="transparent" + xAxisColor="transparent" + noOfSections={5} + curved + areaChart + startFillColor="rgba(41,121,255,0.3)" + endFillColor="rgba(41,121,255,0.05)" + startOpacity={0.8} + endOpacity={0.1} + /> + + + Market Watch + + + + } + initialNumToRender={20} + renderItem={({ item }) => ( + + )} + /> + ); +}; + +const styles = StyleSheet.create({ + perecentageText: { + fontWeight: '600', + }, + selectedCard: { + backgroundColor: '#e0f2ff', + }, + itemEnd: { + alignItems: 'flex-end', + }, + container: { + backgroundColor: '#fff', + paddingHorizontal: 20, + paddingVertical: 20, + }, + titleContainer: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + }, + title: { + fontSize: 22, + fontWeight: 'bold', + }, + price: { + fontSize: 18, + }, + chart: { + height: 280, + width: '100%', + }, + section: { + fontSize: 18, + fontWeight: '600', + marginBottom: 10, + }, + search: { + color: '#000', + padding: 10, + borderRadius: 8, + backgroundColor: '#f1f1f1', + }, + card: { + flexDirection: 'row', + justifyContent: 'space-between', + marginVertical: 8, + padding: 15, + borderRadius: 10, + backgroundColor: '#f9f9f9', + }, + coinName: { + fontSize: 16, + fontWeight: '600', + }, + symbol: { + color: 'gray', + }, + priceSmall: { + fontSize: 16, + fontWeight: '600', + }, + connectionBanner: { + backgroundColor: '#ffe9e9', + padding: 12, + borderRadius: 8, + marginVertical: 10, + }, + connectionText: { + color: '#c62828', + fontWeight: '500', + marginBottom: 6, + }, + retryButton: { + alignSelf: 'flex-start', + backgroundColor: '#c62828', + paddingHorizontal: 12, + paddingVertical: 6, + borderRadius: 6, + }, + retryText: { + color: '#fff', + fontWeight: '600', + }, + colorGreen: { + color: 'green', + }, + colorRed: { + color: 'red', + }, +}); + +export default LiveChartScreen; diff --git a/sample/react-native/src/screens/QRScannerScreen.tsx b/sample/react-native/src/screens/QRScannerScreen.tsx new file mode 100644 index 0000000..e7b7204 --- /dev/null +++ b/sample/react-native/src/screens/QRScannerScreen.tsx @@ -0,0 +1,144 @@ +import React, { useCallback, useEffect, useState } from 'react'; +import { View, Text, StyleSheet, TouchableOpacity } from 'react-native'; +import { + Camera, + useCameraDevice, + useCameraPermission, + Code, +} from 'react-native-vision-camera'; + +const QRScannerScreen: React.FC = () => { + const device = useCameraDevice('back'); + const { hasPermission, requestPermission } = useCameraPermission(); + + const [scanned, setScanned] = useState(false); + const [result, setResult] = useState(null); + + useEffect(() => { + requestPermission(); + }, [requestPermission]); + + const handleCodeScanned = useCallback( + (codes: Code[]) => { + if (scanned) return; + + const value = codes[0]?.value; + if (value) { + setResult(value); + setScanned(true); + } + }, + [scanned] + ); + + if (!hasPermission) { + return ( + + Camera permission is required + + + Grant Permission + + + ); + } + + if (!device) { + return ( + + No Camera Device Found + + ); + } + + return ( + + + + + Scanned Result + + + {result ?? 'No QR code scanned yet'} + + + {scanned && ( + { + setScanned(false); + setResult(null); + }} + > + Scan Again + + )} + + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#fff', + }, + camera: { + flex: 4, + }, + resultContainer: { + flex: 1, + padding: 16, + borderTopWidth: 1, + borderColor: '#eee', + justifyContent: 'center', + }, + label: { + fontSize: 14, + fontWeight: '600', + color: '#666', + }, + resultText: { + fontSize: 16, + color: '#007AFF', + marginTop: 8, + }, + scanAgainButton: { + marginTop: 12, + backgroundColor: '#007AFF', + padding: 12, + borderRadius: 8, + alignItems: 'center', + }, + scanAgainText: { + color: '#fff', + fontWeight: '600', + }, + center: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + permissionText: { + fontSize: 16, + marginBottom: 10, + }, + button: { + backgroundColor: '#007AFF', + padding: 12, + borderRadius: 8, + }, + buttonText: { + color: '#fff', + }, +}); + +export default QRScannerScreen; diff --git a/sample/react-native/src/screens/SessionAnalyticsScreen.tsx b/sample/react-native/src/screens/SessionAnalyticsScreen.tsx index 453663a..fe18ff7 100644 --- a/sample/react-native/src/screens/SessionAnalyticsScreen.tsx +++ b/sample/react-native/src/screens/SessionAnalyticsScreen.tsx @@ -52,6 +52,21 @@ const MediaButtons = [ text: 'Gallery Image Upload', screenname: 'ImageUploadScreen', }, + { + text: 'QR Scanner', + screenname: 'QRScannerScreen', + }, +] as const; + +const HeavyUIButtons = [ + { + text: 'Real Time UI', + screenname: 'LiveChartScreen', + }, + { + text: 'Complex UI with Animations', + screenname: 'HeavyUIScreen', + }, ] as const; const OnDemandSessionButtons = [ @@ -172,6 +187,17 @@ const SessionAnalyticsScreen: React.FC<{ navigation: any }> = ({ /> ))} + Heavy UI + {HeavyUIButtons.map((button, index) => ( + navigation.navigate(button.screenname)} + buttonText={button.text} + buttonStyle={commonStyles.button} + textStyle={commonStyles.buttonText} + /> + ))} + Manual Masking / Unmasking