diff --git a/.gitignore b/.gitignore index e10d75a46..bf750aa20 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ DerivedData *.hmap *.ipa *.xcuserstate +**/.xcode.env.local # Exclude compiled libs android/app/src/main/jniLibs @@ -76,7 +77,7 @@ buck-out/ *.jsbundle # CocoaPods -/ios/Pods/ +**/Pods/ /ios/Podfile.lock # e2e test logs diff --git a/Gemfile b/Gemfile index f2b7ed68e..d60b25cc7 100644 --- a/Gemfile +++ b/Gemfile @@ -6,5 +6,4 @@ ruby ">= 2.6.10" # Cocoapods 1.15 introduced a bug which break the build. We will remove the upper # bound in the template on Cocoapods with next React Native release. gem 'cocoapods', '>= 1.13', '< 1.15' -gem 'activesupport', '>= 6.1.7.5', '< 7.1.0' -gem 'xcodeproj', '< 1.26.0' \ No newline at end of file +gem 'activesupport', '>= 6.1.7.5', '< 7.1.0' \ No newline at end of file diff --git a/__mocks__/react-native-vision-camera.js b/__mocks__/react-native-vision-camera.js new file mode 100644 index 000000000..86281404d --- /dev/null +++ b/__mocks__/react-native-vision-camera.js @@ -0,0 +1,21 @@ +// Simple mock for Camera +export const Camera = () => null; + +// Mock that returns a mocked camera object +export const useCameraDevice = jest.fn(() => ({ + id: 'mocked-camera', + name: 'Mock Camera', + position: 'back', +})); + +// Mock that returns permission status and a request function +export const useCameraPermission = jest.fn(() => ({ + hasPermission: true, + requestPermission: jest.fn(), +})); + +// Mock that provides a mocked scanner function +export const useCodeScanner = jest.fn(() => ({ + codeTypes: ['qr', 'ean-13'], + onCodeScanned: jest.fn(), +})); diff --git a/__tests__/__snapshots__/Scanner.snapshot.tsx.snap b/__tests__/__snapshots__/Scanner.snapshot.tsx.snap index ae71c7c0f..fd5313a76 100644 --- a/__tests__/__snapshots__/Scanner.snapshot.tsx.snap +++ b/__tests__/__snapshots__/Scanner.snapshot.tsx.snap @@ -8,7 +8,5 @@ exports[`Component Scanner - test Scanner - snapshot 1`] = ` "width": "100%", } } -> - - +/> `; diff --git a/android/app/build.gradle b/android/app/build.gradle index 080b51173..5ac8f983e 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -109,7 +109,6 @@ android { targetSdkVersion rootProject.ext.targetSdkVersion versionCode 218 // Real versionName "zingo-1.11.0" // Real - missingDimensionStrategy 'react-native-camera', 'general' testBuildType System.getProperty('testBuildType', 'debug') testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } @@ -225,7 +224,6 @@ android.applicationVariants.configureEach { variant -> dependencies { // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android") - implementation("com.facebook.react:flipper-integration") androidTestImplementation('com.wix:detox:20.27.2') implementation 'androidx.appcompat:appcompat:1.7.0' @@ -258,7 +256,8 @@ dependencies { implementation "androidx.work:work-rxjava2:$work_version" // optional - GCMNetworkManager support - implementation "androidx.work:work-gcm:$work_version" + // GCM is deprecated + //implementation "androidx.work:work-gcm:$work_version" // optional - Test helpers androidTestImplementation "androidx.work:work-testing:$work_version" diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index a22659042..146cbb8c6 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -2,6 +2,8 @@ xmlns:tools="http://schemas.android.com/tools"> + = - PackageList(this).packages.apply { - // Packages that cannot be autolinked yet can be added manually here, for example: - // add(MyReactNativePackage()) - add(RPCPackage()) + object : DefaultReactNativeHost(this) { + override fun getPackages(): List = + PackageList(this).packages.apply { + // Packages that cannot be autolinked yet can be added manually here, + // for example: + // add(MyReactNativePackage()) + add(RPCPackage()) + } + + override fun getJSMainModuleName(): String = "index" + + override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG + + override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED } - - override fun getJSMainModuleName(): String = "index" - - override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG - - override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED - override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED - } - + override val reactHost: ReactHost - get() = getDefaultReactHost(this.applicationContext, reactNativeHost) - + get() = getDefaultReactHost(applicationContext, reactNativeHost) + override fun onCreate() { super.onCreate() context = WeakReference(applicationContext) - SoLoader.init(this, false) if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - // If you opted-in for the New Architecture, we load the native entry point for this app. + // If you opted-in for the New Architecture, we load the native entry point for this + // app. load() } } @@ -58,4 +59,3 @@ class MainApplication : Application(), ReactApplication { } } } - diff --git a/android/build.gradle b/android/build.gradle index 202fee3f7..375addb04 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -6,8 +6,8 @@ buildscript { minSdkVersion = 24 compileSdkVersion = 34 targetSdkVersion = 34 - ndkVersion = "24.0.8215888" - kotlinVersion = '1.8.22' + ndkVersion = "26.1.10909125" + kotlinVersion = "1.9.22" } repositories { google() @@ -16,7 +16,7 @@ buildscript { dependencies { classpath('com.android.tools.build:gradle:8.3.2') classpath("com.facebook.react:react-native-gradle-plugin") - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" } } @@ -31,18 +31,4 @@ allprojects { maven { url 'https://www.jitpack.io' } } } - -// this is not the best solution, but while the libraries have no namespace... -// https://discuss.gradle.org/t/namespace-not-specified-for-agp-8-0-0/45850/5 - -//subprojects { -// afterEvaluate { project -> -// if (project.hasProperty('android')) { -// project.android { -// if (namespace == null) { -// namespace project.group -// } -// } -// } -// } -//} \ No newline at end of file + \ No newline at end of file diff --git a/android/gradle.properties b/android/gradle.properties index d4c32ecae..912ace2ee 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -44,3 +44,5 @@ hermesEnabled=true android.defaults.buildfeatures.buildconfig=true android.nonTransitiveRClass=false android.nonFinalResIds=false + +VisionCamera_enableCodeScanner=true \ No newline at end of file diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 9cbf3239c..6dbbc8457 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ #Fri Jan 24 19:05:10 MST 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/android/gradlew b/android/gradlew index 43304d37e..378f8cf67 100755 --- a/android/gradlew +++ b/android/gradlew @@ -181,7 +181,11 @@ APP_ARGS=`save "$@"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -# Collect all arguments for the java command, following the shell quoting and substitution rules +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat index 6969b7ea5..920486cf4 100644 --- a/android/gradlew.bat +++ b/android/gradlew.bat @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if "%ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +57,12 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/app/LoadedApp/LoadedApp.tsx b/app/LoadedApp/LoadedApp.tsx index c39a2c7b6..4f4ec937c 100644 --- a/app/LoadedApp/LoadedApp.tsx +++ b/app/LoadedApp/LoadedApp.tsx @@ -1191,7 +1191,7 @@ export class LoadedAppClass extends Component reject(), }, ], - { cancelable: false, userInterfaceStyle: 'light' }, + { cancelable: false }, ); }); }; @@ -1243,7 +1243,7 @@ export class LoadingAppClass extends Component = ({ }, { text: translate('cancel') as string, style: 'cancel' }, ], - { cancelable: false, userInterfaceStyle: 'light' }, + { cancelable: false }, ); } else { createNewWallet(); diff --git a/app/createAlert.ts b/app/createAlert.ts index 47ab2d6cc..8f1286199 100644 --- a/app/createAlert.ts +++ b/app/createAlert.ts @@ -34,7 +34,7 @@ export const createAlert = async ( }, { text: translate('cancel') as string, style: 'cancel' }, ], - { cancelable: false, userInterfaceStyle: 'light' }, + { cancelable: false }, ); } else { // no email button diff --git a/app/recoveryWalletInfo.ts b/app/recoveryWalletInfo.ts index d7d9c6cd8..e7351ab60 100644 --- a/app/recoveryWalletInfo.ts +++ b/app/recoveryWalletInfo.ts @@ -1,7 +1,7 @@ import * as Keychain from 'react-native-keychain'; import { GlobalConst, WalletType } from './AppState'; -const options = (biometrics: Keychain.BIOMETRY_TYPE | null): Keychain.Options => { +const options = (biometrics: Keychain.BIOMETRY_TYPE | null): Keychain.BaseOptions => { return { service: GlobalConst.serviceKeyChain, accessControl: Keychain.ACCESS_CONTROL.BIOMETRY_CURRENT_SET_OR_DEVICE_PASSCODE, // for both @@ -11,8 +11,8 @@ const options = (biometrics: Keychain.BIOMETRY_TYPE | null): Keychain.Options => // with biometrics in the device -> SECURE HARDWARE securityLevel: biometrics ? Keychain.SECURITY_LEVEL.SECURE_HARDWARE : Keychain.SECURITY_LEVEL.SECURE_SOFTWARE, // with biometrics in the device -> RSA - storage: biometrics ? Keychain.STORAGE_TYPE.RSA : Keychain.STORAGE_TYPE.AES, - } as Keychain.Options; + storage: biometrics ? Keychain.STORAGE_TYPE.RSA : Keychain.STORAGE_TYPE.AES_GCM, + } as Keychain.BaseOptions; }; export const saveRecoveryWalletInfo = async (keys: WalletType): Promise => { diff --git a/components/AddressBook/components/AbSummaryLine.tsx b/components/AddressBook/components/AbSummaryLine.tsx index cd941b924..74b930957 100644 --- a/components/AddressBook/components/AbSummaryLine.tsx +++ b/components/AddressBook/components/AbSummaryLine.tsx @@ -79,7 +79,7 @@ const AbSummaryLine: React.FunctionComponent = ({ }, { text: translate('cancel') as string, style: 'cancel' }, ], - { cancelable: false, userInterfaceStyle: 'light' }, + { cancelable: false }, ); }; diff --git a/components/Components/PriceFetcher.tsx b/components/Components/PriceFetcher.tsx index 5a4bc759a..00ffb2b92 100644 --- a/components/Components/PriceFetcher.tsx +++ b/components/Components/PriceFetcher.tsx @@ -80,7 +80,7 @@ const PriceFetcher: React.FunctionComponent = ({ setZecPrice, { text: translate('send.fetch-button') as string, onPress: () => onPressFetch() }, { text: translate('cancel') as string, style: 'cancel' }, ], - { cancelable: false, userInterfaceStyle: 'light' }, + { cancelable: false }, ); }; diff --git a/components/Components/Scanner.tsx b/components/Components/Scanner.tsx index cb2040024..123e9dd48 100644 --- a/components/Components/Scanner.tsx +++ b/components/Components/Scanner.tsx @@ -1,38 +1,55 @@ /* eslint-disable react-native/no-inline-styles */ import React from 'react'; -import QRCodeScanner from 'react-native-qrcode-scanner'; import { SafeAreaView } from 'react-native'; -import { useTheme } from '@react-navigation/native'; -import { BarCodeReadEvent } from 'react-native-camera'; -import { ThemeType } from '../../app/types/ThemeType'; +import { Camera, Code, useCameraDevice, useCameraPermission, useCodeScanner } from 'react-native-vision-camera'; +import { Text } from 'react-native-svg'; +// import { useTheme } from '@react-navigation/native'; +// import { ThemeType } from '../../app/types/ThemeType'; type ScannerProps = { - onRead: (e: BarCodeReadEvent) => void; + onRead: (codes: Code[]) => void; }; const Scanner: React.FunctionComponent = ({ onRead }) => { - const { colors } = useTheme() as unknown as ThemeType; + // const { colors } = useTheme() as unknown as ThemeType; + const device = useCameraDevice('back'); + const { hasPermission, requestPermission } = useCameraPermission(); + const [active, setActive] = React.useState(true); + + if (!hasPermission) { + requestPermission(); + } + + const codeScanner = useCodeScanner({ + codeTypes: ['qr', 'ean-13'], + onCodeScanned: codes => { + setActive(false); + onRead(codes); + }, + }); + + if (!hasPermission || device == null) { + console.log('permission: ', hasPermission); + console.log('device: ', device); + return ( + + No permission + + ); + } return ( - + ); }; diff --git a/components/Header/Header.tsx b/components/Header/Header.tsx index 5955ce9bf..eb45a8fed 100644 --- a/components/Header/Header.tsx +++ b/components/Header/Header.tsx @@ -424,7 +424,7 @@ const Header: React.FunctionComponent = ({ { text: translate('confirm') as string, onPress: () => shieldFunds() }, { text: translate('cancel') as string, style: 'cancel' }, ], - { cancelable: false, userInterfaceStyle: 'light' }, + { cancelable: false }, ); }; diff --git a/components/Messages/components/MessageList.tsx b/components/Messages/components/MessageList.tsx index d8ee9506d..ee0bd6872 100644 --- a/components/Messages/components/MessageList.tsx +++ b/components/Messages/components/MessageList.tsx @@ -152,7 +152,7 @@ const MessageList: React.FunctionComponent = ({ .trim() .split(' ') .filter((w: string) => !!w); - console.log(words); + //console.log(words); if (words[0]) { initials = words[0].charAt(0).toUpperCase(); } diff --git a/components/Seed/Seed.tsx b/components/Seed/Seed.tsx index b0d3a578a..6b8edbfe4 100644 --- a/components/Seed/Seed.tsx +++ b/components/Seed/Seed.tsx @@ -167,7 +167,7 @@ const Seed: React.FunctionComponent = ({ }, { text: translate('cancel') as string, onPress: () => onClickCancel(), style: 'cancel' }, ], - { cancelable: false, userInterfaceStyle: 'light' }, + { cancelable: false }, ); }; diff --git a/components/Send/Send.tsx b/components/Send/Send.tsx index 4dd4357f7..dc156d892 100644 --- a/components/Send/Send.tsx +++ b/components/Send/Send.tsx @@ -1278,7 +1278,7 @@ const Send: React.FunctionComponent = ({ }, { text: translate('cancel') as string, style: 'cancel' }, ], - { cancelable: false, userInterfaceStyle: 'light' }, + { cancelable: false }, ); } }}> @@ -1371,7 +1371,7 @@ const Send: React.FunctionComponent = ({ }, { text: translate('cancel') as string, style: 'cancel' }, ], - { cancelable: false, userInterfaceStyle: 'light' }, + { cancelable: false }, ); } }}> diff --git a/components/Send/components/ScannerAddress.tsx b/components/Send/components/ScannerAddress.tsx index f2e1c6b19..b36ccf3aa 100644 --- a/components/Send/components/ScannerAddress.tsx +++ b/components/Send/components/ScannerAddress.tsx @@ -2,7 +2,6 @@ import React, { useContext } from 'react'; import { ContextAppLoaded } from '../../../app/context'; -import { BarCodeReadEvent } from 'react-native-camera'; import Scanner from '../../Components/Scanner'; import moment from 'moment'; import 'moment/locale/es'; @@ -14,6 +13,7 @@ import Header from '../../Header'; import { useTheme } from '@react-navigation/native'; import { ThemeType } from '../../../app/types'; import { SafeAreaView } from 'react-native'; +import { Code } from 'react-native-vision-camera'; type ScannerAddressProps = { setAddress: (address: string) => void; @@ -44,8 +44,12 @@ const ScannerAddress: React.FunctionComponent = ({ setAddre } }; - const onRead = (e: BarCodeReadEvent) => { - const scandata = e.data.trim(); + const onRead = (codes: Code[]) => { + const scandata = codes[0].value?.trim(); + + if (!scandata) { + return; + } validateAddress(scandata); }; diff --git a/components/Send/components/ShowAddressAlertAsync.ts b/components/Send/components/ShowAddressAlertAsync.ts index c6ebe35ca..195e7d7de 100644 --- a/components/Send/components/ShowAddressAlertAsync.ts +++ b/components/Send/components/ShowAddressAlertAsync.ts @@ -17,7 +17,7 @@ const ShowAddressAlertAsync = (translate: (key: string) => TranslateType): Promi onPress: () => reject(), }, ], - { cancelable: false, userInterfaceStyle: 'light' }, + { cancelable: false }, ); }); }; diff --git a/components/Ufvk/ShowUfvk.tsx b/components/Ufvk/ShowUfvk.tsx index 45e13d15e..e4bc03387 100644 --- a/components/Ufvk/ShowUfvk.tsx +++ b/components/Ufvk/ShowUfvk.tsx @@ -72,7 +72,7 @@ const ShowUfvk: React.FunctionComponent = ({ onClickOK, onClickCa }, { text: translate('cancel') as string, onPress: () => onClickCancel(), style: 'cancel' }, ], - { cancelable: false, userInterfaceStyle: 'light' }, + { cancelable: false }, ); }; diff --git a/components/Ufvk/components/ScannerUfvk.tsx b/components/Ufvk/components/ScannerUfvk.tsx index 00f5c9252..1de1d2356 100644 --- a/components/Ufvk/components/ScannerUfvk.tsx +++ b/components/Ufvk/components/ScannerUfvk.tsx @@ -1,7 +1,6 @@ /* eslint-disable react-native/no-inline-styles */ import React, { useContext } from 'react'; import { ContextAppLoading } from '../../../app/context'; -import { BarCodeReadEvent } from 'react-native-camera'; import Scanner from '../../Components/Scanner'; import moment from 'moment'; import 'moment/locale/es'; @@ -11,6 +10,7 @@ import Header from '../../Header'; import { SafeAreaView } from 'react-native'; import { useTheme } from '@react-navigation/native'; import { ThemeType } from '../../../app/types'; +import { Code } from 'react-native-vision-camera'; type ScannerKeyProps = { setUfvkText: (k: string) => void; @@ -22,8 +22,12 @@ const ScannerKey: React.FunctionComponent = ({ setUfvkText, clo const { colors } = useTheme() as unknown as ThemeType; moment.locale(language); - const onRead = async (e: BarCodeReadEvent) => { - const scandata = e.data.trim(); + const onRead = async (codes: Code[]) => { + const scandata = codes[0].value?.trim(); + + if (!scandata) { + return; + } setUfvkText(scandata); closeModal(); diff --git a/ios/AppDelegate.swift b/ios/AppDelegate.swift index 8bc2a983b..5d8ae96e8 100644 --- a/ios/AppDelegate.swift +++ b/ios/AppDelegate.swift @@ -8,6 +8,7 @@ import Foundation import UIKit import BackgroundTasks +import Network @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { @@ -24,7 +25,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { let jsCodeLocation: URL - jsCodeLocation = RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index", fallbackExtension: nil) + jsCodeLocation = RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index", fallbackExtension: nil)! //jsCodeLocation = Bundle.main.url(forResource: "main", withExtension: "jsbundle")! let rootView = RCTRootView(bundleURL: jsCodeLocation, moduleName: "Zingo", initialProperties: nil, launchOptions: launchOptions) let rootViewController = UIViewController() diff --git a/ios/Podfile b/ios/Podfile index 9d8d3d7cb..7202cd3ae 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -20,17 +20,6 @@ setup_permissions([ 'FaceID', ]) -# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set. -# because `react-native-flipper` depends on (FlipperKit,...) that will be excluded -# -# To fix this you can also exclude `react-native-flipper` using a `react-native.config.js` -# ```js -# module.exports = { -# dependencies: { -# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}), -# ``` -flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled - linkage = ENV['USE_FRAMEWORKS'] if linkage != nil Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green @@ -53,17 +42,13 @@ target 'ZingoMobile' do # Pods for testing end - # Enables Flipper. - # - # Note that if you have use_frameworks! enabled, Flipper will not work and - # you should disable the next line. - # use_flipper!() - post_install do |installer| react_native_post_install( installer, config[:reactNativePath], - :mac_catalyst_enabled => false + :mac_catalyst_enabled => false, + # :ccache_enabled => true + ) installer.pods_project.targets.each do |target| target.build_configurations.each do |config| diff --git a/ios/ZingoMobile.xcodeproj/project.pbxproj b/ios/ZingoMobile.xcodeproj/project.pbxproj index 1e7672e35..7bddd1731 100644 --- a/ios/ZingoMobile.xcodeproj/project.pbxproj +++ b/ios/ZingoMobile.xcodeproj/project.pbxproj @@ -8,7 +8,7 @@ /* Begin PBXBuildFile section */ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; - 1BF815F58158920218B0B2C5 /* libPods-ZingoMobile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CAE910CE97536CFF1E0EC35B /* libPods-ZingoMobile.a */; }; + 1D8EDD3CA2EF2BBAA4532192 /* libPods-ZingoMobile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 710EF587E672BE1EAB50115C /* libPods-ZingoMobile.a */; }; 1F0338192C48782D00A3FC49 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0338182C48782D00A3FC49 /* Constants.swift */; }; 1F03381A2C49575900A3FC49 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0338182C48782D00A3FC49 /* Constants.swift */; }; 1F0893FF2BA4C4380089FD88 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 1F0893FE2BA4C4380089FD88 /* PrivacyInfo.xcprivacy */; }; @@ -27,7 +27,7 @@ 1FC1E2172BE443270064963B /* ZingoMobileTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC1E2162BE443270064963B /* ZingoMobileTest.swift */; }; 1FE8E9AC296B85FC004A256B /* BackgroundTasks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FE8E9AB296B85FC004A256B /* BackgroundTasks.framework */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; - 86090590A1CEE33E79EBD7D7 /* libPods-ZingoMobile-ZingoMobileTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 86C5C25EDD87B8A50DEA97E0 /* libPods-ZingoMobile-ZingoMobileTests.a */; }; + 8D52D5FE9C2F6AF27E08D93E /* libPods-ZingoMobile-ZingoMobileTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C1E8BEABF0398AE84390D9 /* libPods-ZingoMobile-ZingoMobileTests.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -43,11 +43,9 @@ /* Begin PBXFileReference section */ 00E356EE1AD99517003FC87E /* ZingoMobileTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZingoMobileTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 03BD1F8554BA3594B551AD87 /* Pods-ZingoMobile-ZingoMobileTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ZingoMobile-ZingoMobileTests.debug.xcconfig"; path = "Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests.debug.xcconfig"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* Zingo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Zingo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ZingoMobile/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ZingoMobile/Info.plist; sourceTree = ""; }; - 1EFBD09D67229102F3391A88 /* Pods-ZingoMobile-ZingoMobileTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ZingoMobile-ZingoMobileTests.release.xcconfig"; path = "Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests.release.xcconfig"; sourceTree = ""; }; 1F0338182C48782D00A3FC49 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; 1F0893FE2BA4C4380089FD88 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 1F5569252BBCB4D900F2CD6C /* RPCModule-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RPCModule-Bridging-Header.h"; sourceTree = ""; }; @@ -62,11 +60,13 @@ 1FA935B62BE474CD00117DF5 /* ZingoMobileTest-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ZingoMobileTest-Bridging-Header.h"; sourceTree = ""; }; 1FC1E2162BE443270064963B /* ZingoMobileTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZingoMobileTest.swift; sourceTree = ""; }; 1FE8E9AB296B85FC004A256B /* BackgroundTasks.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = BackgroundTasks.framework; path = System/Library/Frameworks/BackgroundTasks.framework; sourceTree = SDKROOT; }; - 585B3655B15433BDD7B45C36 /* Pods-ZingoMobile.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ZingoMobile.debug.xcconfig"; path = "Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile.debug.xcconfig"; sourceTree = ""; }; + 2300F9378F6888F2B352D306 /* Pods-ZingoMobile.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ZingoMobile.debug.xcconfig"; path = "Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile.debug.xcconfig"; sourceTree = ""; }; + 5ED82B2DA0E3FC04E11DE053 /* Pods-ZingoMobile-ZingoMobileTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ZingoMobile-ZingoMobileTests.release.xcconfig"; path = "Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests.release.xcconfig"; sourceTree = ""; }; + 710EF587E672BE1EAB50115C /* libPods-ZingoMobile.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ZingoMobile.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = ZingoMobile/LaunchScreen.storyboard; sourceTree = ""; }; - 86C5C25EDD87B8A50DEA97E0 /* libPods-ZingoMobile-ZingoMobileTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ZingoMobile-ZingoMobileTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - A0EFB1CFD194D312C400A545 /* Pods-ZingoMobile.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ZingoMobile.release.xcconfig"; path = "Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile.release.xcconfig"; sourceTree = ""; }; - CAE910CE97536CFF1E0EC35B /* libPods-ZingoMobile.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ZingoMobile.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 84C1E8BEABF0398AE84390D9 /* libPods-ZingoMobile-ZingoMobileTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ZingoMobile-ZingoMobileTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + C9EDB8C151E21F47B87020D3 /* Pods-ZingoMobile.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ZingoMobile.release.xcconfig"; path = "Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile.release.xcconfig"; sourceTree = ""; }; + E78EF16A716A833BA581E4C1 /* Pods-ZingoMobile-ZingoMobileTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ZingoMobile-ZingoMobileTests.debug.xcconfig"; path = "Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests.debug.xcconfig"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -77,7 +77,7 @@ files = ( 1FA935B32BE457B100117DF5 /* SystemConfiguration.framework in Frameworks */, 1FA935B22BE4569D00117DF5 /* libuniffi_zingo.a in Frameworks */, - 86090590A1CEE33E79EBD7D7 /* libPods-ZingoMobile-ZingoMobileTests.a in Frameworks */, + 8D52D5FE9C2F6AF27E08D93E /* libPods-ZingoMobile-ZingoMobileTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -88,7 +88,7 @@ 1FE8E9AC296B85FC004A256B /* BackgroundTasks.framework in Frameworks */, 1F7D321D2B71D44800D2879C /* SystemConfiguration.framework in Frameworks */, 1F8815602BD31176006490E1 /* libuniffi_zingo.a in Frameworks */, - 1BF815F58158920218B0B2C5 /* libPods-ZingoMobile.a in Frameworks */, + 1D8EDD3CA2EF2BBAA4532192 /* libPods-ZingoMobile.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -136,8 +136,8 @@ 1F7D321C2B71D44800D2879C /* SystemConfiguration.framework */, 1FE8E9AB296B85FC004A256B /* BackgroundTasks.framework */, ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - CAE910CE97536CFF1E0EC35B /* libPods-ZingoMobile.a */, - 86C5C25EDD87B8A50DEA97E0 /* libPods-ZingoMobile-ZingoMobileTests.a */, + 710EF587E672BE1EAB50115C /* libPods-ZingoMobile.a */, + 84C1E8BEABF0398AE84390D9 /* libPods-ZingoMobile-ZingoMobileTests.a */, ); name = Frameworks; sourceTree = ""; @@ -179,10 +179,10 @@ 8BB7EBE9935B479E64CBB9A8 /* Pods */ = { isa = PBXGroup; children = ( - 585B3655B15433BDD7B45C36 /* Pods-ZingoMobile.debug.xcconfig */, - A0EFB1CFD194D312C400A545 /* Pods-ZingoMobile.release.xcconfig */, - 03BD1F8554BA3594B551AD87 /* Pods-ZingoMobile-ZingoMobileTests.debug.xcconfig */, - 1EFBD09D67229102F3391A88 /* Pods-ZingoMobile-ZingoMobileTests.release.xcconfig */, + 2300F9378F6888F2B352D306 /* Pods-ZingoMobile.debug.xcconfig */, + C9EDB8C151E21F47B87020D3 /* Pods-ZingoMobile.release.xcconfig */, + E78EF16A716A833BA581E4C1 /* Pods-ZingoMobile-ZingoMobileTests.debug.xcconfig */, + 5ED82B2DA0E3FC04E11DE053 /* Pods-ZingoMobile-ZingoMobileTests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -194,12 +194,12 @@ isa = PBXNativeTarget; buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ZingoMobileTests" */; buildPhases = ( - A526B5EB8BA90560386D5342 /* [CP] Check Pods Manifest.lock */, + E5B348545A1D5DFFD52C9057 /* [CP] Check Pods Manifest.lock */, 00E356EA1AD99517003FC87E /* Sources */, 00E356EB1AD99517003FC87E /* Frameworks */, 00E356EC1AD99517003FC87E /* Resources */, - E60DA930995EDB55FC7A5669 /* [CP] Embed Pods Frameworks */, - 9F0CCECDDC0130F50F7D6598 /* [CP] Copy Pods Resources */, + 4066914AC5A4EC685DB7A7BB /* [CP] Embed Pods Frameworks */, + 53FEBB0124E2169596DF07DB /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -215,14 +215,14 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ZingoMobile" */; buildPhases = ( - C56D8E4C929CCAAECAAD225A /* [CP] Check Pods Manifest.lock */, + 5ADB94CDDE911DEC8997BDD5 /* [CP] Check Pods Manifest.lock */, FD10A7F022414F080027D42C /* Start Packager */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - FB14D6F165BA0B65E7D6B792 /* [CP] Embed Pods Frameworks */, - 0C97B7D7BD3ADDF3DC10846A /* [CP] Copy Pods Resources */, + 44B0F2CF79E1E255EB526B03 /* [CP] Embed Pods Frameworks */, + 6D5A742C9332D09645768EFA /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -306,63 +306,58 @@ shellPath = /bin/sh; shellScript = "set -e\n\nexport NODE_BINARY=$(which node)\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; }; - 0C97B7D7BD3ADDF3DC10846A /* [CP] Copy Pods Resources */ = { + 4066914AC5A4EC685DB7A7BB /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9F0CCECDDC0130F50F7D6598 /* [CP] Copy Pods Resources */ = { + 44B0F2CF79E1E255EB526B03 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - A526B5EB8BA90560386D5342 /* [CP] Check Pods Manifest.lock */ = { + 53FEBB0124E2169596DF07DB /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-ZingoMobile-ZingoMobileTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - C56D8E4C929CCAAECAAD225A /* [CP] Check Pods Manifest.lock */ = { + 5ADB94CDDE911DEC8997BDD5 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -384,38 +379,43 @@ 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; }; - E60DA930995EDB55FC7A5669 /* [CP] Embed Pods Frameworks */ = { + 6D5A742C9332D09645768EFA /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ZingoMobile-ZingoMobileTests/Pods-ZingoMobile-ZingoMobileTests-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile-resources.sh\"\n"; showEnvVarsInLog = 0; }; - FB14D6F165BA0B65E7D6B792 /* [CP] Embed Pods Frameworks */ = { + E5B348545A1D5DFFD52C9057 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-ZingoMobile-ZingoMobileTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ZingoMobile/Pods-ZingoMobile-frameworks.sh\"\n"; + 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; }; FD10A7F022414F080027D42C /* Start Packager */ = { @@ -477,9 +477,8 @@ /* Begin XCBuildConfiguration section */ 00E356F61AD99517003FC87E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 03BD1F8554BA3594B551AD87 /* Pods-ZingoMobile-ZingoMobileTests.debug.xcconfig */; + baseConfigurationReference = E78EF16A716A833BA581E4C1 /* Pods-ZingoMobile-ZingoMobileTests.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ENABLE_MODULES = YES; DEVELOPMENT_TEAM = 788KRST4S8; GCC_PREPROCESSOR_DEFINITIONS = ( @@ -513,9 +512,8 @@ }; 00E356F71AD99517003FC87E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1EFBD09D67229102F3391A88 /* Pods-ZingoMobile-ZingoMobileTests.release.xcconfig */; + baseConfigurationReference = 5ED82B2DA0E3FC04E11DE053 /* Pods-ZingoMobile-ZingoMobileTests.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ENABLE_MODULES = YES; COPY_PHASE_STRIP = NO; DEVELOPMENT_TEAM = 788KRST4S8; @@ -546,7 +544,7 @@ }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 585B3655B15433BDD7B45C36 /* Pods-ZingoMobile.debug.xcconfig */; + baseConfigurationReference = 2300F9378F6888F2B352D306 /* Pods-ZingoMobile.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; @@ -587,7 +585,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A0EFB1CFD194D312C400A545 /* Pods-ZingoMobile.release.xcconfig */; + baseConfigurationReference = C9EDB8C151E21F47B87020D3 /* Pods-ZingoMobile.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; @@ -630,6 +628,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CC = ""; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_CXX_LIBRARY = "libc++"; @@ -657,6 +656,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + CXX = ""; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -678,6 +678,8 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.5; + LD = ""; + LDPLUSPLUS = ""; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -705,6 +707,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CC = ""; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_CXX_LIBRARY = "libc++"; @@ -732,6 +735,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; + CXX = ""; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -749,6 +753,8 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.5; + LD = ""; + LDPLUSPLUS = ""; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", diff --git a/metro.config.js b/metro.config.js index ab634150b..19ddd7d93 100644 --- a/metro.config.js +++ b/metro.config.js @@ -1,11 +1,22 @@ const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config'); +const { resolver: defaultResolver } = getDefaultConfig.getDefaultValues(); + /** * Metro configuration - * https://facebook.github.io/metro/docs/configuration + * https://reactnative.dev/docs/metro * * @type {import('metro-config').MetroConfig} */ -const config = {}; + +/** + * See https://react-native-vision-camera.com/docs/guides/mocking for more information. + */ +const config = { + resolver: { + ...defaultResolver, + sourceExts: [process.env.RN_SRC_EXT && process.env.RN_SRC_EXT.split(','), ...defaultResolver.sourceExts], + }, +}; module.exports = mergeConfig(getDefaultConfig(__dirname), config); diff --git a/package.json b/package.json index 059199c6d..0a5378f38 100644 --- a/package.json +++ b/package.json @@ -43,19 +43,17 @@ "prop-types": "^15.8.1", "randomcolor": "^0.6.2", "react": "18.2.0", - "react-native": "0.73.11", + "react-native": "0.74.0", "react-native-biometrics": "^3.0.1", - "react-native-camera": "^4.2.1", "react-native-device-info": "^11.1.0", "react-native-fs": "^2.20.0", "react-native-gesture-handler": "2.20.0", - "react-native-keychain": "^9.0.0", + "react-native-keychain": "^9.2.2", "react-native-localize": "^3.1.0", "react-native-option-menu": "^1.1.3", "react-native-pager-view": "^6.0.1", "react-native-permissions": "^4.1.5", "react-native-picker-select": "^9.1.3", - "react-native-qrcode-scanner": "^1.5.5", "react-native-qrcode-svg": "^6.3.12", "react-native-reanimated": "3.15.5", "react-native-safe-area-context": "^4.4.1", @@ -65,21 +63,23 @@ "react-native-svg": "^13.7.0", "react-native-svg-charts": "^5.4.0", "react-native-tab-view": "^3.3.0", + "react-native-vision-camera": "^4.6.3", "url-parse": "^1.5.10" }, "devDependencies": { "@babel/core": "^7.20.0", "@babel/preset-env": "^7.20.0", "@babel/runtime": "^7.20.0", - "@react-native/babel-preset": "0.73.21", - "@react-native/eslint-config": "^0.73.2", - "@react-native/metro-config": "^0.73.5", - "@react-native/typescript-config": "0.73.1", + "@react-native/babel-preset": "0.74.81", + "@react-native/eslint-config": "0.74.81", + "@react-native/metro-config": "0.74.81", + "@react-native/typescript-config": "0.74.81", "@testing-library/jest-native": "^5.3.3", "@testing-library/react-native": "^11.5.2", "@tsconfig/react-native": "^3.0.5", "@types/i18n-js": "^3.8.3", "@types/jest": "^29.2.4", + "@types/react-native-keychain": "^3.1.0", "@types/lodash": "^4.14.188", "@types/randomcolor": "^0.5.7", "@types/react": "^18.2.6", diff --git a/patches/react-native-camera+4.2.1.patch b/patches/react-native-camera+4.2.1.patch deleted file mode 100644 index 2884fccb6..000000000 --- a/patches/react-native-camera+4.2.1.patch +++ /dev/null @@ -1,408 +0,0 @@ -diff --git a/node_modules/react-native-camera/android/build.gradle b/node_modules/react-native-camera/android/build.gradle -index 4aed495..b4c0204 100644 ---- a/node_modules/react-native-camera/android/build.gradle -+++ b/node_modules/react-native-camera/android/build.gradle -@@ -23,6 +23,7 @@ buildscript { - apply plugin: 'com.android.library' - - android { -+ namespace "org.reactnative.camera" - compileSdkVersion safeExtGet('compileSdkVersion', 29) - buildToolsVersion safeExtGet('buildToolsVersion', '29.0.2') - -diff --git a/node_modules/react-native-camera/android/build/generated/source/buildConfig/general/debug/Zingo/BuildConfig.java b/node_modules/react-native-camera/android/build/generated/source/buildConfig/general/debug/Zingo/BuildConfig.java -new file mode 100644 -index 0000000..e9b262e ---- /dev/null -+++ b/node_modules/react-native-camera/android/build/generated/source/buildConfig/general/debug/Zingo/BuildConfig.java -@@ -0,0 +1,11 @@ -+/** -+ * Automatically generated file. DO NOT MODIFY -+ */ -+package Zingo; -+ -+public final class BuildConfig { -+ public static final boolean DEBUG = Boolean.parseBoolean("true"); -+ public static final String LIBRARY_PACKAGE_NAME = "Zingo"; -+ public static final String BUILD_TYPE = "debug"; -+ public static final String FLAVOR = "general"; -+} -diff --git a/node_modules/react-native-camera/android/build/intermediates/aar_metadata/generalDebug/aar-metadata.properties b/node_modules/react-native-camera/android/build/intermediates/aar_metadata/generalDebug/aar-metadata.properties -new file mode 100644 -index 0000000..776557e ---- /dev/null -+++ b/node_modules/react-native-camera/android/build/intermediates/aar_metadata/generalDebug/aar-metadata.properties -@@ -0,0 +1,5 @@ -+aarFormatVersion=1.0 -+aarMetadataVersion=1.0 -+minCompileSdk=1 -+minCompileSdkExtension=0 -+minAndroidGradlePluginVersion=1.0.0 -diff --git a/node_modules/react-native-camera/android/build/intermediates/annotation_processor_list/generalDebug/annotationProcessors.json b/node_modules/react-native-camera/android/build/intermediates/annotation_processor_list/generalDebug/annotationProcessors.json -new file mode 100644 -index 0000000..9e26dfe ---- /dev/null -+++ b/node_modules/react-native-camera/android/build/intermediates/annotation_processor_list/generalDebug/annotationProcessors.json -@@ -0,0 +1 @@ -+{} -\ No newline at end of file -diff --git a/node_modules/react-native-camera/android/build/intermediates/compiled_local_resources/generalDebug/out/layout-v14_texture_view.xml.flat b/node_modules/react-native-camera/android/build/intermediates/compiled_local_resources/generalDebug/out/layout-v14_texture_view.xml.flat -new file mode 100644 -index 0000000..7c1bb7f -Binary files /dev/null and b/node_modules/react-native-camera/android/build/intermediates/compiled_local_resources/generalDebug/out/layout-v14_texture_view.xml.flat differ -diff --git a/node_modules/react-native-camera/android/build/intermediates/compiled_local_resources/generalDebug/out/layout_surface_view.xml.flat b/node_modules/react-native-camera/android/build/intermediates/compiled_local_resources/generalDebug/out/layout_surface_view.xml.flat -new file mode 100644 -index 0000000..4766fa0 -Binary files /dev/null and b/node_modules/react-native-camera/android/build/intermediates/compiled_local_resources/generalDebug/out/layout_surface_view.xml.flat differ -diff --git a/node_modules/react-native-camera/android/build/intermediates/incremental/generalDebug/packageGeneralDebugResources/compile-file-map.properties b/node_modules/react-native-camera/android/build/intermediates/incremental/generalDebug/packageGeneralDebugResources/compile-file-map.properties -new file mode 100644 -index 0000000..59f1829 ---- /dev/null -+++ b/node_modules/react-native-camera/android/build/intermediates/incremental/generalDebug/packageGeneralDebugResources/compile-file-map.properties -@@ -0,0 +1,3 @@ -+#Mon May 27 11:26:53 MDT 2024 -+Zingo.react-native-camera-main-8\:/layout-v14/texture_view.xml=C\:\\Users\\juank\\github\\zingo-mobile-juanky\\node_modules\\react-native-camera\\android\\build\\intermediates\\packaged_res\\generalDebug\\layout-v14\\texture_view.xml -+Zingo.react-native-camera-main-8\:/layout/surface_view.xml=C\:\\Users\\juank\\github\\zingo-mobile-juanky\\node_modules\\react-native-camera\\android\\build\\intermediates\\packaged_res\\generalDebug\\layout\\surface_view.xml -diff --git a/node_modules/react-native-camera/android/build/intermediates/incremental/generalDebug/packageGeneralDebugResources/merged.dir/values/values.xml b/node_modules/react-native-camera/android/build/intermediates/incremental/generalDebug/packageGeneralDebugResources/merged.dir/values/values.xml -new file mode 100644 -index 0000000..ee605cf ---- /dev/null -+++ b/node_modules/react-native-camera/android/build/intermediates/incremental/generalDebug/packageGeneralDebugResources/merged.dir/values/values.xml -@@ -0,0 +1,50 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -\ No newline at end of file -diff --git a/node_modules/react-native-camera/android/build/intermediates/incremental/generalDebug/packageGeneralDebugResources/merger.xml b/node_modules/react-native-camera/android/build/intermediates/incremental/generalDebug/packageGeneralDebugResources/merger.xml -new file mode 100644 -index 0000000..11e2463 ---- /dev/null -+++ b/node_modules/react-native-camera/android/build/intermediates/incremental/generalDebug/packageGeneralDebugResources/merger.xml -@@ -0,0 +1,62 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -\ No newline at end of file -diff --git a/node_modules/react-native-camera/android/build/intermediates/incremental/mergeGeneralDebugJniLibFolders/merger.xml b/node_modules/react-native-camera/android/build/intermediates/incremental/mergeGeneralDebugJniLibFolders/merger.xml -new file mode 100644 -index 0000000..77c6bfa ---- /dev/null -+++ b/node_modules/react-native-camera/android/build/intermediates/incremental/mergeGeneralDebugJniLibFolders/merger.xml -@@ -0,0 +1,2 @@ -+ -+ -\ No newline at end of file -diff --git a/node_modules/react-native-camera/android/build/intermediates/incremental/mergeGeneralDebugShaders/merger.xml b/node_modules/react-native-camera/android/build/intermediates/incremental/mergeGeneralDebugShaders/merger.xml -new file mode 100644 -index 0000000..98d0ef6 ---- /dev/null -+++ b/node_modules/react-native-camera/android/build/intermediates/incremental/mergeGeneralDebugShaders/merger.xml -@@ -0,0 +1,2 @@ -+ -+ -\ No newline at end of file -diff --git a/node_modules/react-native-camera/android/build/intermediates/incremental/packageGeneralDebugAssets/merger.xml b/node_modules/react-native-camera/android/build/intermediates/incremental/packageGeneralDebugAssets/merger.xml -new file mode 100644 -index 0000000..dc5b4e2 ---- /dev/null -+++ b/node_modules/react-native-camera/android/build/intermediates/incremental/packageGeneralDebugAssets/merger.xml -@@ -0,0 +1,2 @@ -+ -+ -\ No newline at end of file -diff --git a/node_modules/react-native-camera/android/build/intermediates/local_only_symbol_list/generalDebug/R-def.txt b/node_modules/react-native-camera/android/build/intermediates/local_only_symbol_list/generalDebug/R-def.txt -new file mode 100644 -index 0000000..8a7d807 ---- /dev/null -+++ b/node_modules/react-native-camera/android/build/intermediates/local_only_symbol_list/generalDebug/R-def.txt -@@ -0,0 +1,19 @@ -+R_DEF: Internal format may change without notice -+local -+attr? aspectRatio -+attr? autoFocus -+attr? facing -+attr? flash -+id auto -+id back -+id front -+id off -+id on -+id redEye -+id surface_view -+id texture_view -+id torch -+layout surface_view -+layout texture_view -+style Widget.CameraView -+styleable CameraView android:adjustViewBounds facing aspectRatio autoFocus flash -diff --git a/node_modules/react-native-camera/android/build/intermediates/navigation_json/generalDebug/navigation.json b/node_modules/react-native-camera/android/build/intermediates/navigation_json/generalDebug/navigation.json -new file mode 100644 -index 0000000..0637a08 ---- /dev/null -+++ b/node_modules/react-native-camera/android/build/intermediates/navigation_json/generalDebug/navigation.json -@@ -0,0 +1 @@ -+[] -\ No newline at end of file -diff --git a/node_modules/react-native-camera/android/build/intermediates/packaged_res/generalDebug/layout-v14/texture_view.xml b/node_modules/react-native-camera/android/build/intermediates/packaged_res/generalDebug/layout-v14/texture_view.xml -new file mode 100644 -index 0000000..91953b7 ---- /dev/null -+++ b/node_modules/react-native-camera/android/build/intermediates/packaged_res/generalDebug/layout-v14/texture_view.xml -@@ -0,0 +1,23 @@ -+ -+ -+ -+ -+ -+ -+ -diff --git a/node_modules/react-native-camera/android/build/intermediates/packaged_res/generalDebug/layout/surface_view.xml b/node_modules/react-native-camera/android/build/intermediates/packaged_res/generalDebug/layout/surface_view.xml -new file mode 100644 -index 0000000..4029bb9 ---- /dev/null -+++ b/node_modules/react-native-camera/android/build/intermediates/packaged_res/generalDebug/layout/surface_view.xml -@@ -0,0 +1,23 @@ -+ -+ -+ -+ -+ -+ -+ -diff --git a/node_modules/react-native-camera/android/build/intermediates/packaged_res/generalDebug/values/values.xml b/node_modules/react-native-camera/android/build/intermediates/packaged_res/generalDebug/values/values.xml -new file mode 100644 -index 0000000..ee605cf ---- /dev/null -+++ b/node_modules/react-native-camera/android/build/intermediates/packaged_res/generalDebug/values/values.xml -@@ -0,0 +1,50 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -\ No newline at end of file -diff --git a/node_modules/react-native-camera/android/build/intermediates/public_res/generalDebug/public.txt b/node_modules/react-native-camera/android/build/intermediates/public_res/generalDebug/public.txt -new file mode 100644 -index 0000000..4742c36 ---- /dev/null -+++ b/node_modules/react-native-camera/android/build/intermediates/public_res/generalDebug/public.txt -@@ -0,0 +1,5 @@ -+style Widget_CameraView -+attr aspectRatio -+attr autoFocus -+attr facing -+attr flash -diff --git a/node_modules/react-native-camera/android/src/main/AndroidManifest.xml b/node_modules/react-native-camera/android/src/main/AndroidManifest.xml -index fe6303a..29818d4 100644 ---- a/node_modules/react-native-camera/android/src/main/AndroidManifest.xml -+++ b/node_modules/react-native-camera/android/src/main/AndroidManifest.xml -@@ -1,4 +1,4 @@ -- -+ - - - -diff --git a/node_modules/react-native-camera/src/RNCamera.js b/node_modules/react-native-camera/src/RNCamera.js -index b7a271a..326caf2 100644 ---- a/node_modules/react-native-camera/src/RNCamera.js -+++ b/node_modules/react-native-camera/src/RNCamera.js -@@ -5,7 +5,7 @@ import { - findNodeHandle, - Platform, - NativeModules, -- ViewPropTypes, -+ // ViewPropTypes, - requireNativeComponent, - View, - ActivityIndicator, -@@ -13,6 +13,7 @@ import { - StyleSheet, - PermissionsAndroid, - } from 'react-native'; -+import { ViewPropTypes } from 'deprecated-react-native-prop-types'; - - import type { FaceFeature } from './FaceDetector'; - diff --git a/patches/react-native-vision-camera+4.6.3.patch b/patches/react-native-vision-camera+4.6.3.patch new file mode 100644 index 000000000..2585bd768 --- /dev/null +++ b/patches/react-native-vision-camera+4.6.3.patch @@ -0,0 +1,84 @@ +diff --git a/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/core/CameraSession.kt b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/core/CameraSession.kt +index 862c03a..740531d 100644 +--- a/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/core/CameraSession.kt ++++ b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/core/CameraSession.kt +@@ -103,7 +103,13 @@ class CameraSession(internal val context: Context, internal val callback: Callba + } + Log.i(TAG, "configure { ... }: Waiting for lock...") + +- val provider = cameraProvider.await(mainExecutor) ++ val provider = try { ++ cameraProvider.await(mainExecutor) ++ } catch (error: Throwable) { ++ Log.e(TAG, "Failed to get CameraProvider! Error: ${error.message}", error) ++ callback.onError(error) ++ return ++ } + + mutex.withLock { + // Let caller configure a new configuration for the Camera. +diff --git a/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/core/CameraSession.kt.rej b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/core/CameraSession.kt.rej +new file mode 100644 +index 0000000..3b9de40 +--- /dev/null ++++ b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/core/CameraSession.kt.rej +@@ -0,0 +1,17 @@ ++--- node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/core/CameraSession.kt +++++ node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/core/CameraSession.kt ++@@ -103,7 +103,13 @@ class CameraSession(internal val context: Context, internal val callback: Callba ++ } ++ Log.i(TAG, "configure { ... }: Waiting for lock...") ++ ++- val provider = cameraProvider.await(mainExecutor) +++ val provider = try { +++ cameraProvider.await(mainExecutor) +++ } catch (error: Throwable) { +++ Log.e(TAG, "Failed to get CameraProvider! Error: ${error.message}", error) +++ callback.onError(error) +++ return +++ } ++ ++ mutex.withLock { ++ // Let caller configure a new configuration for the Camera. +diff --git a/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/react/CameraDevicesManager.kt b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/react/CameraDevicesManager.kt +index 581d003..c8a7f94 100644 +--- a/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/react/CameraDevicesManager.kt ++++ b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/react/CameraDevicesManager.kt +@@ -64,7 +64,13 @@ class CameraDevicesManager(private val reactContext: ReactApplicationContext) : + cameraManager.registerAvailabilityCallback(callback, null) + coroutineScope.launch { + Log.i(TAG, "Initializing ProcessCameraProvider...") +- cameraProvider = ProcessCameraProvider.getInstance(reactContext).await(executor) ++ cameraProvider = try { ++ ProcessCameraProvider.getInstance(reactContext).await(executor) ++ } catch (error: Throwable) { ++ Log.e(TAG, "Failed to get CameraProvider! Error: ${error.message}", error) ++ sendAvailableDevicesChangedEvent() ++ return@launch ++ } + Log.i(TAG, "Initializing ExtensionsManager...") + extensionsManager = ExtensionsManager.getInstanceAsync(reactContext, cameraProvider!!).await(executor) + Log.i(TAG, "Successfully initialized!") +diff --git a/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/react/CameraDevicesManager.kt.rej b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/react/CameraDevicesManager.kt.rej +new file mode 100644 +index 0000000..e6121c9 +--- /dev/null ++++ b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/react/CameraDevicesManager.kt.rej +@@ -0,0 +1,17 @@ ++--- node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/react/CameraDevicesManager.kt +++++ node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/react/CameraDevicesManager.kt ++@@ -64,7 +64,13 @@ class CameraDevicesManager(private val reactContext: ReactApplicationContext) : ++ cameraManager.registerAvailabilityCallback(callback, null) ++ coroutineScope.launch { ++ Log.i(TAG, "Initializing ProcessCameraProvider...") ++- cameraProvider = ProcessCameraProvider.getInstance(reactContext).await(executor) +++ cameraProvider = try { +++ ProcessCameraProvider.getInstance(reactContext).await(executor) +++ } catch (error: Throwable) { +++ Log.e(TAG, "Failed to get CameraProvider! Error: ${error.message}", error) +++ sendAvailableDevicesChangedEvent() +++ return@launch +++ } ++ Log.i(TAG, "Initializing ExtensionsManager...") ++ extensionsManager = ExtensionsManager.getInstanceAsync(reactContext, cameraProvider!!).await(executor) ++ Log.i(TAG, "Successfully initialized!")