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!")