From fde683d254f33ec863751c74a0b4a146ba2d28b0 Mon Sep 17 00:00:00 2001 From: gemcoder21 <104884878+gemcoder21@users.noreply.github.com> Date: Tue, 4 Jun 2024 05:38:50 +0100 Subject: [PATCH] Fix metamask like address format Fixes: https://github.com/gemwalletcom/gem-ios/issues/22 --- Gem.xcodeproj/project.pbxproj | 8 --- Gem/Core/Decoder/PaymentURLDecoder.swift | 51 ------------------ .../ViewsModels/RecipientViewModel.swift | 3 +- .../Core/Decoder/PaymentURLDecoderTests.swift | 54 ------------------- Packages/Blockchain/Package.swift | 2 +- Packages/Components/Package.swift | 2 +- Packages/GemAPI/Package.swift | 2 +- Packages/GemstoneSwift/Package.swift | 2 +- .../GemstoneSwift/PaymentURLDecoder.swift | 10 ++++ .../GemstoneSwiftTests.swift | 1 + .../PaymentURLDecoderTests.swift | 26 +++++++++ Packages/Keystore/Package.swift | 2 +- Packages/Primitives/Package.swift | 2 +- .../Primitives/Sources/PaymentDecoder.swift | 5 ++ Packages/QRScanner/Package.swift | 2 +- Packages/Settings/Package.swift | 2 +- Packages/Signer/Package.swift | 2 +- Packages/Store/Package.swift | 2 +- Packages/Style/Package.swift | 2 +- Packages/SwiftHTTPClient/Package.swift | 2 +- Packages/WalletConnector/Package.swift | 2 +- Packages/WalletCore/Package.swift | 2 +- Packages/WalletCorePrimitives/Package.swift | 2 +- core | 2 +- 24 files changed, 60 insertions(+), 130 deletions(-) delete mode 100644 Gem/Core/Decoder/PaymentURLDecoder.swift delete mode 100644 GemTests/Core/Decoder/PaymentURLDecoderTests.swift create mode 100644 Packages/GemstoneSwift/Sources/GemstoneSwift/PaymentURLDecoder.swift create mode 100644 Packages/GemstoneSwift/Tests/GemstoneSwiftTests/PaymentURLDecoderTests.swift create mode 100644 Packages/Primitives/Sources/PaymentDecoder.swift diff --git a/Gem.xcodeproj/project.pbxproj b/Gem.xcodeproj/project.pbxproj index 4ccffc45..c96ef4a9 100644 --- a/Gem.xcodeproj/project.pbxproj +++ b/Gem.xcodeproj/project.pbxproj @@ -199,8 +199,6 @@ D89D690B2A9FBFD400EA74EE /* TransactionSceneInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = D89D690A2A9FBFD400EA74EE /* TransactionSceneInput.swift */; }; D8A1F8782B17F21E00B15F54 /* ScreenshotsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8A1F8772B17F21E00B15F54 /* ScreenshotsLaunchTests.swift */; }; D8A1F87F2B17F23500B15F54 /* SnapshotHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8A1F87E2B17F23500B15F54 /* SnapshotHelper.swift */; }; - D8A1F8822B17F88100B15F54 /* PaymentURLDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8A1F8812B17F88100B15F54 /* PaymentURLDecoder.swift */; }; - D8A1F8862B17F8FB00B15F54 /* PaymentURLDecoderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8A1F8852B17F8FB00B15F54 /* PaymentURLDecoderTests.swift */; }; D8AF81252C0E615B002E5FCF /* ButtonListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8AF81242C0E615B002E5FCF /* ButtonListItem.swift */; }; D8AF91F22B51BBCE002193E3 /* StakeDetailScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8AF91F12B51BBCE002193E3 /* StakeDetailScene.swift */; }; D8AF91F42B51BBEE002193E3 /* StakeDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8AF91F32B51BBEE002193E3 /* StakeDetailViewModel.swift */; }; @@ -454,8 +452,6 @@ D8A1F8732B17F21E00B15F54 /* Screenshots.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Screenshots.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; D8A1F8772B17F21E00B15F54 /* ScreenshotsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenshotsLaunchTests.swift; sourceTree = ""; }; D8A1F87E2B17F23500B15F54 /* SnapshotHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SnapshotHelper.swift; sourceTree = ""; }; - D8A1F8812B17F88100B15F54 /* PaymentURLDecoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentURLDecoder.swift; sourceTree = ""; }; - D8A1F8852B17F8FB00B15F54 /* PaymentURLDecoderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentURLDecoderTests.swift; sourceTree = ""; }; D8AF81242C0E615B002E5FCF /* ButtonListItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonListItem.swift; sourceTree = ""; }; D8AF91F12B51BBCE002193E3 /* StakeDetailScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakeDetailScene.swift; sourceTree = ""; }; D8AF91F32B51BBEE002193E3 /* StakeDetailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakeDetailViewModel.swift; sourceTree = ""; }; @@ -1406,7 +1402,6 @@ D8A1F8802B17F86600B15F54 /* Decoder */ = { isa = PBXGroup; children = ( - D8A1F8812B17F88100B15F54 /* PaymentURLDecoder.swift */, ); path = Decoder; sourceTree = ""; @@ -1422,7 +1417,6 @@ D8A1F8842B17F8EE00B15F54 /* Decoder */ = { isa = PBXGroup; children = ( - D8A1F8852B17F8FB00B15F54 /* PaymentURLDecoderTests.swift */, ); path = Decoder; sourceTree = ""; @@ -1713,7 +1707,6 @@ C3FB448C2A7AE38A0056F124 /* NameResolveView.swift in Sources */, C34C7CF529FC9B1C009EEC21 /* SettingsViewModel.swift in Sources */, D89D690B2A9FBFD400EA74EE /* TransactionSceneInput.swift in Sources */, - D8A1F8822B17F88100B15F54 /* PaymentURLDecoder.swift in Sources */, D8BAC9612BDC82F7001608BC /* WordSuggestor.swift in Sources */, D8BAC9562BD0C0C5001608BC /* NetworkSelectorNavigationStack.swift in Sources */, C3CF3BCD29B80B1B00E96586 /* SelectAssetViewModel.swift in Sources */, @@ -1886,7 +1879,6 @@ C30952C6299C39D80004C0F9 /* walletTests.swift in Sources */, C3A7CB9929D35EC200431341 /* WalletSceneViewModelTests.swift in Sources */, C3A7CB9729D3569C00431341 /* PriceViewModelTests.swift in Sources */, - D8A1F8862B17F8FB00B15F54 /* PaymentURLDecoderTests.swift in Sources */, C3549B3529C4396A00B4BE01 /* AssetViewModelTests.swift in Sources */, C3549B3129C42E8F00B4BE01 /* AssetListViewModelTests.swift in Sources */, ); diff --git a/Gem/Core/Decoder/PaymentURLDecoder.swift b/Gem/Core/Decoder/PaymentURLDecoder.swift deleted file mode 100644 index 1baa2f97..00000000 --- a/Gem/Core/Decoder/PaymentURLDecoder.swift +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c). Gem Wallet. All rights reserved. - -import Foundation -import Primitives - -struct Payment: Equatable { - let address: String - let amount: String? - let memo: String? -} - -struct PaymentURLDecoder { - func decode(_ string: String) throws -> Payment { - let chunks = string.split(separator: ":") - - // has more than an address - if chunks.count == 2 { - //TODO: Check prefix for bitcoin and other chains - //let _prefix = chunks[0] - let path = chunks[1] - let pathChunks = path.split(separator: "?") - - if pathChunks.count == 1 { - return Payment(address: String(path), amount: .none, memo: .none) - } else if pathChunks.count == 2 { - // BIP21 parsing - let address = String(pathChunks[0]) - let query = String(pathChunks[1]) - let params = decodeQueryString(query) - let amount = params["amount"] - let memo = params["memo"] - - return Payment(address: address, amount: amount, memo: memo) - } else { - throw AnyError("BIP21 format is incorrect") - } - } - return Payment(address: string, amount: .none, memo: .none) - } - - func decodeQueryString(_ queryString: String) -> [String: String] { - return Dictionary( - uniqueKeysWithValues: queryString - .split(separator: "&") - .compactMap { pair in - let components = pair.split(separator: "=") - return components.count == 2 ? (String(components[0]), String(components[1])) : nil - } - ) - } -} diff --git a/Gem/Transfer/ViewsModels/RecipientViewModel.swift b/Gem/Transfer/ViewsModels/RecipientViewModel.swift index 142c7cb8..a6656006 100644 --- a/Gem/Transfer/ViewsModels/RecipientViewModel.swift +++ b/Gem/Transfer/ViewsModels/RecipientViewModel.swift @@ -2,6 +2,7 @@ import Foundation import Primitives import Keystore import Blockchain +import GemstoneSwift enum RecipientAddressType { case wallets @@ -88,7 +89,7 @@ struct RecipientViewModel { //TODO: Add unit tests func getTransferDataFromScan(string: String) throws -> ScanRecipientResult { - let payment = try PaymentURLDecoder().decode(string) + let payment = try PaymentURLDecoder.decode(string) if payment.amount == .none { return .address(address: payment.address, memo: payment.memo) diff --git a/GemTests/Core/Decoder/PaymentURLDecoderTests.swift b/GemTests/Core/Decoder/PaymentURLDecoderTests.swift deleted file mode 100644 index db134fb7..00000000 --- a/GemTests/Core/Decoder/PaymentURLDecoderTests.swift +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c). Gem Wallet. All rights reserved. - -import XCTest -@testable import Gem - -final class PaymentURLDecoderTests: XCTestCase { - - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - } - - func testAddress() { - XCTAssertEqual( - try! PaymentURLDecoder().decode(""), - Payment(address: "", amount: .none, memo: .none) - ) - XCTAssertEqual( - try! PaymentURLDecoder().decode("0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326"), - Payment(address: "0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326", amount: .none, memo: .none) - ) - } - - func testSolana() { - XCTAssertEqual( - try! PaymentURLDecoder().decode("HA4hQMs22nCuRN7iLDBsBkboz2SnLM1WkNtzLo6xEDY5"), - Payment(address: "HA4hQMs22nCuRN7iLDBsBkboz2SnLM1WkNtzLo6xEDY5", amount: .none, memo: .none) - ) - XCTAssertEqual( - try! PaymentURLDecoder().decode("solana:HA4hQMs22nCuRN7iLDBsBkboz2SnLM1WkNtzLo6xEDY5?amount=0.266232"), - Payment(address: "HA4hQMs22nCuRN7iLDBsBkboz2SnLM1WkNtzLo6xEDY5", amount: "0.266232", memo: .none) - ) - } - - func testBIP21() { - XCTAssertEqual( - try! PaymentURLDecoder().decode("bitcoin:bc1pn6pua8a566z7t822kphpd2el45ntm23354c3krfmpe3nnn33lkcskuxrdl?amount=0.00001"), - Payment(address: "bc1pn6pua8a566z7t822kphpd2el45ntm23354c3krfmpe3nnn33lkcskuxrdl", amount: "0.00001", memo: .none) - ) - - XCTAssertEqual( - try! PaymentURLDecoder().decode("ethereum:0xA20d8935d61812b7b052E08f0768cFD6D81cB088?amount=0.01233&memo=test"), - Payment(address: "0xA20d8935d61812b7b052E08f0768cFD6D81cB088", amount: "0.01233", memo: "test") - ) - - XCTAssertEqual( - try! PaymentURLDecoder().decode("solana:3u3ta6yXYgpheLGc2GVF3QkLHAUwBrvX71Eg8XXjJHGw?amount=0.42301"), - Payment(address: "3u3ta6yXYgpheLGc2GVF3QkLHAUwBrvX71Eg8XXjJHGw", amount: "0.42301", memo: .none) - ) - XCTAssertEqual( - try! PaymentURLDecoder().decode("ton:EQAzoUpalAaXnVm5MoiYWRZguLFzY0KxFjLv3MkRq5BXzyiQ?amount=0.00001"), - Payment(address: "EQAzoUpalAaXnVm5MoiYWRZguLFzY0KxFjLv3MkRq5BXzyiQ", amount: "0.00001", memo: .none) - ) - } -} diff --git a/Packages/Blockchain/Package.swift b/Packages/Blockchain/Package.swift index ce310d76..da26fe14 100644 --- a/Packages/Blockchain/Package.swift +++ b/Packages/Blockchain/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "Blockchain", - platforms: [.iOS(.v16), .macOS(.v12)], + platforms: [.iOS(.v17), .macOS(.v12)], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( diff --git a/Packages/Components/Package.swift b/Packages/Components/Package.swift index 9f841741..c9c929a1 100644 --- a/Packages/Components/Package.swift +++ b/Packages/Components/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "Components", - platforms: [.iOS(.v16), .macOS(.v12)], + platforms: [.iOS(.v17), .macOS(.v12)], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( diff --git a/Packages/GemAPI/Package.swift b/Packages/GemAPI/Package.swift index 9b85f7f2..1174345b 100644 --- a/Packages/GemAPI/Package.swift +++ b/Packages/GemAPI/Package.swift @@ -4,7 +4,7 @@ import PackageDescription let package = Package( name: "GemAPI", - platforms: [.iOS(.v16), .macOS(.v12)], + platforms: [.iOS(.v17), .macOS(.v12)], products: [ .library( name: "GemAPI", diff --git a/Packages/GemstoneSwift/Package.swift b/Packages/GemstoneSwift/Package.swift index e3a161f4..971fc304 100644 --- a/Packages/GemstoneSwift/Package.swift +++ b/Packages/GemstoneSwift/Package.swift @@ -3,7 +3,7 @@ import PackageDescription let package = Package( name: "GemstoneSwift", - platforms: [.iOS(.v16), .macOS(.v12)], + platforms: [.iOS(.v17), .macOS(.v12)], products: [ .library( name: "GemstoneSwift", diff --git a/Packages/GemstoneSwift/Sources/GemstoneSwift/PaymentURLDecoder.swift b/Packages/GemstoneSwift/Sources/GemstoneSwift/PaymentURLDecoder.swift new file mode 100644 index 00000000..a766b0dd --- /dev/null +++ b/Packages/GemstoneSwift/Sources/GemstoneSwift/PaymentURLDecoder.swift @@ -0,0 +1,10 @@ +// Copyright (c). Gem Wallet. All rights reserved. + +import Foundation +import Gemstone + +public struct PaymentURLDecoder { + public static func decode(_ string: String) throws -> PaymentWrapper { + return try Gemstone.paymentDecodeUrl(string: string) + } +} diff --git a/Packages/GemstoneSwift/Tests/GemstoneSwiftTests/GemstoneSwiftTests.swift b/Packages/GemstoneSwift/Tests/GemstoneSwiftTests/GemstoneSwiftTests.swift index a1275025..3f3b5f38 100644 --- a/Packages/GemstoneSwift/Tests/GemstoneSwiftTests/GemstoneSwiftTests.swift +++ b/Packages/GemstoneSwift/Tests/GemstoneSwiftTests/GemstoneSwiftTests.swift @@ -3,6 +3,7 @@ import Gemstone import XCTest final class GemstoneSwiftTests: XCTestCase { + func testExplorerService() throws { XCTAssertNotNil(Gemstone.libVersion()) XCTAssertEqual(ExplorerService.hostName(url: URL(string: "https://www.mintscan.io/")!), "MintScan") diff --git a/Packages/GemstoneSwift/Tests/GemstoneSwiftTests/PaymentURLDecoderTests.swift b/Packages/GemstoneSwift/Tests/GemstoneSwiftTests/PaymentURLDecoderTests.swift new file mode 100644 index 00000000..9a988d5f --- /dev/null +++ b/Packages/GemstoneSwift/Tests/GemstoneSwiftTests/PaymentURLDecoderTests.swift @@ -0,0 +1,26 @@ +// Copyright (c). Gem Wallet. All rights reserved. + +import XCTest +import Gemstone +@testable import GemstoneSwift + +final class PaymentURLDecoderTests: XCTestCase { + + func testAddress() { + XCTAssertEqual( + try! PaymentURLDecoder.decode("0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326"), + PaymentWrapper(address: "0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326", amount: .none, memo: .none, chain: .none) + ) + } + + func testSolana() { + XCTAssertEqual( + try! PaymentURLDecoder.decode("HA4hQMs22nCuRN7iLDBsBkboz2SnLM1WkNtzLo6xEDY5"), + PaymentWrapper(address: "HA4hQMs22nCuRN7iLDBsBkboz2SnLM1WkNtzLo6xEDY5", amount: .none, memo: .none, chain: .none) + ) + XCTAssertEqual( + try! PaymentURLDecoder.decode("solana:HA4hQMs22nCuRN7iLDBsBkboz2SnLM1WkNtzLo6xEDY5?amount=0.266232"), + PaymentWrapper(address: "HA4hQMs22nCuRN7iLDBsBkboz2SnLM1WkNtzLo6xEDY5", amount: "0.266232", memo: .none, chain: .none) + ) + } +} diff --git a/Packages/Keystore/Package.swift b/Packages/Keystore/Package.swift index d635a609..23549d69 100644 --- a/Packages/Keystore/Package.swift +++ b/Packages/Keystore/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "Keystore", - platforms: [.iOS(.v16), .macOS(.v12)], + platforms: [.iOS(.v17), .macOS(.v12)], products: [ .library( name: "Keystore", diff --git a/Packages/Primitives/Package.swift b/Packages/Primitives/Package.swift index 9f5ddfd3..974e29f6 100644 --- a/Packages/Primitives/Package.swift +++ b/Packages/Primitives/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "Primitives", - platforms: [.iOS(.v16), .macOS(.v12)], + platforms: [.iOS(.v17), .macOS(.v12)], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( diff --git a/Packages/Primitives/Sources/PaymentDecoder.swift b/Packages/Primitives/Sources/PaymentDecoder.swift new file mode 100644 index 00000000..6251ae96 --- /dev/null +++ b/Packages/Primitives/Sources/PaymentDecoder.swift @@ -0,0 +1,5 @@ +/* + Generated by typeshare 1.7.0 + */ + +import Foundation diff --git a/Packages/QRScanner/Package.swift b/Packages/QRScanner/Package.swift index c6288159..d8de8062 100644 --- a/Packages/QRScanner/Package.swift +++ b/Packages/QRScanner/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "QRScanner", - platforms: [.iOS(.v16), .macOS(.v12)], + platforms: [.iOS(.v17), .macOS(.v12)], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( diff --git a/Packages/Settings/Package.swift b/Packages/Settings/Package.swift index 0210785c..0c1675d0 100644 --- a/Packages/Settings/Package.swift +++ b/Packages/Settings/Package.swift @@ -4,7 +4,7 @@ import PackageDescription let package = Package( name: "Settings", - platforms: [.iOS(.v16), .macOS(.v12)], + platforms: [.iOS(.v17), .macOS(.v12)], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( diff --git a/Packages/Signer/Package.swift b/Packages/Signer/Package.swift index a1bb47b1..292ca992 100644 --- a/Packages/Signer/Package.swift +++ b/Packages/Signer/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "Signer", - platforms: [.iOS(.v16), .macOS(.v12)], + platforms: [.iOS(.v17), .macOS(.v12)], products: [ .library( name: "Signer", diff --git a/Packages/Store/Package.swift b/Packages/Store/Package.swift index fc51cf25..563bc2c5 100644 --- a/Packages/Store/Package.swift +++ b/Packages/Store/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "Store", - platforms: [.iOS(.v16), .macOS(.v12)], + platforms: [.iOS(.v17), .macOS(.v12)], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( diff --git a/Packages/Style/Package.swift b/Packages/Style/Package.swift index 1b5a375b..d32ed02b 100644 --- a/Packages/Style/Package.swift +++ b/Packages/Style/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "Style", - platforms: [.iOS(.v16), .macOS(.v12)], + platforms: [.iOS(.v17), .macOS(.v12)], products: [ .library( name: "Style", diff --git a/Packages/SwiftHTTPClient/Package.swift b/Packages/SwiftHTTPClient/Package.swift index 038ed697..09deef9b 100644 --- a/Packages/SwiftHTTPClient/Package.swift +++ b/Packages/SwiftHTTPClient/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "SwiftHTTPClient", - platforms: [.iOS(.v16), .macOS(.v12)], + platforms: [.iOS(.v17), .macOS(.v12)], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( diff --git a/Packages/WalletConnector/Package.swift b/Packages/WalletConnector/Package.swift index c220bf53..eedd7732 100644 --- a/Packages/WalletConnector/Package.swift +++ b/Packages/WalletConnector/Package.swift @@ -4,7 +4,7 @@ import PackageDescription let package = Package( name: "WalletConnector", - platforms: [.iOS(.v16), .macOS(.v12)], + platforms: [.iOS(.v17), .macOS(.v12)], products: [ .library( name: "WalletConnector", diff --git a/Packages/WalletCore/Package.swift b/Packages/WalletCore/Package.swift index 78754877..293546e9 100644 --- a/Packages/WalletCore/Package.swift +++ b/Packages/WalletCore/Package.swift @@ -3,7 +3,7 @@ import PackageDescription let package = Package( name: "WalletCore", - platforms: [.iOS(.v16)], + platforms: [.iOS(.v17)], products: [ .library(name: "WalletCore", targets: ["WalletCore"]), .library(name: "SwiftProtobuf", targets: ["SwiftProtobuf"]) diff --git a/Packages/WalletCorePrimitives/Package.swift b/Packages/WalletCorePrimitives/Package.swift index 054123cd..d340fb80 100644 --- a/Packages/WalletCorePrimitives/Package.swift +++ b/Packages/WalletCorePrimitives/Package.swift @@ -3,7 +3,7 @@ import PackageDescription let package = Package( name: "WalletCorePrimitives", - platforms: [.iOS(.v16), .macOS(.v12)], + platforms: [.iOS(.v17), .macOS(.v12)], products: [ .library( name: "WalletCorePrimitives", diff --git a/core b/core index d79cfba7..0c199df4 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit d79cfba702ee6ad0140109978ade8a080ee0d737 +Subproject commit 0c199df43bc396628255878955a82914024ce32d