diff --git a/ios/DeveloperApp/Info.plist b/ios/DeveloperApp/Info.plist index c1da527..78360bb 100644 --- a/ios/DeveloperApp/Info.plist +++ b/ios/DeveloperApp/Info.plist @@ -86,7 +86,7 @@ NSPhotoLibraryUsageDescription To use that feature the app needs access to your photo library. Native Binary Version - 8 + 9 NativeOTAEnabled ReferenceGuideUrl diff --git a/ios/Podfile.lock b/ios/Podfile.lock index de3dcb0..25b8018 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -182,6 +182,12 @@ PODS: - nanopb/encode (= 2.30909.1) - nanopb/decode (2.30909.1) - nanopb/encode (2.30909.1) + - op-sqlite (9.1.2): + - OpenSSL-Universal + - React + - React-callinvoker + - React-Core + - OpenSSL-Universal (3.3.2000) - PromisesObjC (2.4.0) - QRCodeReader.swift (10.1.0) - RCT-Folly (2024.01.01.00): @@ -1472,9 +1478,6 @@ PODS: - React-Core - react-native-splash-screen (3.2.0): - React - - react-native-sqlite-storage (7.1.0): - - React-Core - - SQLCipher - react-native-video (6.4.5): - DoubleConversion - glog @@ -1909,11 +1912,6 @@ PODS: - libwebp (~> 1.0) - SDWebImage/Core (~> 5.10) - SocketRocket (0.7.0) - - SQLCipher (4.6.1): - - SQLCipher/standard (= 4.6.1) - - SQLCipher/common (4.6.1) - - SQLCipher/standard (4.6.1): - - SQLCipher/common - SSZipArchive (2.4.3) - TouchID (4.4.1): - React @@ -1933,6 +1931,7 @@ DEPENDENCIES: - GoogleUtilities - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - IQKeyboardManager + - "op-sqlite (from `../node_modules/@op-engineering/op-sqlite`)" - QRCodeReader.swift (~> 10.1.0) - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) @@ -1980,7 +1979,6 @@ DEPENDENCIES: - react-native-pager-view (from `../node_modules/react-native-pager-view`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - react-native-splash-screen (from `../node_modules/react-native-splash-screen`) - - "react-native-sqlite-storage (from `../node_modules/@mendix/react-native-sqlite-storage`)" - react-native-video (from `../node_modules/react-native-video`) - react-native-view-shot (from `../node_modules/react-native-view-shot`) - react-native-webview (from `../node_modules/react-native-webview`) @@ -2057,12 +2055,12 @@ SPEC REPOS: - libwebp - MultiplatformBleAdapter - nanopb + - OpenSSL-Universal - PromisesObjC - QRCodeReader.swift - SDWebImage - SDWebImageWebPCoder - SocketRocket - - SQLCipher - SSZipArchive EXTERNAL SOURCES: @@ -2081,6 +2079,8 @@ EXTERNAL SOURCES: hermes-engine: :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" :tag: hermes-2024-08-15-RNv0.75.1-4b3bf912cc0f705b51b71ce1a5b8bd79b93a451b + op-sqlite: + :path: "../node_modules/@op-engineering/op-sqlite" RCT-Folly: :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTDeprecation: @@ -2169,8 +2169,6 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-safe-area-context" react-native-splash-screen: :path: "../node_modules/react-native-splash-screen" - react-native-sqlite-storage: - :path: "../node_modules/@mendix/react-native-sqlite-storage" react-native-video: :path: "../node_modules/react-native-video" react-native-view-shot: @@ -2307,6 +2305,8 @@ SPEC CHECKSUMS: libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009 MultiplatformBleAdapter: 5a6a897b006764392f9cef785e4360f54fb9477d nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5 + op-sqlite: ea5fd8301f488c7544281b3f85f257d520172049 + OpenSSL-Universal: b60a3702c9fea8b3145549d421fdb018e53ab7b4 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 QRCodeReader.swift: 373a389fe9a22d513c879a32a6f647c58f4ef572 RCT-Folly: 4464f4d875961fce86008d45f4ecf6cef6de0740 @@ -2353,7 +2353,6 @@ SPEC CHECKSUMS: react-native-pager-view: c476f76d54f946df5147645e902d3d7173688187 react-native-safe-area-context: 851c62c48dce80ccaa5637b6aa5991a1bc36eca9 react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865 - react-native-sqlite-storage: 7697e1df2125d556c58de9d9764549195b25afcf react-native-video: b0057ead963adc4b3b0d0936626bbcc18f5f9f00 react-native-view-shot: 4475fde003fe8a210053d1f98fb9e06c1d834e1c react-native-webview: 9f111dfbcfc826084d6c507f569e5e03342ee1c1 @@ -2410,10 +2409,9 @@ SPEC CHECKSUMS: SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d - SQLCipher: 77fbe633cd84db04b07876dd50766b4924b57d61 SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef TouchID: ba4c656d849cceabc2e4eef722dea5e55959ecf4 - Yoga: aa3df615739504eebb91925fc9c58b4922ea9a08 + Yoga: 055f92ad73f8c8600a93f0e25ac0b2344c3b07e6 PODFILE CHECKSUM: fb4e6bff4732388e5d912d6494c81cbf7e12d31c diff --git a/ios/developerapp.xcodeproj/project.pbxproj b/ios/developerapp.xcodeproj/project.pbxproj index 55edb38..1c3a110 100644 --- a/ios/developerapp.xcodeproj/project.pbxproj +++ b/ios/developerapp.xcodeproj/project.pbxproj @@ -469,7 +469,7 @@ 13B07F8E1A680F5B00A75B9A /* Resources */, DF17395E25B4582800B65592 /* Embed Frameworks */, C172FBA7B7AE84E7986F03ED /* [CP] Copy Pods Resources */, - E824638682A9BB3DDC1FA05C /* [CP] Embed Pods Frameworks */, + 640967B95A03B5199E113383 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -580,6 +580,26 @@ 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; }; + 640967B95A03B5199E113383 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Mendix-DeveloperApp/Pods-Mendix-DeveloperApp-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Mendix-DeveloperApp/Pods-Mendix-DeveloperApp-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; C172FBA7B7AE84E7986F03ED /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -620,7 +640,6 @@ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/SQLCipher/SQLCipher.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/glog/glog_privacy.bundle", ); @@ -658,7 +677,6 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SQLCipher.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/glog_privacy.bundle", ); @@ -667,24 +685,6 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Mendix-DeveloperApp/Pods-Mendix-DeveloperApp-resources.sh\"\n"; showEnvVarsInLog = 0; }; - E824638682A9BB3DDC1FA05C /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Mendix-DeveloperApp/Pods-Mendix-DeveloperApp-frameworks.sh", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Mendix-DeveloperApp/Pods-Mendix-DeveloperApp-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/package-lock.json b/package-lock.json index 53c5966..d3b6ab5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,8 +14,8 @@ "@babylonjs/loaders": "6.8.1", "@babylonjs/react-native": "1.6.3", "@babylonjs/react-native-iosandroid-0-71": "1.6.3", - "@mendix/native": "6.0.1", - "@mendix/react-native-sqlite-storage": "^7.1.0", + "@mendix/native": "7.0.0", + "@op-engineering/op-sqlite": "9.1.2", "@react-native-async-storage/async-storage": "2.0.0", "@react-native-community/art": "1.2.0", "@react-native-community/cameraroll": "4.0.1", @@ -1596,17 +1596,9 @@ } }, "node_modules/@mendix/native": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@mendix/native/-/native-6.0.1.tgz", - "integrity": "sha512-u5XfDMfqjf6v9OPITxA6lv/T7Le2ptBkMOQXAOFR4x/lhkP42CrZdUyWvpGhYFi/f4oaNXbgOZgOiKTU+KsV5Q==" - }, - "node_modules/@mendix/react-native-sqlite-storage": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@mendix/react-native-sqlite-storage/-/react-native-sqlite-storage-7.1.0.tgz", - "integrity": "sha512-DWPPaKJYsE4a6VEJgXNG26tZiY6tY+fMcQsjwVjTuya15ve1EI8baBUqBgvgNtLBeW/Bfr+RUNAMxRHPQx8fvQ==", - "peerDependencies": { - "react-native": ">=0.14.0" - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@mendix/native/-/native-7.0.0.tgz", + "integrity": "sha512-JyRtdGknmlEHCZh5VnIHZa6Dm8GD6MjB++jlWBMktMZHUSM6PSUXxFfatpv1/1aQO2HhOr1bRxibiQELzcgJNg==" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", @@ -1640,10 +1632,20 @@ "node": ">= 8" } }, + "node_modules/@op-engineering/op-sqlite": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@op-engineering/op-sqlite/-/op-sqlite-9.1.2.tgz", + "integrity": "sha512-u6VhzuZO+pbA71OuIMQl7jsJXSPSmimStdvI6a5SXsqCr32L5Sh6TxRdmO1ISepdvceMIWcoTxrdD3bDp6qAbA==", + "peerDependencies": { + "react": "*", + "react-native": ">0.73.0" + } + }, "node_modules/@react-native-async-storage/async-storage": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-2.0.0.tgz", "integrity": "sha512-af6H9JjfL6G/PktBfUivvexoiFKQTJGQCtSWxMdivLzNIY94mu9DdiY0JqCSg/LyPCLGKhHPUlRQhNvpu3/KVA==", + "license": "MIT", "dependencies": { "merge-options": "^3.0.4" }, @@ -9717,14 +9719,9 @@ } }, "@mendix/native": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@mendix/native/-/native-6.0.1.tgz", - "integrity": "sha512-u5XfDMfqjf6v9OPITxA6lv/T7Le2ptBkMOQXAOFR4x/lhkP42CrZdUyWvpGhYFi/f4oaNXbgOZgOiKTU+KsV5Q==" - }, - "@mendix/react-native-sqlite-storage": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@mendix/react-native-sqlite-storage/-/react-native-sqlite-storage-7.1.0.tgz", - "integrity": "sha512-DWPPaKJYsE4a6VEJgXNG26tZiY6tY+fMcQsjwVjTuya15ve1EI8baBUqBgvgNtLBeW/Bfr+RUNAMxRHPQx8fvQ==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@mendix/native/-/native-7.0.0.tgz", + "integrity": "sha512-JyRtdGknmlEHCZh5VnIHZa6Dm8GD6MjB++jlWBMktMZHUSM6PSUXxFfatpv1/1aQO2HhOr1bRxibiQELzcgJNg==" }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -9749,6 +9746,11 @@ "fastq": "^1.6.0" } }, + "@op-engineering/op-sqlite": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@op-engineering/op-sqlite/-/op-sqlite-9.1.2.tgz", + "integrity": "sha512-u6VhzuZO+pbA71OuIMQl7jsJXSPSmimStdvI6a5SXsqCr32L5Sh6TxRdmO1ISepdvceMIWcoTxrdD3bDp6qAbA==" + }, "@react-native-async-storage/async-storage": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-2.0.0.tgz", diff --git a/package.json b/package.json index 54b7acf..3aa37fb 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,8 @@ "@babylonjs/loaders": "6.8.1", "@babylonjs/react-native": "1.6.3", "@babylonjs/react-native-iosandroid-0-71": "1.6.3", - "@mendix/native": "6.0.1", - "@mendix/react-native-sqlite-storage": "^7.1.0", + "@mendix/native": "7.0.0", + "@op-engineering/op-sqlite": "9.1.2", "@react-native-community/art": "1.2.0", "@react-native-async-storage/async-storage": "2.0.0", "@react-native-community/datetimepicker": "8.2.0", diff --git a/patches/@op-engineering+op-sqlite+9.1.2.patch b/patches/@op-engineering+op-sqlite+9.1.2.patch new file mode 100644 index 0000000..36765ea --- /dev/null +++ b/patches/@op-engineering+op-sqlite+9.1.2.patch @@ -0,0 +1,127 @@ +diff --git a/node_modules/@op-engineering/op-sqlite/android/build.gradle b/node_modules/@op-engineering/op-sqlite/android/build.gradle +index 4186aa3..242dd95 100644 +--- a/node_modules/@op-engineering/op-sqlite/android/build.gradle ++++ b/node_modules/@op-engineering/op-sqlite/android/build.gradle +@@ -1,5 +1,4 @@ + import java.nio.file.Paths +-import groovy.json.JsonSlurper + + buildscript { + repositories { +@@ -27,28 +26,14 @@ def isNewArchitectureEnabled() { + return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" + } + +-def useSQLCipher = false ++def useSQLCipher = true + def useLibsql = false + def useCRSQLite = false +-def performanceMode = "0" ++def performanceMode = "2" + def sqliteFlags = "" + def enableFTS5 = false + def useSqliteVec = false + +-def packageJsonFile = new File("$rootDir/../package.json") +-def packageJson = new JsonSlurper().parseText(packageJsonFile.text) +- +-def opsqliteConfig = packageJson["op-sqlite"] +-if(opsqliteConfig) { +- useSQLCipher = opsqliteConfig["sqlcipher"] +- useCRSQLite = opsqliteConfig["crsqlite"] +- useSqliteVec = opsqliteConfig["sqliteVec"] +- performanceMode = opsqliteConfig["performanceMode"] ? opsqliteConfig["performanceMode"] : "" +- sqliteFlags = opsqliteConfig["sqliteFlags"] ? opsqliteConfig["sqliteFlags"] : "" +- enableFTS5 = opsqliteConfig["fts5"] +- useLibsql = opsqliteConfig["libsql"] +-} +- + if(useSQLCipher) { + println "[OP-SQLITE] using SQLCipher 🔒" + } else if(useLibsql) { +@@ -171,8 +156,8 @@ android { + } + + compileOptions { +- sourceCompatibility JavaVersion.VERSION_1_8 +- targetCompatibility JavaVersion.VERSION_1_8 ++ sourceCompatibility JavaVersion.VERSION_17 ++ targetCompatibility JavaVersion.VERSION_17 + } + + externalNativeBuild { +diff --git a/node_modules/@op-engineering/op-sqlite/android/src/main/java/com/op/sqlite/OPSQLiteBridge.kt b/node_modules/@op-engineering/op-sqlite/android/src/main/java/com/op/sqlite/OPSQLiteBridge.kt +index 7445a4c..2d922aa 100644 +--- a/node_modules/@op-engineering/op-sqlite/android/src/main/java/com/op/sqlite/OPSQLiteBridge.kt ++++ b/node_modules/@op-engineering/op-sqlite/android/src/main/java/com/op/sqlite/OPSQLiteBridge.kt +@@ -2,9 +2,7 @@ package com.op.sqlite + + import com.facebook.react.bridge.ReactContext + import com.facebook.react.turbomodule.core.CallInvokerHolderImpl +-import com.facebook.react.common.annotations.FrameworkAPI + +-@OptIn(FrameworkAPI::class) + class OPSQLiteBridge { + private external fun installNativeJsi( + jsContextNativePointer: Long, +diff --git a/node_modules/@op-engineering/op-sqlite/cpp/bindings.cpp b/node_modules/@op-engineering/op-sqlite/cpp/bindings.cpp +index f5a3c48..512deaa 100644 +--- a/node_modules/@op-engineering/op-sqlite/cpp/bindings.cpp ++++ b/node_modules/@op-engineering/op-sqlite/cpp/bindings.cpp +@@ -68,13 +68,6 @@ void install(jsi::Runtime &rt, std::shared_ptr invoker, + options.getProperty(rt, "encryptionKey").asString(rt).utf8(rt); + } + +-#ifdef OP_SQLITE_USE_SQLCIPHER +- if (encryptionKey.empty()) { +- throw std::runtime_error( +- "[OP SQLite] using SQLCipher encryption key is required"); +- } +-#endif +- + if (!location.empty()) { + if (location == ":memory:") { + path = ":memory:"; +diff --git a/node_modules/@op-engineering/op-sqlite/op-sqlite.podspec b/node_modules/@op-engineering/op-sqlite/op-sqlite.podspec +index ee168c4..103e3bf 100644 +--- a/node_modules/@op-engineering/op-sqlite/op-sqlite.podspec ++++ b/node_modules/@op-engineering/op-sqlite/op-sqlite.podspec +@@ -9,36 +9,16 @@ folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 + fabric_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1' + + parent_folder_name = File.basename(__dir__) +-app_package = nil +-# for development purposes on user machines the podspec should be able to read the package.json from the root folder +-# since it lives inside node_modules/@op-engineering/op-sqlite +-if __dir__.include?("node_modules") +- app_package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "package.json"))) +-else +- app_package = JSON.parse(File.read(File.join(__dir__, "example", "package.json"))) +-end + +-op_sqlite_config = app_package["op-sqlite"] +-use_sqlcipher = false ++use_sqlcipher = true + use_crsqlite = false + use_libsql = false +-performance_mode = "0" ++performance_mode = "2" + phone_version = false + sqlite_flags = "" + fts5 = false + use_sqlite_vec = false + +-if(op_sqlite_config != nil) +- use_sqlcipher = op_sqlite_config["sqlcipher"] == true +- use_crsqlite = op_sqlite_config["crsqlite"] == true +- use_libsql = op_sqlite_config["libsql"] == true +- performance_mode = op_sqlite_config["performanceMode"] || "0" +- phone_version = op_sqlite_config["iosSqlite"] == true +- sqlite_flags = op_sqlite_config["sqliteFlags"] || "" +- fts5 = op_sqlite_config["fts5"] == true +- use_sqlite_vec = op_sqlite_config["sqliteVec"] == true +-end +- + if phone_version && use_sqlcipher + raise "Cannot use phone embedded version and SQLCipher. SQLCipher needs to be compiled from sources with the project." + end