diff --git a/CHANGELOG.md b/CHANGELOG.md
index 80d992df10a..9d06dd43cd1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@
- added: `chooseCaip19Asset` EdgeProvider API for precise wallet selection using CAIP-19 identifiers
- added: Pass OS and app version details to core context for v2/coreRollup endpoint
- changed: Append chain names to token codes in RampCreateScene
+- fixed: iOS simulator builds for XCode 26
## 4.42.0 (staging)
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 33e6b4cb839..4b5e0c6e9a9 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -92,6 +92,9 @@
+
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index 806da384537..357f6892450 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -1,3 +1,7 @@
Edge
+ Contact Support
+ Contact support for help from a live agent
+ ⚠️ Don\'t Uninstall!
+ ⚠️ Uninstall removes all account data from device!
diff --git a/android/app/src/main/res/xml/shortcuts.xml b/android/app/src/main/res/xml/shortcuts.xml
new file mode 100644
index 00000000000..8a2e8921c61
--- /dev/null
+++ b/android/app/src/main/res/xml/shortcuts.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
diff --git a/ios/Podfile b/ios/Podfile
index 5a8846ce969..322745286c0 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -60,6 +60,14 @@ target 'edge' do
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = ios_platform_version
+
+ # Xcode 17+ / iOS 26 SDK workaround: Re-enable std::allocator
+ # which was removed for stricter C++ standard compliance.
+ # See: https://github.com/getsentry/sentry-cocoa/issues/5172
+ existing_defs = config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] || ['$(inherited)']
+ unless existing_defs.include?('_LIBCPP_ENABLE_REMOVED_ALLOCATOR_CONST=1')
+ config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = existing_defs + ['_LIBCPP_ENABLE_REMOVED_ALLOCATOR_CONST=1']
+ end
end
end
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 7c8c02d3230..5bc7d1033ef 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -98,7 +98,7 @@ PODS:
- FirebaseCoreInternal (~> 10.0)
- GoogleUtilities/Environment (~> 7.12)
- GoogleUtilities/Logger (~> 7.12)
- - FirebaseCoreExtension (10.27.0):
+ - FirebaseCoreExtension (10.29.0):
- FirebaseCore (~> 10.0)
- FirebaseCoreInternal (10.29.0):
- "GoogleUtilities/NSData+zlib (~> 7.8)"
@@ -161,17 +161,17 @@ PODS:
- hermes-engine/Pre-built (0.79.2)
- ImageColors (2.4.0):
- ExpoModulesCore
- - libwebp (1.3.2):
- - libwebp/demux (= 1.3.2)
- - libwebp/mux (= 1.3.2)
- - libwebp/sharpyuv (= 1.3.2)
- - libwebp/webp (= 1.3.2)
- - libwebp/demux (1.3.2):
+ - libwebp (1.5.0):
+ - libwebp/demux (= 1.5.0)
+ - libwebp/mux (= 1.5.0)
+ - libwebp/sharpyuv (= 1.5.0)
+ - libwebp/webp (= 1.5.0)
+ - libwebp/demux (1.5.0):
- libwebp/webp
- - libwebp/mux (1.3.2):
+ - libwebp/mux (1.5.0):
- libwebp/demux
- - libwebp/sharpyuv (1.3.2)
- - libwebp/webp (1.3.2):
+ - libwebp/sharpyuv (1.5.0)
+ - libwebp/webp (1.5.0):
- libwebp/sharpyuv
- Logging (1.4.0)
- MnemonicSwift (2.2.4)
@@ -180,7 +180,7 @@ PODS:
- nanopb/encode (= 2.30910.0)
- nanopb/decode (2.30910.0)
- nanopb/encode (2.30910.0)
- - OpenSSL-Universal (3.3.3000)
+ - OpenSSL-Universal (3.3.3001)
- PromisesObjC (2.4.0)
- RCT-Folly (2024.11.18.00):
- boost
@@ -2726,11 +2726,11 @@ PODS:
- SDWebImage/Core (~> 5.10)
- Sentry/HybridSDK (8.56.2)
- SocketRocket (0.7.1)
- - SQLite.swift/standalone (0.15.3):
+ - SQLite.swift/standalone (0.15.4):
- sqlite3
- - "sqlite3 (3.46.0+1)":
- - "sqlite3/common (= 3.46.0+1)"
- - "sqlite3/common (3.46.0+1)"
+ - sqlite3 (3.51.1):
+ - sqlite3/common (= 3.51.1)
+ - sqlite3/common (3.51.1)
- SwiftNIO (2.40.0):
- _NIODataStructures (= 2.40.0)
- CNIOAtomics (= 2.40.0)
@@ -2861,7 +2861,7 @@ PODS:
- SwiftNIOFoundationCompat (< 3, >= 2.32.0)
- SwiftNIOPosix (< 3, >= 2.32.0)
- SwiftNIOTLS (< 3, >= 2.32.0)
- - SwiftProtobuf (1.26.0)
+ - SwiftProtobuf (1.33.3)
- VisionCamera (4.7.2):
- VisionCamera/Core (= 4.7.2)
- VisionCamera/React (= 4.7.2)
@@ -2869,7 +2869,7 @@ PODS:
- VisionCamera/React (4.7.2):
- React-Core
- Yoga (0.0.0)
- - ZIPFoundation (0.9.11)
+ - ZIPFoundation (0.9.20)
- ZXingObjC (3.6.9):
- ZXingObjC/All (= 3.6.9)
- ZXingObjC/All (3.6.9)
@@ -3354,7 +3354,7 @@ SPEC CHECKSUMS:
FBLazyVector: 84b955f7b4da8b895faf5946f73748267347c975
Firebase: cec914dab6fd7b1bd8ab56ea07ce4e03dd251c2d
FirebaseCore: 30e9c1cbe3d38f5f5e75f48bfcea87d7c358ec16
- FirebaseCoreExtension: 4ec89dd0c6de93d6becde32122d68b7c35f6bf5d
+ FirebaseCoreExtension: 705ca5b14bf71d2564a0ddc677df1fc86ffa600f
FirebaseCoreInternal: df84dd300b561c27d5571684f389bf60b0a5c934
FirebaseInstallations: 913cf60d0400ebd5d6b63a28b290372ab44590dd
FirebaseMessaging: 7b5d8033e183ab59eb5b852a53201559e976d366
@@ -3365,11 +3365,11 @@ SPEC CHECKSUMS:
gRPC-Swift: 74adcaaa62ac5e0a018938840328cb1fdfb09e7b
hermes-engine: 314be5250afa5692b57b4dd1705959e1973a8ebe
ImageColors: 869f48b27ca2afb347fd0bada3257a5f698ee55e
- libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009
+ libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8
Logging: beeb016c9c80cf77042d62e83495816847ef108b
MnemonicSwift: 40ba76b951b75b32e2719df989b4d6da5798fe26
nanopb: 438bc412db1928dac798aa6fd75726007be04262
- OpenSSL-Universal: d776ce24dab24323e6995dfb17c64d598885d05c
+ OpenSSL-Universal: 6082b0bf950e5636fe0d78def171184e2b3899c2
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82
RCTDeprecation: 83ffb90c23ee5cea353bd32008a7bca100908f8c
@@ -3483,8 +3483,8 @@ SPEC CHECKSUMS:
SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d
Sentry: b53951377b78e21a734f5dc8318e333dbfc682d7
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
- SQLite.swift: 8d054987f02728cc912b0eb5a9659650573a65a2
- sqlite3: 292c3e1bfe89f64e51ea7fc7dab9182a017c8630
+ SQLite.swift: a107c734115fea616a4ad31371d39f1637e8de56
+ sqlite3: 8d708bc63e9f4ce48f0ad9d6269e478c5ced1d9b
SwiftNIO: 829958aab300642625091f82fc2f49cb7cf4ef24
SwiftNIOConcurrencyHelpers: 697370136789b1074e4535eaae75cbd7f900370e
SwiftNIOCore: 473fdfe746534d7aa25766916459eeaf6f92ef49
@@ -3498,12 +3498,12 @@ SPEC CHECKSUMS:
SwiftNIOSSL: d153c5a6fc5b2301b0519b4c4d037a9414212da6
SwiftNIOTLS: 598af547490133e9aac52aed0c23c4a90c31dcfc
SwiftNIOTransportServices: 0b2b407819d82eb63af558c5396e33c945759503
- SwiftProtobuf: 5e8349171e7c2f88f5b9e683cb3cb79d1dc780b3
+ SwiftProtobuf: e1b437c8e31a4c5577b643249a0bb62ed4f02153
VisionCamera: 30b358b807324c692064f78385e9a732ce1bebfe
Yoga: 50518ade05048235d91a78b803336dbb5b159d5d
- ZIPFoundation: b1f0de4eed33e74a676f76e12559ab6b75990197
+ ZIPFoundation: dfd3d681c4053ff7e2f7350bc4e53b5dba3f5351
ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5
-PODFILE CHECKSUM: 8c119d1d2fda8d2ceda1c186a5415d0c7473469a
+PODFILE CHECKSUM: ffc45b7c82f76539837854e7add5bc6ad74ef0b6
COCOAPODS: 1.16.2
diff --git a/ios/edge/AppDelegate.swift b/ios/edge/AppDelegate.swift
index 9483d70d2ba..5e01fe2e3e5 100644
--- a/ios/edge/AppDelegate.swift
+++ b/ios/edge/AppDelegate.swift
@@ -11,6 +11,7 @@ import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var securityView: UIView?
+ private var pendingShortcutItem: UIApplicationShortcutItem?
var reactNativeDelegate: ReactNativeDelegate?
var reactNativeFactory: RCTReactNativeFactory?
@@ -49,6 +50,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
) -> Bool {
+ if let shortcutItem = launchOptions?[.shortcutItem] as? UIApplicationShortcutItem {
+ pendingShortcutItem = shortcutItem
+ }
+
// Initialize SDK's:
initializeSentry()
FirebaseApp.configure()
@@ -72,9 +77,35 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
launchOptions: launchOptions
)
+ if let shortcutItem = pendingShortcutItem {
+ _ = handleShortcutItem(shortcutItem)
+ pendingShortcutItem = nil
+ }
+
return true
}
+ func application(
+ _ application: UIApplication,
+ performActionFor shortcutItem: UIApplicationShortcutItem,
+ completionHandler: @escaping (Bool) -> Void
+ ) {
+ let handled = handleShortcutItem(shortcutItem)
+ completionHandler(handled)
+ }
+
+ private func handleShortcutItem(_ shortcutItem: UIApplicationShortcutItem) -> Bool {
+ guard let url = URL(string: shortcutItem.type) else { return false }
+
+ // Open https/http URLs in the default browser, otherwise handle as deep link
+ if url.scheme == "https" || url.scheme == "http" {
+ UIApplication.shared.open(url)
+ return true
+ }
+
+ return RCTLinkingManager.application(UIApplication.shared, open: url, options: [:])
+ }
+
/**
* Periodic background fetch logic.
* Edge addition.
diff --git a/ios/edge/Info.plist b/ios/edge/Info.plist
index 2a9afea9725..b48bc94f4ed 100644
--- a/ios/edge/Info.plist
+++ b/ios/edge/Info.plist
@@ -57,6 +57,29 @@
CFBundleVersion
99999999
+ UIApplicationShortcutItems
+
+
+ UIApplicationShortcutItemTitle
+ ⚠️ Do Not Uninstall!
+ UIApplicationShortcutItemSubtitle
+ This will remove all your data from this device!
+ UIApplicationShortcutItemIconSymbolName
+ nosign
+ UIApplicationShortcutItemType
+ https://support.edge.app/hc/en-us/articles/24469866252443-Getting-a-new-phone
+
+
+ UIApplicationShortcutItemTitle
+ Contact Support
+ UIApplicationShortcutItemSubtitle
+ Get help from our live support agents
+ UIApplicationShortcutItemIconSymbolName
+ message.fill
+ UIApplicationShortcutItemType
+ https://support.edge.app/hc/en-us?chat=open
+
+
LSApplicationQueriesSchemes
https
diff --git a/patches/react-native-mymonero-core+0.3.4.patch b/patches/react-native-mymonero-core+0.3.4.patch
new file mode 100644
index 00000000000..c9d5cb33c81
--- /dev/null
+++ b/patches/react-native-mymonero-core+0.3.4.patch
@@ -0,0 +1,234 @@
+diff --git a/node_modules/react-native-mymonero-core/android/src/main/cpp/jni.cpp b/node_modules/react-native-mymonero-core/android/src/main/cpp/jni.cpp
+index dc077d2..ff55588 100644
+--- a/node_modules/react-native-mymonero-core/android/src/main/cpp/jni.cpp
++++ b/node_modules/react-native-mymonero-core/android/src/main/cpp/jni.cpp
+@@ -23,7 +23,7 @@ Java_app_edge_reactnative_mymonerocore_MyMoneroModule_callMyMoneroJNI(
+
+ // Re-package the arguments:
+ jsize length = env->GetArrayLength(arguments);
+- std::vector strings;
++ std::vector strings;
+ strings.reserve(length);
+ for (jsize i = 0; i < length; ++i) {
+ jstring string = (jstring)env->GetObjectArrayElement(arguments, i);
+diff --git a/node_modules/react-native-mymonero-core/android/src/main/cpp/mymonero-wrapper/mymonero-methods.cpp b/node_modules/react-native-mymonero-core/android/src/main/cpp/mymonero-wrapper/mymonero-methods.cpp
+index 7d2f4e0..1a09b06 100644
+--- a/node_modules/react-native-mymonero-core/android/src/main/cpp/mymonero-wrapper/mymonero-methods.cpp
++++ b/node_modules/react-native-mymonero-core/android/src/main/cpp/mymonero-wrapper/mymonero-methods.cpp
+@@ -2,27 +2,27 @@
+ #include "../mymonero-core-cpp/src/serial_bridge_index.hpp"
+ #include "../mymonero-utils/packages/mymonero-monero-client/src/emscr_SendFunds_bridge.hpp"
+
+-std::string addressAndKeysFromSeed(const std::vector &args) {
++std::string addressAndKeysFromSeed(const std::vector &args) {
+ return serial_bridge::address_and_keys_from_seed(args[0], args[1]);
+ }
+
+-std::string compareMnemonics(const std::vector &args) {
++std::string compareMnemonics(const std::vector &args) {
+ return serial_bridge::are_equal_mnemonics(args[0], args[1]) ? "t" : "";
+ }
+
+-std::string createAndSignTx(const std::vector &args) {
++std::string createAndSignTx(const std::vector &args) {
+ return emscr_SendFunds_bridge::send_funds(args[0]);
+ }
+
+-std::string decodeAddress(const std::vector &args) {
++std::string decodeAddress(const std::vector &args) {
+ return serial_bridge::decode_address(args[0], args[1]);
+ }
+
+-std::string estimateTxFee(const std::vector &args) {
++std::string estimateTxFee(const std::vector &args) {
+ return serial_bridge::estimated_tx_network_fee(args[0], args[1], args[2]);
+ }
+
+-std::string generateKeyImage(const std::vector &args) {
++std::string generateKeyImage(const std::vector &args) {
+ return serial_bridge::generate_key_image(
+ args[0],
+ args[1],
+@@ -32,23 +32,23 @@ std::string generateKeyImage(const std::vector &args) {
+ );
+ }
+
+-std::string generatePaymentId(const std::vector &args) {
++std::string generatePaymentId(const std::vector &args) {
+ return serial_bridge::new_payment_id();
+ }
+
+-std::string generateWallet(const std::vector &args) {
++std::string generateWallet(const std::vector &args) {
+ return serial_bridge::newly_created_wallet(args[0], args[1]);
+ }
+
+-std::string isIntegratedAddress(const std::vector &args) {
++std::string isIntegratedAddress(const std::vector &args) {
+ return serial_bridge::is_integrated_address(args[0], args[1]) ? "t" : "";
+ }
+
+-std::string isSubaddress(const std::vector &args) {
++std::string isSubaddress(const std::vector &args) {
+ return serial_bridge::is_subaddress(args[0], args[1]) ? "t" : "";
+ }
+
+-std::string isValidKeys(const std::vector &args) {
++std::string isValidKeys(const std::vector &args) {
+ return serial_bridge::validate_components_for_login(
+ args[0],
+ args[1],
+@@ -58,19 +58,19 @@ std::string isValidKeys(const std::vector &args) {
+ );
+ }
+
+-std::string mnemonicFromSeed(const std::vector &args) {
++std::string mnemonicFromSeed(const std::vector &args) {
+ return serial_bridge::mnemonic_from_seed(args[0], args[1]);
+ }
+
+-std::string newIntegratedAddress(const std::vector &args) {
++std::string newIntegratedAddress(const std::vector &args) {
+ return serial_bridge::new_integrated_address(args[0], args[1], args[2]);
+ }
+
+-std::string prepareTx(const std::vector &args) {
++std::string prepareTx(const std::vector &args) {
+ return emscr_SendFunds_bridge::prepare_send(args[0]);
+ }
+
+-std::string seedAndKeysFromMnemonic(const std::vector &args) {
++std::string seedAndKeysFromMnemonic(const std::vector &args) {
+ return serial_bridge::seed_and_keys_from_mnemonic(args[0], args[1]);
+ }
+
+diff --git a/node_modules/react-native-mymonero-core/android/src/main/cpp/mymonero-wrapper/mymonero-methods.hpp b/node_modules/react-native-mymonero-core/android/src/main/cpp/mymonero-wrapper/mymonero-methods.hpp
+index bfedec1..c287d3b 100644
+--- a/node_modules/react-native-mymonero-core/android/src/main/cpp/mymonero-wrapper/mymonero-methods.hpp
++++ b/node_modules/react-native-mymonero-core/android/src/main/cpp/mymonero-wrapper/mymonero-methods.hpp
+@@ -7,7 +7,7 @@
+ struct MyMoneroMethod {
+ const char *name;
+ int argc;
+- std::string (*method)(const std::vector &args);
++ std::string (*method)(const std::vector &args);
+ };
+ extern const MyMoneroMethod myMoneroMethods[];
+ extern const unsigned myMoneroMethodCount;
+diff --git a/node_modules/react-native-mymonero-core/ios/MyMoneroCore.mm b/node_modules/react-native-mymonero-core/ios/MyMoneroCore.mm
+index 2eba1a5..97c84e8 100644
+--- a/node_modules/react-native-mymonero-core/ios/MyMoneroCore.mm
++++ b/node_modules/react-native-mymonero-core/ios/MyMoneroCore.mm
+@@ -18,7 +18,7 @@ RCT_REMAP_METHOD(
+
+ // Re-package the arguments:
+ NSUInteger length = [arguments count];
+- std::vector strings;
++ std::vector strings;
+ strings.reserve(length);
+ for (NSUInteger i = 0; i < length; ++i) {
+ NSString *string = [arguments objectAtIndex:i];
+diff --git a/node_modules/react-native-mymonero-core/src/mymonero-wrapper/mymonero-methods.cpp b/node_modules/react-native-mymonero-core/src/mymonero-wrapper/mymonero-methods.cpp
+index 7d2f4e0..1a09b06 100644
+--- a/node_modules/react-native-mymonero-core/src/mymonero-wrapper/mymonero-methods.cpp
++++ b/node_modules/react-native-mymonero-core/src/mymonero-wrapper/mymonero-methods.cpp
+@@ -2,27 +2,27 @@
+ #include "../mymonero-core-cpp/src/serial_bridge_index.hpp"
+ #include "../mymonero-utils/packages/mymonero-monero-client/src/emscr_SendFunds_bridge.hpp"
+
+-std::string addressAndKeysFromSeed(const std::vector &args) {
++std::string addressAndKeysFromSeed(const std::vector &args) {
+ return serial_bridge::address_and_keys_from_seed(args[0], args[1]);
+ }
+
+-std::string compareMnemonics(const std::vector &args) {
++std::string compareMnemonics(const std::vector &args) {
+ return serial_bridge::are_equal_mnemonics(args[0], args[1]) ? "t" : "";
+ }
+
+-std::string createAndSignTx(const std::vector &args) {
++std::string createAndSignTx(const std::vector &args) {
+ return emscr_SendFunds_bridge::send_funds(args[0]);
+ }
+
+-std::string decodeAddress(const std::vector &args) {
++std::string decodeAddress(const std::vector &args) {
+ return serial_bridge::decode_address(args[0], args[1]);
+ }
+
+-std::string estimateTxFee(const std::vector &args) {
++std::string estimateTxFee(const std::vector &args) {
+ return serial_bridge::estimated_tx_network_fee(args[0], args[1], args[2]);
+ }
+
+-std::string generateKeyImage(const std::vector &args) {
++std::string generateKeyImage(const std::vector &args) {
+ return serial_bridge::generate_key_image(
+ args[0],
+ args[1],
+@@ -32,23 +32,23 @@ std::string generateKeyImage(const std::vector &args) {
+ );
+ }
+
+-std::string generatePaymentId(const std::vector &args) {
++std::string generatePaymentId(const std::vector &args) {
+ return serial_bridge::new_payment_id();
+ }
+
+-std::string generateWallet(const std::vector &args) {
++std::string generateWallet(const std::vector &args) {
+ return serial_bridge::newly_created_wallet(args[0], args[1]);
+ }
+
+-std::string isIntegratedAddress(const std::vector &args) {
++std::string isIntegratedAddress(const std::vector &args) {
+ return serial_bridge::is_integrated_address(args[0], args[1]) ? "t" : "";
+ }
+
+-std::string isSubaddress(const std::vector &args) {
++std::string isSubaddress(const std::vector &args) {
+ return serial_bridge::is_subaddress(args[0], args[1]) ? "t" : "";
+ }
+
+-std::string isValidKeys(const std::vector &args) {
++std::string isValidKeys(const std::vector &args) {
+ return serial_bridge::validate_components_for_login(
+ args[0],
+ args[1],
+@@ -58,19 +58,19 @@ std::string isValidKeys(const std::vector &args) {
+ );
+ }
+
+-std::string mnemonicFromSeed(const std::vector &args) {
++std::string mnemonicFromSeed(const std::vector &args) {
+ return serial_bridge::mnemonic_from_seed(args[0], args[1]);
+ }
+
+-std::string newIntegratedAddress(const std::vector &args) {
++std::string newIntegratedAddress(const std::vector &args) {
+ return serial_bridge::new_integrated_address(args[0], args[1], args[2]);
+ }
+
+-std::string prepareTx(const std::vector &args) {
++std::string prepareTx(const std::vector &args) {
+ return emscr_SendFunds_bridge::prepare_send(args[0]);
+ }
+
+-std::string seedAndKeysFromMnemonic(const std::vector &args) {
++std::string seedAndKeysFromMnemonic(const std::vector &args) {
+ return serial_bridge::seed_and_keys_from_mnemonic(args[0], args[1]);
+ }
+
+diff --git a/node_modules/react-native-mymonero-core/src/mymonero-wrapper/mymonero-methods.hpp b/node_modules/react-native-mymonero-core/src/mymonero-wrapper/mymonero-methods.hpp
+index bfedec1..c287d3b 100644
+--- a/node_modules/react-native-mymonero-core/src/mymonero-wrapper/mymonero-methods.hpp
++++ b/node_modules/react-native-mymonero-core/src/mymonero-wrapper/mymonero-methods.hpp
+@@ -7,7 +7,7 @@
+ struct MyMoneroMethod {
+ const char *name;
+ int argc;
+- std::string (*method)(const std::vector &args);
++ std::string (*method)(const std::vector &args);
+ };
+ extern const MyMoneroMethod myMoneroMethods[];
+ extern const unsigned myMoneroMethodCount;
diff --git a/patches/react-native-zano+0.2.5.patch b/patches/react-native-zano+0.2.5.patch
new file mode 100644
index 00000000000..50b5dea97ad
--- /dev/null
+++ b/patches/react-native-zano+0.2.5.patch
@@ -0,0 +1,26 @@
+diff --git a/node_modules/react-native-zano/ios/ZanoModule.mm b/node_modules/react-native-zano/ios/ZanoModule.mm
+index 496bfea..c011578 100644
+--- a/node_modules/react-native-zano/ios/ZanoModule.mm
++++ b/node_modules/react-native-zano/ios/ZanoModule.mm
+@@ -18,7 +18,7 @@ RCT_REMAP_METHOD(
+
+ // Re-package the arguments:
+ NSUInteger length = [arguments count];
+- std::vector strings;
++ std::vector strings;
+ strings.reserve(length);
+ for (NSUInteger i = 0; i < length; ++i) {
+ NSString *string = [arguments objectAtIndex:i];
+diff --git a/node_modules/react-native-zano/src/zano-wrapper/zano-methods.hpp b/node_modules/react-native-zano/src/zano-wrapper/zano-methods.hpp
+index 1ffe3ea..cd04388 100644
+--- a/node_modules/react-native-zano/src/zano-wrapper/zano-methods.hpp
++++ b/node_modules/react-native-zano/src/zano-wrapper/zano-methods.hpp
+@@ -7,7 +7,7 @@
+ struct ZanoMethod {
+ const char *name;
+ int argc;
+- std::string (*method)(const std::vector &args);
++ std::string (*method)(const std::vector &args);
+ };
+ extern const ZanoMethod zanoMethods[];
+ extern const unsigned zanoMethodCount;