From b63e3220ae8e60763bd1deaefb02959554e6aa79 Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Tue, 23 Aug 2022 17:13:39 +0300 Subject: [PATCH 01/24] Update project to recommended settings --- Pods/Pods.xcodeproj/project.pbxproj | 228 ++++++++++++---------------- 1 file changed, 95 insertions(+), 133 deletions(-) diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index e7369318..b3b71542 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -2016,7 +2016,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 002B1E88BA14EBF633CD66EBFBA107E9 /* PromiseKit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = PromiseKit; path = PromiseKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 002B1E88BA14EBF633CD66EBFBA107E9 /* PromiseKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PromiseKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 007C31C04CB2A1CE4D0D545E2F656D02 /* SendRawTransactionProcedure.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SendRawTransactionProcedure.swift; path = Web3Swift/RemoteProcedure/SendRawTransactionProcedure.swift; sourceTree = ""; }; 00B12FD3CA44605F0DD030A9A5870BF9 /* BitcoinAddress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BitcoinAddress.swift; path = Sources/Generated/BitcoinAddress.swift; sourceTree = ""; }; 00C67DDD727C757D063898D247CE98CB /* SwiftProtobuf-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "SwiftProtobuf-iOS.modulemap"; sourceTree = ""; }; @@ -2058,8 +2058,8 @@ 0903F4AB71BBB056FF156F78922C5E93 /* Account.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Account.swift; path = Sources/Generated/Account.swift; sourceTree = ""; }; 0A64BFC73436FAE7EDBE3CFD644928E0 /* Data+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Extensions.swift"; path = "Sources/SwiftProtobuf/Data+Extensions.swift"; sourceTree = ""; }; 0A7245AF8DB33E58BC30CA0A16BC6361 /* SS58AddressType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SS58AddressType.swift; path = Sources/Generated/Enums/SS58AddressType.swift; sourceTree = ""; }; - 0A8C7427D934CD1C549FEC3C80A27C2D /* secp256k1.swift-iOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "secp256k1.swift-iOS"; path = secp256k1.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0A90AABC168E7ACBF249426FCA99F19B /* TrustWalletCore-macOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "TrustWalletCore-macOS"; path = WalletCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A8C7427D934CD1C549FEC3C80A27C2D /* secp256k1.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = secp256k1.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A90AABC168E7ACBF249426FCA99F19B /* WalletCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WalletCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 0B5DD317D6D7818CFEED579BA40357D8 /* Common+Proto.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Common+Proto.swift"; path = "Sources/Generated/Protobuf/Common+Proto.swift"; sourceTree = ""; }; 0B676EA5C677F5E6A96D898F666F9834 /* GraphicsContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GraphicsContext.swift; path = Sources/Image/GraphicsContext.swift; sourceTree = ""; }; 0BA80F2E568112A8DFD371CA24CAC81C /* BlockiesSwift-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "BlockiesSwift-macOS.release.xcconfig"; path = "../BlockiesSwift-macOS/BlockiesSwift-macOS.release.xcconfig"; sourceTree = ""; }; @@ -2108,7 +2108,7 @@ 13F829DE02B6A55D28F96BA80CBBB9E2 /* EOS+Proto.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EOS+Proto.swift"; path = "Sources/Generated/Protobuf/EOS+Proto.swift"; sourceTree = ""; }; 145ADA282D66F1426232C44B9C2933C3 /* EncodedABIFunction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EncodedABIFunction.swift; path = Web3Swift/ABI/EncodedABIFunction.swift; sourceTree = ""; }; 145F977CB18C5AFD6B0AEA7EEDB9FC00 /* timestamp.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = timestamp.pb.swift; path = Sources/SwiftProtobuf/timestamp.pb.swift; sourceTree = ""; }; - 14947ABD97F09420FCF875C8739F13AC /* WalletConnect-iOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "WalletConnect-iOS"; path = WalletConnect.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 14947ABD97F09420FCF875C8739F13AC /* WalletConnect.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WalletConnect.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 14D1002155EF7139AA88B3E135445C84 /* ecmult_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecmult_impl.h; path = secp256k1/Classes/secp256k1/src/ecmult_impl.h; sourceTree = ""; }; 14E3D2F4A1C2B0F1C8074C2E6894CCFC /* PBKDF2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PBKDF2.swift; path = Sources/CryptoSwift/PKCS/PBKDF2.swift; sourceTree = ""; }; 1558041311C0D23AFEACFE803355D7AD /* PBKDF1.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PBKDF1.swift; path = Sources/CryptoSwift/PKCS/PBKDF1.swift; sourceTree = ""; }; @@ -2130,7 +2130,7 @@ 18A6E47E67E5967064C62F86D716A720 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Accelerate.framework; sourceTree = DEVELOPER_DIR; }; 18B1ADDBAD1F4FAAE3C4C83DD75B024A /* BitcoinAddress+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BitcoinAddress+Extension.swift"; path = "Sources/Extensions/BitcoinAddress+Extension.swift"; sourceTree = ""; }; 18B8A83035727E40C675EFBE77968685 /* JSONDecoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONDecoder.swift; path = Sources/SwiftProtobuf/JSONDecoder.swift; sourceTree = ""; }; - 18DA9974D195936DDCAD73EC61092885 /* lax_der_privatekey_parsing.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lax_der_privatekey_parsing.c; path = secp256k1/Classes/secp256k1/contrib/lax_der_privatekey_parsing.c; sourceTree = ""; }; + 18DA9974D195936DDCAD73EC61092885 /* lax_der_privatekey_parsing.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = lax_der_privatekey_parsing.c; path = secp256k1/Classes/secp256k1/contrib/lax_der_privatekey_parsing.c; sourceTree = ""; }; 18DEE602508105D8432D2424E1452D97 /* Pods-Tokenary-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Tokenary-umbrella.h"; sourceTree = ""; }; 198423A6FF79963B2E334656AFF3BB87 /* BlockiesSwift-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BlockiesSwift-iOS-prefix.pch"; sourceTree = ""; }; 19BC1890A9DF76F41478A45EF815F882 /* ArithmeticFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ArithmeticFunctions.swift; path = Web3Swift/NumberScalar/ArithmeticFunctions.swift; sourceTree = ""; }; @@ -2231,7 +2231,7 @@ 30322F7571C4A24461B648938A89C259 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; 306FFDEC8ED94BF05E679EEFF9FFF447 /* ImageModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageModifier.swift; path = Sources/Networking/ImageModifier.swift; sourceTree = ""; }; 30852A028AC4DEA78D6BAC70C4D3EC69 /* PrivateKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PrivateKey.swift; path = Sources/Generated/PrivateKey.swift; sourceTree = ""; }; - 30BFD9D3FC7CB9908379D14527FDE6B1 /* lax_der_parsing.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lax_der_parsing.c; path = secp256k1/Classes/secp256k1/contrib/lax_der_parsing.c; sourceTree = ""; }; + 30BFD9D3FC7CB9908379D14527FDE6B1 /* lax_der_parsing.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = lax_der_parsing.c; path = secp256k1/Classes/secp256k1/contrib/lax_der_parsing.c; sourceTree = ""; }; 30C2DB0E73652A8154541668B821517F /* CryptoSwift-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CryptoSwift-macOS-dummy.m"; path = "../CryptoSwift-macOS/CryptoSwift-macOS-dummy.m"; sourceTree = ""; }; 30E175AD87D29B737ADEFFEB6CC3EF33 /* UniversalAssetID.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UniversalAssetID.swift; path = Sources/Types/UniversalAssetID.swift; sourceTree = ""; }; 311E93FF74D936BB0B5A6BF79E6D3645 /* BlockHash.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockHash.swift; path = Web3Swift/Blocks/BlockHash.swift; sourceTree = ""; }; @@ -2313,7 +2313,7 @@ 468EE7472418C19E688A6CA2E8597905 /* Starscream-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Starscream-macOS-prefix.pch"; path = "../Starscream-macOS/Starscream-macOS-prefix.pch"; sourceTree = ""; }; 46CC4455DE41F2FED0BB105568846A46 /* HDVersion+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "HDVersion+Extension.swift"; path = "Sources/Generated/HDVersion+Extension.swift"; sourceTree = ""; }; 476F98D4B2352B641E96EB982BC865EA /* UInt128.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UInt128.swift; path = Sources/CryptoSwift/UInt128.swift; sourceTree = ""; }; - 47766325122C7F194DB0E39F8C0EA1D7 /* Web3Swift.io-iOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Web3Swift.io-iOS"; path = Web3Swift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 47766325122C7F194DB0E39F8C0EA1D7 /* Web3Swift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Web3Swift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4776FAD79B21EF1D68EB89F97B059911 /* TransactionReceiptProcedure.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransactionReceiptProcedure.swift; path = Web3Swift/RemoteProcedure/TransactionReceiptProcedure.swift; sourceTree = ""; }; 478A9D800CAC1C190245EBF7340516D7 /* Int+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Int+Extension.swift"; path = "Sources/CryptoSwift/Int+Extension.swift"; sourceTree = ""; }; 47ACBCF95DE4FA6839E61BBA9DD7F3D9 /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Sources/Utility/Result.swift; sourceTree = ""; }; @@ -2347,7 +2347,7 @@ 4DD0A134263DE49BFB2E190068F7A2BD /* ImageDownloader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDownloader.swift; path = Sources/Networking/ImageDownloader.swift; sourceTree = ""; }; 4F271B47593FCBF048800856A6C2C00F /* Box.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Box.swift; path = Sources/Box.swift; sourceTree = ""; }; 4F678CD8ADA375DD033AB0F384750A16 /* Binance+Proto.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Binance+Proto.swift"; path = "Sources/Generated/Protobuf/Binance+Proto.swift"; sourceTree = ""; }; - 4F8AD269CABED4BA00EA90C05C8D1BCF /* SwiftyJSON-macOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "SwiftyJSON-macOS"; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4F8AD269CABED4BA00EA90C05C8D1BCF /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4F8DB9AA64E6A681E6836AA84BC943D5 /* CryptoSwift-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CryptoSwift-iOS-prefix.pch"; sourceTree = ""; }; 4F959D398D43E31CC7788341F3A44288 /* basic-config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "basic-config.h"; path = "secp256k1/Classes/secp256k1/src/basic-config.h"; sourceTree = ""; }; 4FD75E8B34A13AF6381ABFA4499B415D /* Bitwise Ops.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Bitwise Ops.swift"; path = "Sources/CryptoSwift/CS_BigInt/Bitwise Ops.swift"; sourceTree = ""; }; @@ -2358,7 +2358,7 @@ 50CD97E73CA53C941ABE5F7A514BDD5D /* Solana+Proto.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Solana+Proto.swift"; path = "Sources/Generated/Protobuf/Solana+Proto.swift"; sourceTree = ""; }; 50E9AE63B506D5DB4A7240EFCAA674E5 /* AddressProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AddressProtocol.swift; path = Sources/Extensions/AddressProtocol.swift; sourceTree = ""; }; 5104C7FBDC075BBBD887E9DEDBF28C53 /* CoinType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CoinType.swift; path = Sources/Generated/Enums/CoinType.swift; sourceTree = ""; }; - 5149F2ED76FF28D39794B30B6B89D8E4 /* CryptoSwift-iOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "CryptoSwift-iOS"; path = CryptoSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5149F2ED76FF28D39794B30B6B89D8E4 /* CryptoSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CryptoSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 51726EE53EAD5E2BA153E40D9D0C7A49 /* Indicator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Indicator.swift; path = Sources/Views/Indicator.swift; sourceTree = ""; }; 52083E1BA04F651034E0E1B76897B2C6 /* Words and Bits.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Words and Bits.swift"; path = "Sources/CryptoSwift/CS_BigInt/Words and Bits.swift"; sourceTree = ""; }; 52162C9E71FBF6ACE193D7B31EBCC654 /* secp256k1.swift-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "secp256k1.swift-iOS-dummy.m"; sourceTree = ""; }; @@ -2372,7 +2372,7 @@ 542D167DBF5F9E9D8585ED1ADA022929 /* GeneratedCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GeneratedCollection.swift; path = Web3Swift/CollectionScalar/GeneratedCollection.swift; sourceTree = ""; }; 54484371B438463A7E5E742DB8407B79 /* SecRandom.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SecRandom.m; path = Sources/SecRandom.m; sourceTree = ""; }; 547DDE8F5BCB63FC20D200F79A25A01E /* StoredKeyEncryptionLevel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoredKeyEncryptionLevel.swift; path = Sources/Generated/Enums/StoredKeyEncryptionLevel.swift; sourceTree = ""; }; - 5481CE46D30AC5DDB94028EDFFE79583 /* PromiseKit.root-CorePromise-Foundation */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "PromiseKit.root-CorePromise-Foundation"; path = PromiseKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5481CE46D30AC5DDB94028EDFFE79583 /* PromiseKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PromiseKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 552489D9E25E6D634D8062916196DC1A /* String+MD5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+MD5.swift"; path = "Sources/Utility/String+MD5.swift"; sourceTree = ""; }; 552804143D06A196460CCD53A6B5BE27 /* field_5x52_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_5x52_impl.h; path = secp256k1/Classes/secp256k1/src/field_5x52_impl.h; sourceTree = ""; }; 5586806768A5ADF883737ED5FF7DA3E3 /* IntegersSum.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IntegersSum.swift; path = Web3Swift/IntegerScalar/IntegersSum.swift; sourceTree = ""; }; @@ -2387,7 +2387,7 @@ 58E58FCB9D31FDCEBA515854D4A60BAE /* BigInt-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BigInt-macOS-dummy.m"; path = "../BigInt-macOS/BigInt-macOS-dummy.m"; sourceTree = ""; }; 598FD490E43B09238B117C129BC2F462 /* ImageProgressive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProgressive.swift; path = Sources/Image/ImageProgressive.swift; sourceTree = ""; }; 59B9047DD5666AE6219711C22A67D91F /* TWBitcoinSigHashType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TWBitcoinSigHashType.h; path = include/TrustWalletCore/TWBitcoinSigHashType.h; sourceTree = ""; }; - 59C5DD41EE313A65C03650784BF278F3 /* BigInt-macOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "BigInt-macOS"; path = BigInt.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 59C5DD41EE313A65C03650784BF278F3 /* BigInt.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BigInt.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 59DB6D9C1FC1B687B2621F19A57AC809 /* KingfisherError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherError.swift; path = Sources/General/KingfisherError.swift; sourceTree = ""; }; 59F76DACC375019E80750715C95416A9 /* field_5x52_int128_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_5x52_int128_impl.h; path = secp256k1/Classes/secp256k1/src/field_5x52_int128_impl.h; sourceTree = ""; }; 5A1E3EF1B5741A81F2D086921AD00DD0 /* TrimmedPrefixBytes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TrimmedPrefixBytes.swift; path = Web3Swift/BytesScalar/TrimmedPrefixBytes.swift; sourceTree = ""; }; @@ -2407,7 +2407,7 @@ 5E8294ECF2D210A7500C80A0B2AC05B7 /* TWTHORChainSwapProto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TWTHORChainSwapProto.h; path = include/TrustWalletCore/TWTHORChainSwapProto.h; sourceTree = ""; }; 5ED7F00F04F45E4FB6855192C359827D /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; 5F06D4697B43ABC501E88DD03E882758 /* PromiseKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PromiseKit.modulemap; sourceTree = ""; }; - 5F52C76D0CC7F92C551EC2E40D9320AB /* SwiftProtobuf-macOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "SwiftProtobuf-macOS"; path = SwiftProtobuf.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5F52C76D0CC7F92C551EC2E40D9320AB /* SwiftProtobuf.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftProtobuf.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5F88176DAA9C47B3A8E45A0287D27EEC /* IsNegativeEthInteger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IsNegativeEthInteger.swift; path = Web3Swift/IntegerScalar/IsNegativeEthInteger.swift; sourceTree = ""; }; 6048AC6BD1AEE4FEE9B239AD4591962B /* Transaction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transaction.swift; path = Web3Swift/Transaction/Transaction.swift; sourceTree = ""; }; 6066DAE4C3B8BA585B4FCD6287762060 /* PendingBlockChainState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PendingBlockChainState.swift; path = Web3Swift/Blockchain/PendingBlockChainState.swift; sourceTree = ""; }; @@ -2456,7 +2456,7 @@ 6DE6D9D5BB497C303B12B4485B0217AB /* TWZilliqaProto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TWZilliqaProto.h; path = include/TrustWalletCore/TWZilliqaProto.h; sourceTree = ""; }; 6E71BBA16313F2C3710177FBD0C248EA /* Polkadot.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Polkadot.pb.swift; path = Sources/Generated/Protobuf/Polkadot.pb.swift; sourceTree = ""; }; 6EED823BC0F688323DB1305EC8582E62 /* Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Kingfisher.swift; path = Sources/General/Kingfisher.swift; sourceTree = ""; }; - 6F348CF3DF73CCBE882148B54AFDFDD5 /* SwiftyJSON-iOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "SwiftyJSON-iOS"; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6F348CF3DF73CCBE882148B54AFDFDD5 /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6F3BAC569F620242C25DCDF8554C292E /* MathUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MathUtils.swift; path = Sources/SwiftProtobuf/MathUtils.swift; sourceTree = ""; }; 6F4247DD01FE6C9FF21D91836760F4F8 /* AES.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AES.swift; path = Sources/CryptoSwift/AES.swift; sourceTree = ""; }; 6F86E22FA2E0DE0020617BD33DDD09E5 /* TrustWalletCore-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "TrustWalletCore-macOS-dummy.m"; path = "../TrustWalletCore-macOS/TrustWalletCore-macOS-dummy.m"; sourceTree = ""; }; @@ -2476,7 +2476,7 @@ 733AAEAB109DD7C14CA964E9FB61B294 /* SECP256k1Signature.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SECP256k1Signature.swift; path = Web3Swift/SECP256k1/SECP256k1Signature.swift; sourceTree = ""; }; 7354BE1868CB7C9129C295BA596B424E /* UnsignedNumbersEquality.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UnsignedNumbersEquality.swift; path = Web3Swift/NumberScalar/UnsignedNumbersEquality.swift; sourceTree = ""; }; 736D7AFCF25E4334BD0B73733C5E905D /* Tezos.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Tezos.pb.swift; path = Sources/Generated/Protobuf/Tezos.pb.swift; sourceTree = ""; }; - 736F917F1E77A2FE338BD1AC9584EDE1 /* Starscream-iOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Starscream-iOS"; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 736F917F1E77A2FE338BD1AC9584EDE1 /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 737D30ADEC66B3D267F21AE33568E9F2 /* Cryptors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cryptors.swift; path = Sources/CryptoSwift/Cryptors.swift; sourceTree = ""; }; 7394AF7D363CB50AD2FFF59E0A6A0B7D /* Updatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Updatable.swift; path = Sources/CryptoSwift/Updatable.swift; sourceTree = ""; }; 7412D08434D77D01A46188CE73327D1D /* NEAR+Proto.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NEAR+Proto.swift"; path = "Sources/Generated/Protobuf/NEAR+Proto.swift"; sourceTree = ""; }; @@ -2564,7 +2564,7 @@ 8A3FC4AF92FFC4D675245693D1AFF18C /* SelectiveVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectiveVisitor.swift; path = Sources/SwiftProtobuf/SelectiveVisitor.swift; sourceTree = ""; }; 8A61942FF359DEAB035F50F8D0D78104 /* FixedWidthInteger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FixedWidthInteger.swift; path = Web3Swift/Extensions/FixedWidthInteger.swift; sourceTree = ""; }; 8AD315663B242C95635E34B75A905DDB /* SwiftyJSON-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SwiftyJSON-macOS-dummy.m"; path = "../SwiftyJSON-macOS/SwiftyJSON-macOS-dummy.m"; sourceTree = ""; }; - 8AF0E4BE6CB89D1A02A14081360DFD8C /* SwiftProtobuf-iOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "SwiftProtobuf-iOS"; path = SwiftProtobuf.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8AF0E4BE6CB89D1A02A14081360DFD8C /* SwiftProtobuf.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftProtobuf.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8B3EA05AF628EB51D617CE78013C5C42 /* Encodable+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Encodable+Extension.swift"; path = "WalletConnect/Extensions/Encodable+Extension.swift"; sourceTree = ""; }; 8BC8EFE35C092F4023FC3E95B5F63D32 /* source_context.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = source_context.pb.swift; path = Sources/SwiftProtobuf/source_context.pb.swift; sourceTree = ""; }; 8BCA31011126AC07C4B8819EAF3313D4 /* WalletConnect-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "WalletConnect-macOS.modulemap"; path = "../WalletConnect-macOS/WalletConnect-macOS.modulemap"; sourceTree = ""; }; @@ -2612,8 +2612,8 @@ 94E5F38A27D68C7CBB181B4E5250994A /* scalar_4x64_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar_4x64_impl.h; path = secp256k1/Classes/secp256k1/src/scalar_4x64_impl.h; sourceTree = ""; }; 95102D1B76B0B31192F8AF763158F0AE /* ZigZag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZigZag.swift; path = Sources/SwiftProtobuf/ZigZag.swift; sourceTree = ""; }; 9513D64CF9EC564AEE85605F4C4B2BF2 /* TWNanoProto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TWNanoProto.h; path = include/TrustWalletCore/TWNanoProto.h; sourceTree = ""; }; - 9537468CF4D5C16DB31E0F967000827C /* Kingfisher-macOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Kingfisher-macOS"; path = Kingfisher.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 95BAA53196A79D500C92AFCCDED26039 /* Pods-Tokenary */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-Tokenary"; path = Pods_Tokenary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9537468CF4D5C16DB31E0F967000827C /* Kingfisher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Kingfisher.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 95BAA53196A79D500C92AFCCDED26039 /* Pods_Tokenary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Tokenary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 96349B7E289EB05FBA424207054B1CD9 /* HashVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HashVisitor.swift; path = Sources/SwiftProtobuf/HashVisitor.swift; sourceTree = ""; }; 969BC648397C1E4B445C13824486663D /* EthNumber.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EthNumber.swift; path = Web3Swift/NumberScalar/EthNumber.swift; sourceTree = ""; }; 96ED32439F0A8A14DF558FD02B6406F7 /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Image.swift; path = Sources/Image/Image.swift; sourceTree = ""; }; @@ -2626,7 +2626,7 @@ 9844D093CDACEAD722FE9EC5598A8519 /* BigEndianInteger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BigEndianInteger.swift; path = Web3Swift/IntegerScalar/BigEndianInteger.swift; sourceTree = ""; }; 985063CF25F026FD329CB9B4D9F3E0A6 /* Pods-Tokenary iOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-Tokenary iOS"; path = Pods_Tokenary_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 985B316C501E062F705C5659B590DC72 /* IntegersQuotient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IntegersQuotient.swift; path = Web3Swift/IntegerScalar/IntegersQuotient.swift; sourceTree = ""; }; - 9928802C73CCE6B111B318D4E499EDFE /* Web3Swift.io-macOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Web3Swift.io-macOS"; path = Web3Swift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9928802C73CCE6B111B318D4E499EDFE /* Web3Swift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Web3Swift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 992CAAB0D46BFF08CA3C36320D07DA05 /* Google_Protobuf_Any+Registry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Any+Registry.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Any+Registry.swift"; sourceTree = ""; }; 9949A4CA9AF449BFFEA07E12316A62CE /* CollectionSuffix.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CollectionSuffix.swift; path = Web3Swift/CollectionScalar/CollectionSuffix.swift; sourceTree = ""; }; 994F64F97B347282A7D2FB2C79872109 /* SimpleProcedure.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SimpleProcedure.swift; path = Web3Swift/RemoteProcedure/SimpleProcedure.swift; sourceTree = ""; }; @@ -2651,8 +2651,8 @@ 9CEE2FCF76AC3788AC17FCC8E42ACCB7 /* Square Root.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Square Root.swift"; path = "Sources/CryptoSwift/CS_BigInt/Square Root.swift"; sourceTree = ""; }; 9CF8C6D3643C6B51E0565BCE090D93C9 /* Color+HSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Color+HSL.swift"; path = "BlockiesSwift/Classes/Toolbox/Color+HSL.swift"; sourceTree = ""; }; 9D4A0A1EEFCCDCBAEAE3B45EEB133971 /* ABICollectionSlice.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABICollectionSlice.swift; path = Web3Swift/ABI/Decoding/ABICollectionSlice.swift; sourceTree = ""; }; - 9D756198C12012F347EA72608A363520 /* WalletConnect-macOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "WalletConnect-macOS"; path = WalletConnect.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9D756198C12012F347EA72608A363520 /* WalletConnect.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WalletConnect.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 9DBC900A1806702510339422C109D2FC /* Starscream-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Starscream-iOS.release.xcconfig"; sourceTree = ""; }; 9DE2E62111DB9D5FB4F92C8078789746 /* UIViewController+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+AnyPromise.h"; path = "Extensions/UIKit/Sources/UIViewController+AnyPromise.h"; sourceTree = ""; }; 9DE56B712791919DEB1895377F9FE4A9 /* TWHDWallet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TWHDWallet.h; path = include/TrustWalletCore/TWHDWallet.h; sourceTree = ""; }; @@ -2661,7 +2661,7 @@ 9EB919A275CAF29772FC0FC5F196D757 /* SwiftyJSON-macOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "SwiftyJSON-macOS-Info.plist"; path = "../SwiftyJSON-macOS/SwiftyJSON-macOS-Info.plist"; sourceTree = ""; }; 9EF89131832A3D09020D2779F351C9F0 /* WCBinanceTransferOrder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WCBinanceTransferOrder.swift; path = WalletConnect/Models/Binance/WCBinanceTransferOrder.swift; sourceTree = ""; }; 9F1942380923D0B0C2DF41C8E5DAFB97 /* String+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Extension.swift"; path = "Sources/CryptoSwift/String+Extension.swift"; sourceTree = ""; }; - 9F31F040285B537203E6C689A6967D3C /* CryptoSwift-macOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "CryptoSwift-macOS"; path = CryptoSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9F31F040285B537203E6C689A6967D3C /* CryptoSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CryptoSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A079C08E30BDD599931A4C2DDBF9FFF2 /* SecureBytes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureBytes.swift; path = Sources/CryptoSwift/SecureBytes.swift; sourceTree = ""; }; A09C557466707C97116AC05669B87F46 /* Elrond+Proto.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Elrond+Proto.swift"; path = "Sources/Generated/Protobuf/Elrond+Proto.swift"; sourceTree = ""; }; A0C9A34D8A91BA313BFC11137E419188 /* Multiplication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Multiplication.swift; path = Sources/Multiplication.swift; sourceTree = ""; }; @@ -2726,7 +2726,7 @@ B1A1E79868E4424FB8CEAC26B8607AF1 /* StringScalar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StringScalar.swift; path = Web3Swift/StringScalar/StringScalar.swift; sourceTree = ""; }; B1BBE290358EA8788776395214C68B6B /* Subtraction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Subtraction.swift; path = Sources/CryptoSwift/CS_BigInt/Subtraction.swift; sourceTree = ""; }; B1C01C6B16BC9166A2571E2B5E472AC8 /* Bit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bit.swift; path = Sources/CryptoSwift/Bit.swift; sourceTree = ""; }; - B1C3BF17AD01C0E200A831FFB3579063 /* Starscream-macOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Starscream-macOS"; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B1C3BF17AD01C0E200A831FFB3579063 /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B1E7C110A7F28757B072EEE31273DDBA /* SwiftProtobuf-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "SwiftProtobuf-iOS.release.xcconfig"; sourceTree = ""; }; B22CE5CDEC89402207424E3D0A2C2F4B /* Decoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Decoder.swift; path = Sources/SwiftProtobuf/Decoder.swift; sourceTree = ""; }; B23A92FF6CEF1C16809B8E0CF0A8E660 /* WalletConnect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WalletConnect.h; path = WalletConnect/WalletConnect.h; sourceTree = ""; }; @@ -2803,12 +2803,12 @@ C02B31169F0B11B0B8F2D727E52C72D7 /* Web3Swift.io-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "Web3Swift.io-macOS.modulemap"; path = "../Web3Swift.io-macOS/Web3Swift.io-macOS.modulemap"; sourceTree = ""; }; C02E5790316F8B5D90ED2950A8B8F40F /* ImageContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageContext.swift; path = Sources/SwiftUI/ImageContext.swift; sourceTree = ""; }; C14626F40E1AA180DFAC3E0D5942E618 /* SwiftyJSON-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "SwiftyJSON-macOS.release.xcconfig"; path = "../SwiftyJSON-macOS/SwiftyJSON-macOS.release.xcconfig"; sourceTree = ""; }; - C153DF02560BBDF1DDE1F84886704667 /* secp256k1.swift-macOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "secp256k1.swift-macOS"; path = secp256k1.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C153DF02560BBDF1DDE1F84886704667 /* secp256k1.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = secp256k1.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C16AA5D2C9FBF6F8D4511EB9D5A2415B /* WCBinanceOrder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WCBinanceOrder.swift; path = WalletConnect/Models/Binance/WCBinanceOrder.swift; sourceTree = ""; }; C19D6FA38559FF371DB6A32BC9B2D502 /* PromiseKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromiseKit.debug.xcconfig; sourceTree = ""; }; C1CF03B93B013A772A82AA3B385FA1F2 /* BinaryDelimited.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryDelimited.swift; path = Sources/SwiftProtobuf/BinaryDelimited.swift; sourceTree = ""; }; C1DD068566E0E94051378F1B4E142334 /* TWTransactionCompilerProto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TWTransactionCompilerProto.h; path = include/TrustWalletCore/TWTransactionCompilerProto.h; sourceTree = ""; }; - C1FAADCAF1476091AA79DD1F86D70AF2 /* BlockiesSwift-iOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "BlockiesSwift-iOS"; path = BlockiesSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C1FAADCAF1476091AA79DD1F86D70AF2 /* BlockiesSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BlockiesSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C214F7E387D50860EEB2777FBA80966B /* SwiftProtobuf-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SwiftProtobuf-macOS-prefix.pch"; path = "../SwiftProtobuf-macOS/SwiftProtobuf-macOS-prefix.pch"; sourceTree = ""; }; C217F05940DF3F1D3D69BED3075D7911 /* TagParameter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TagParameter.swift; path = Web3Swift/Params/TagParameter.swift; sourceTree = ""; }; C27579FE357CD806FCC96E5A3B99B18E /* EnumeratedCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EnumeratedCollection.swift; path = Web3Swift/CollectionScalar/EnumeratedCollection.swift; sourceTree = ""; }; @@ -2934,11 +2934,11 @@ E01EC2CABF678DAE3997E3A62B4B00B1 /* ContractCallProcedure.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContractCallProcedure.swift; path = Web3Swift/RemoteProcedure/ContractCallProcedure.swift; sourceTree = ""; }; E0279A76A94DB8AD4E383E19A1D3D4D8 /* field_mask.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = field_mask.pb.swift; path = Sources/SwiftProtobuf/field_mask.pb.swift; sourceTree = ""; }; E08842F14894261C145873B23CA9A5DC /* Kingfisher-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Kingfisher-macOS-umbrella.h"; path = "../Kingfisher-macOS/Kingfisher-macOS-umbrella.h"; sourceTree = ""; }; - E0907BF3F60370E0BDF1D8C72619B812 /* WalletCoreCommon.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; path = WalletCoreCommon.xcframework; sourceTree = ""; }; + E0907BF3F60370E0BDF1D8C72619B812 /* WalletCoreCommon.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = wrapper.xcframework; path = WalletCoreCommon.xcframework; sourceTree = ""; }; E126F806F6B0C5F4357B16F5D82E1FC9 /* empty.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = empty.pb.swift; path = Sources/SwiftProtobuf/empty.pb.swift; sourceTree = ""; }; E14066157CD8BAACD5ED6A80789951F9 /* TWRippleXAddress.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TWRippleXAddress.h; path = include/TrustWalletCore/TWRippleXAddress.h; sourceTree = ""; }; E14C143E6F4E5DC7FFF08C9220BE8407 /* CallbackQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CallbackQueue.swift; path = Sources/Utility/CallbackQueue.swift; sourceTree = ""; }; - E211C0634E935C4333CCE5CBC0BC176D /* secp256k1.c */ = {isa = PBXFileReference; includeInIndex = 1; name = secp256k1.c; path = secp256k1/Classes/secp256k1/src/secp256k1.c; sourceTree = ""; }; + E211C0634E935C4333CCE5CBC0BC176D /* secp256k1.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = secp256k1.c; path = secp256k1/Classes/secp256k1/src/secp256k1.c; sourceTree = ""; }; E26E41F1679F9177A89772FCBE407703 /* SHA3.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SHA3.swift; path = Sources/CryptoSwift/SHA3.swift; sourceTree = ""; }; E27CA412E9FE2B8A20F262A59E72280E /* UIView+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Promise.swift"; path = "Extensions/UIKit/Sources/UIView+Promise.swift"; sourceTree = ""; }; E28120B6C8838842157B6C846844BA66 /* Blockchain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Blockchain.swift; path = Sources/Generated/Enums/Blockchain.swift; sourceTree = ""; }; @@ -3004,10 +3004,10 @@ F1F8C11C9E260CF0E46E2E79EED0E01F /* Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Compression.swift; path = Sources/Starscream/Compression.swift; sourceTree = ""; }; F2908085568BDFA4C2A1B9FE397B59D9 /* IntegersDifference.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IntegersDifference.swift; path = Web3Swift/IntegerScalar/IntegersDifference.swift; sourceTree = ""; }; F3222A29047C86AB62E3523977D9B6BE /* Aeternity+Proto.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Aeternity+Proto.swift"; path = "Sources/Generated/Protobuf/Aeternity+Proto.swift"; sourceTree = ""; }; - F32FBB742C2738F997207F1797526411 /* BlockiesSwift-macOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "BlockiesSwift-macOS"; path = BlockiesSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F32FBB742C2738F997207F1797526411 /* BlockiesSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BlockiesSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F34AF5D3AD2390488786F8B54E306C53 /* BigInt-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "BigInt-iOS.release.xcconfig"; sourceTree = ""; }; F36AFE300F9414A745EBCA38BF6F0793 /* BlockiesSwift-macOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "BlockiesSwift-macOS-Info.plist"; path = "../BlockiesSwift-macOS/BlockiesSwift-macOS-Info.plist"; sourceTree = ""; }; - F3E0621221B49CBB46826033D3DEB84B /* BigInt-iOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "BigInt-iOS"; path = BigInt.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F3E0621221B49CBB46826033D3DEB84B /* BigInt.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BigInt.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F477981B13F766CFB17A91FA2EE77BCE /* ABIFixedBytes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABIFixedBytes.swift; path = Web3Swift/ABI/Parameters/ABIFixedBytes.swift; sourceTree = ""; }; F4A47A3986B19C147E85C6C5D4CE2E6E /* AES.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AES.swift; path = Sources/Generated/AES.swift; sourceTree = ""; }; F4BD75BDE9197FA11D05E3DB09EECE26 /* NetworkID.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkID.swift; path = Web3Swift/Network/NetworkID.swift; sourceTree = ""; }; @@ -3333,7 +3333,6 @@ 9A53640AB956DFCA4C8EF82ED76DD758 /* WebSocket.swift */, C71AB877350EC9D4B2D79081043D40FD /* Support Files */, ); - name = Starscream; path = Starscream; sourceTree = ""; }; @@ -3437,7 +3436,6 @@ 9CF8C6D3643C6B51E0565BCE090D93C9 /* Color+HSL.swift */, 07A9F8832743F68D6B5968FE07B47600 /* Support Files */, ); - name = BlockiesSwift; path = BlockiesSwift; sourceTree = ""; }; @@ -3707,7 +3705,6 @@ 9B5AA4AAC34804E752EFD36C72FED29E /* Support Files */, 0A6D13621F4C9E36968E970C87F51D82 /* UIKit */, ); - name = PromiseKit; path = PromiseKit; sourceTree = ""; }; @@ -3777,7 +3774,6 @@ 07AFF55DD9509B0ADFA8DD5470449019 /* WKInterfaceImage+Kingfisher.swift */, EFE1583976262F21E1BD3CF0405AA575 /* Support Files */, ); - name = Kingfisher; path = Kingfisher; sourceTree = ""; }; @@ -4002,7 +3998,6 @@ 75DFF490DEECC92627E8E1590567E42F /* ZeroPadding.swift */, 5BC4EB9BE2CEE58C7B86D710296467B0 /* Support Files */, ); - name = CryptoSwift; path = CryptoSwift; sourceTree = ""; }; @@ -4013,7 +4008,6 @@ 205107D07A421F88C465DF035BC02DCE /* Support Files */, 875CAA567A0A1FDA782AF9B4DEDADDE2 /* Types */, ); - name = TrustWalletCore; path = TrustWalletCore; sourceTree = ""; }; @@ -4073,32 +4067,32 @@ A5855B6D3749CDD57EA4140F93CDF605 /* Products */ = { isa = PBXGroup; children = ( - F3E0621221B49CBB46826033D3DEB84B /* BigInt-iOS */, - 59C5DD41EE313A65C03650784BF278F3 /* BigInt-macOS */, - C1FAADCAF1476091AA79DD1F86D70AF2 /* BlockiesSwift-iOS */, - F32FBB742C2738F997207F1797526411 /* BlockiesSwift-macOS */, - 5149F2ED76FF28D39794B30B6B89D8E4 /* CryptoSwift-iOS */, - 9F31F040285B537203E6C689A6967D3C /* CryptoSwift-macOS */, + F3E0621221B49CBB46826033D3DEB84B /* BigInt.framework */, + 59C5DD41EE313A65C03650784BF278F3 /* BigInt.framework */, + C1FAADCAF1476091AA79DD1F86D70AF2 /* BlockiesSwift.framework */, + F32FBB742C2738F997207F1797526411 /* BlockiesSwift.framework */, + 5149F2ED76FF28D39794B30B6B89D8E4 /* CryptoSwift.framework */, + 9F31F040285B537203E6C689A6967D3C /* CryptoSwift.framework */, 0C37C0511F5A16369B30672CB6BA6D00 /* Kingfisher-iOS */, - 9537468CF4D5C16DB31E0F967000827C /* Kingfisher-macOS */, - 95BAA53196A79D500C92AFCCDED26039 /* Pods-Tokenary */, + 9537468CF4D5C16DB31E0F967000827C /* Kingfisher.framework */, + 95BAA53196A79D500C92AFCCDED26039 /* Pods_Tokenary.framework */, 985063CF25F026FD329CB9B4D9F3E0A6 /* Pods-Tokenary iOS */, - 002B1E88BA14EBF633CD66EBFBA107E9 /* PromiseKit */, - 5481CE46D30AC5DDB94028EDFFE79583 /* PromiseKit.root-CorePromise-Foundation */, - 0A8C7427D934CD1C549FEC3C80A27C2D /* secp256k1.swift-iOS */, - C153DF02560BBDF1DDE1F84886704667 /* secp256k1.swift-macOS */, - 736F917F1E77A2FE338BD1AC9584EDE1 /* Starscream-iOS */, - B1C3BF17AD01C0E200A831FFB3579063 /* Starscream-macOS */, - 8AF0E4BE6CB89D1A02A14081360DFD8C /* SwiftProtobuf-iOS */, - 5F52C76D0CC7F92C551EC2E40D9320AB /* SwiftProtobuf-macOS */, - 6F348CF3DF73CCBE882148B54AFDFDD5 /* SwiftyJSON-iOS */, - 4F8AD269CABED4BA00EA90C05C8D1BCF /* SwiftyJSON-macOS */, + 002B1E88BA14EBF633CD66EBFBA107E9 /* PromiseKit.framework */, + 5481CE46D30AC5DDB94028EDFFE79583 /* PromiseKit.framework */, + 0A8C7427D934CD1C549FEC3C80A27C2D /* secp256k1.framework */, + C153DF02560BBDF1DDE1F84886704667 /* secp256k1.framework */, + 736F917F1E77A2FE338BD1AC9584EDE1 /* Starscream.framework */, + B1C3BF17AD01C0E200A831FFB3579063 /* Starscream.framework */, + 8AF0E4BE6CB89D1A02A14081360DFD8C /* SwiftProtobuf.framework */, + 5F52C76D0CC7F92C551EC2E40D9320AB /* SwiftProtobuf.framework */, + 6F348CF3DF73CCBE882148B54AFDFDD5 /* SwiftyJSON.framework */, + 4F8AD269CABED4BA00EA90C05C8D1BCF /* SwiftyJSON.framework */, 60CD9336BF0D87EB43F318C3C417DB66 /* TrustWalletCore-iOS */, - 0A90AABC168E7ACBF249426FCA99F19B /* TrustWalletCore-macOS */, - 14947ABD97F09420FCF875C8739F13AC /* WalletConnect-iOS */, - 9D756198C12012F347EA72608A363520 /* WalletConnect-macOS */, - 47766325122C7F194DB0E39F8C0EA1D7 /* Web3Swift.io-iOS */, - 9928802C73CCE6B111B318D4E499EDFE /* Web3Swift.io-macOS */, + 0A90AABC168E7ACBF249426FCA99F19B /* WalletCore.framework */, + 14947ABD97F09420FCF875C8739F13AC /* WalletConnect.framework */, + 9D756198C12012F347EA72608A363520 /* WalletConnect.framework */, + 47766325122C7F194DB0E39F8C0EA1D7 /* Web3Swift.framework */, + 9928802C73CCE6B111B318D4E499EDFE /* Web3Swift.framework */, ); name = Products; sourceTree = ""; @@ -4130,7 +4124,6 @@ 789554057AC2CBB980C0E78435B0512C /* Words and Bits.swift */, 1DDC4DD36F09EDF1B38D7A46F9F7DF85 /* Support Files */, ); - name = BigInt; path = BigInt; sourceTree = ""; }; @@ -4190,7 +4183,6 @@ BA60CBBEC9AE8EBBEC9E78957A4B7393 /* util.h */, 370EA5FDCA1FB34354B92D1B983A8FE9 /* Support Files */, ); - name = secp256k1.swift; path = secp256k1.swift; sourceTree = ""; }; @@ -4291,7 +4283,6 @@ 95102D1B76B0B31192F8AF763158F0AE /* ZigZag.swift */, 9E90392D944E8C522612A966097511B6 /* Support Files */, ); - name = SwiftProtobuf; path = SwiftProtobuf; sourceTree = ""; }; @@ -4529,7 +4520,6 @@ EA0FA7BC44963F060BCAFEFB6A800482 /* Zero.swift */, 66AC708F1F62479C1B92D324958A5FF1 /* Support Files */, ); - name = Web3Swift.io; path = Web3Swift.io; sourceTree = ""; }; @@ -4572,7 +4562,6 @@ F54D748C9372D0EB638B1266384C0AC4 /* SwiftyJSON.swift */, 0C74DD4D55D972DE5B166ECD9FD9020A /* Support Files */, ); - name = SwiftyJSON; path = SwiftyJSON; sourceTree = ""; }; @@ -4610,7 +4599,6 @@ 014AAE16398AA2FD3B2B46E9E818A7E2 /* WCTrustTransaction.swift */, 3E25AC8D3C770FCD3576CD06C394A9D8 /* Support Files */, ); - name = WalletConnect; path = WalletConnect; sourceTree = ""; }; @@ -5180,7 +5168,7 @@ ); name = "secp256k1.swift-iOS"; productName = secp256k1; - productReference = 0A8C7427D934CD1C549FEC3C80A27C2D /* secp256k1.swift-iOS */; + productReference = 0A8C7427D934CD1C549FEC3C80A27C2D /* secp256k1.framework */; productType = "com.apple.product-type.framework"; }; 218BFCBCA0EA83AEA95CE87303914A04 /* CryptoSwift-iOS */ = { @@ -5198,7 +5186,7 @@ ); name = "CryptoSwift-iOS"; productName = CryptoSwift; - productReference = 5149F2ED76FF28D39794B30B6B89D8E4 /* CryptoSwift-iOS */; + productReference = 5149F2ED76FF28D39794B30B6B89D8E4 /* CryptoSwift.framework */; productType = "com.apple.product-type.framework"; }; 357D7AA757B0ED4603C9CD1523BC234E /* SwiftProtobuf-iOS */ = { @@ -5216,7 +5204,7 @@ ); name = "SwiftProtobuf-iOS"; productName = SwiftProtobuf; - productReference = 8AF0E4BE6CB89D1A02A14081360DFD8C /* SwiftProtobuf-iOS */; + productReference = 8AF0E4BE6CB89D1A02A14081360DFD8C /* SwiftProtobuf.framework */; productType = "com.apple.product-type.framework"; }; 35A10C11B6EB213A0C198A376AD46F6F /* BlockiesSwift-macOS */ = { @@ -5234,7 +5222,7 @@ ); name = "BlockiesSwift-macOS"; productName = BlockiesSwift; - productReference = F32FBB742C2738F997207F1797526411 /* BlockiesSwift-macOS */; + productReference = F32FBB742C2738F997207F1797526411 /* BlockiesSwift.framework */; productType = "com.apple.product-type.framework"; }; 3FB9960D64D53D6503E6FAAD232651AC /* SwiftyJSON-macOS */ = { @@ -5252,7 +5240,7 @@ ); name = "SwiftyJSON-macOS"; productName = SwiftyJSON; - productReference = 4F8AD269CABED4BA00EA90C05C8D1BCF /* SwiftyJSON-macOS */; + productReference = 4F8AD269CABED4BA00EA90C05C8D1BCF /* SwiftyJSON.framework */; productType = "com.apple.product-type.framework"; }; 452B8173099D29664E78F6AD3753D61C /* Starscream-iOS */ = { @@ -5270,7 +5258,7 @@ ); name = "Starscream-iOS"; productName = Starscream; - productReference = 736F917F1E77A2FE338BD1AC9584EDE1 /* Starscream-iOS */; + productReference = 736F917F1E77A2FE338BD1AC9584EDE1 /* Starscream.framework */; productType = "com.apple.product-type.framework"; }; 4CCFFBCA064B3C42D03AD4F634DA5AF4 /* WalletConnect-iOS */ = { @@ -5291,7 +5279,7 @@ ); name = "WalletConnect-iOS"; productName = WalletConnect; - productReference = 14947ABD97F09420FCF875C8739F13AC /* WalletConnect-iOS */; + productReference = 14947ABD97F09420FCF875C8739F13AC /* WalletConnect.framework */; productType = "com.apple.product-type.framework"; }; 63F854E532D7CBA393D37B6C84E1F23F /* BigInt-macOS */ = { @@ -5309,7 +5297,7 @@ ); name = "BigInt-macOS"; productName = BigInt; - productReference = 59C5DD41EE313A65C03650784BF278F3 /* BigInt-macOS */; + productReference = 59C5DD41EE313A65C03650784BF278F3 /* BigInt.framework */; productType = "com.apple.product-type.framework"; }; 65AA93B2B9CF39819DBD1DDF58FCBC15 /* Kingfisher-macOS */ = { @@ -5327,7 +5315,7 @@ ); name = "Kingfisher-macOS"; productName = Kingfisher; - productReference = 9537468CF4D5C16DB31E0F967000827C /* Kingfisher-macOS */; + productReference = 9537468CF4D5C16DB31E0F967000827C /* Kingfisher.framework */; productType = "com.apple.product-type.framework"; }; 65CF043BCE2D53116C7B4659477A3E72 /* CryptoSwift-macOS */ = { @@ -5345,7 +5333,7 @@ ); name = "CryptoSwift-macOS"; productName = CryptoSwift; - productReference = 9F31F040285B537203E6C689A6967D3C /* CryptoSwift-macOS */; + productReference = 9F31F040285B537203E6C689A6967D3C /* CryptoSwift.framework */; productType = "com.apple.product-type.framework"; }; 685A5AC5E317EE1D980ECCFE9E6EB08A /* Kingfisher-iOS */ = { @@ -5385,7 +5373,7 @@ ); name = "Web3Swift.io-macOS"; productName = Web3Swift; - productReference = 9928802C73CCE6B111B318D4E499EDFE /* Web3Swift.io-macOS */; + productReference = 9928802C73CCE6B111B318D4E499EDFE /* Web3Swift.framework */; productType = "com.apple.product-type.framework"; }; 7C579CE66A1E7A9AA33CA5F97F9C22C5 /* PromiseKit */ = { @@ -5403,7 +5391,7 @@ ); name = PromiseKit; productName = PromiseKit; - productReference = 002B1E88BA14EBF633CD66EBFBA107E9 /* PromiseKit */; + productReference = 002B1E88BA14EBF633CD66EBFBA107E9 /* PromiseKit.framework */; productType = "com.apple.product-type.framework"; }; 7EC291D8806D07E6BE8839E8A9C7844C /* WalletConnect-macOS */ = { @@ -5424,7 +5412,7 @@ ); name = "WalletConnect-macOS"; productName = WalletConnect; - productReference = 9D756198C12012F347EA72608A363520 /* WalletConnect-macOS */; + productReference = 9D756198C12012F347EA72608A363520 /* WalletConnect.framework */; productType = "com.apple.product-type.framework"; }; 889A3C6D0A70D789D17B7BFFE160AD76 /* BigInt-iOS */ = { @@ -5442,7 +5430,7 @@ ); name = "BigInt-iOS"; productName = BigInt; - productReference = F3E0621221B49CBB46826033D3DEB84B /* BigInt-iOS */; + productReference = F3E0621221B49CBB46826033D3DEB84B /* BigInt.framework */; productType = "com.apple.product-type.framework"; }; 88F35C8F653FAD94A8ED8126A7FF16AC /* Starscream-macOS */ = { @@ -5460,7 +5448,7 @@ ); name = "Starscream-macOS"; productName = Starscream; - productReference = B1C3BF17AD01C0E200A831FFB3579063 /* Starscream-macOS */; + productReference = B1C3BF17AD01C0E200A831FFB3579063 /* Starscream.framework */; productType = "com.apple.product-type.framework"; }; AA186741961F10502016CE44BFED6684 /* SwiftProtobuf-macOS */ = { @@ -5478,7 +5466,7 @@ ); name = "SwiftProtobuf-macOS"; productName = SwiftProtobuf; - productReference = 5F52C76D0CC7F92C551EC2E40D9320AB /* SwiftProtobuf-macOS */; + productReference = 5F52C76D0CC7F92C551EC2E40D9320AB /* SwiftProtobuf.framework */; productType = "com.apple.product-type.framework"; }; AA69821F03C2BC35F1E5A4AF5FE590CA /* Pods-Tokenary */ = { @@ -5508,7 +5496,7 @@ ); name = "Pods-Tokenary"; productName = Pods_Tokenary; - productReference = 95BAA53196A79D500C92AFCCDED26039 /* Pods-Tokenary */; + productReference = 95BAA53196A79D500C92AFCCDED26039 /* Pods_Tokenary.framework */; productType = "com.apple.product-type.framework"; }; B2CB0C3BB2520C312857C9F0535D50C1 /* BlockiesSwift-iOS */ = { @@ -5526,7 +5514,7 @@ ); name = "BlockiesSwift-iOS"; productName = BlockiesSwift; - productReference = C1FAADCAF1476091AA79DD1F86D70AF2 /* BlockiesSwift-iOS */; + productReference = C1FAADCAF1476091AA79DD1F86D70AF2 /* BlockiesSwift.framework */; productType = "com.apple.product-type.framework"; }; BF0C6CD2E713DE257EF65C62E5F27D8A /* SwiftyJSON-iOS */ = { @@ -5544,7 +5532,7 @@ ); name = "SwiftyJSON-iOS"; productName = SwiftyJSON; - productReference = 6F348CF3DF73CCBE882148B54AFDFDD5 /* SwiftyJSON-iOS */; + productReference = 6F348CF3DF73CCBE882148B54AFDFDD5 /* SwiftyJSON.framework */; productType = "com.apple.product-type.framework"; }; CDABDA4A53A54043CF943F76B7F4B954 /* Web3Swift.io-iOS */ = { @@ -5566,7 +5554,7 @@ ); name = "Web3Swift.io-iOS"; productName = Web3Swift; - productReference = 47766325122C7F194DB0E39F8C0EA1D7 /* Web3Swift.io-iOS */; + productReference = 47766325122C7F194DB0E39F8C0EA1D7 /* Web3Swift.framework */; productType = "com.apple.product-type.framework"; }; CE0DF9902CC5CC81D77770A1E35CCFDE /* Pods-Tokenary iOS */ = { @@ -5616,7 +5604,7 @@ ); name = "TrustWalletCore-macOS"; productName = WalletCore; - productReference = 0A90AABC168E7ACBF249426FCA99F19B /* TrustWalletCore-macOS */; + productReference = 0A90AABC168E7ACBF249426FCA99F19B /* WalletCore.framework */; productType = "com.apple.product-type.framework"; }; D91322818F7EF2905BF914BDDBAA819E /* PromiseKit.root-CorePromise-Foundation */ = { @@ -5634,7 +5622,7 @@ ); name = "PromiseKit.root-CorePromise-Foundation"; productName = PromiseKit; - productReference = 5481CE46D30AC5DDB94028EDFFE79583 /* PromiseKit.root-CorePromise-Foundation */; + productReference = 5481CE46D30AC5DDB94028EDFFE79583 /* PromiseKit.framework */; productType = "com.apple.product-type.framework"; }; DC6F436FE9D7D62655988D0B8E3A24DE /* TrustWalletCore-iOS */ = { @@ -5672,7 +5660,7 @@ ); name = "secp256k1.swift-macOS"; productName = secp256k1; - productReference = C153DF02560BBDF1DDE1F84886704667 /* secp256k1.swift-macOS */; + productReference = C153DF02560BBDF1DDE1F84886704667 /* secp256k1.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -5682,7 +5670,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 1240; - LastUpgradeCheck = 1240; + LastUpgradeCheck = 1340; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 12.0"; @@ -7762,7 +7750,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 0BA80F2E568112A8DFD371CA24CAC81C /* BlockiesSwift-macOS.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7798,7 +7785,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 390ABCDE472547C16EB00E9DB461822B /* SwiftProtobuf-macOS.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -7833,7 +7819,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = EC7997CD6D7496BB2C3E2DC2A993C9FB /* Starscream-macOS.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7869,7 +7854,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = C14626F40E1AA180DFAC3E0D5942E618 /* SwiftyJSON-macOS.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -7904,7 +7888,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 273BC4B2C5057A11D57B322C09D5D7D6 /* CryptoSwift-macOS.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7940,7 +7923,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 1DAFA04A5E9C41CE8562319E839D78B0 /* Web3Swift.io-macOS.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7987,7 +7969,7 @@ GCC_PREFIX_HEADER = "Target Support Files/Starscream-iOS/Starscream-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/Starscream-iOS/Starscream-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -8010,7 +7992,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = C2EACCC0F42260CA492ACCC1CD42A2AF /* Starscream-macOS.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8046,7 +8027,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 47CC1D589377296F6FA02396566EA5D3 /* BigInt-macOS.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -8081,7 +8061,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 2214C2C790E97F0097C12CBD193AAA68 /* TrustWalletCore-macOS.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8128,7 +8107,7 @@ GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON-iOS/SwiftyJSON-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/SwiftyJSON-iOS/SwiftyJSON-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -8163,7 +8142,7 @@ GCC_PREFIX_HEADER = "Target Support Files/WalletConnect-iOS/WalletConnect-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/WalletConnect-iOS/WalletConnect-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -8186,7 +8165,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 87800D42FD059EA935829B15A047A500 /* CryptoSwift-macOS.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8295,7 +8273,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 7C2B1EC28E1C60F4D03BB0514B042E9B /* Kingfisher-macOS.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8342,7 +8319,7 @@ GCC_PREFIX_HEADER = "Target Support Files/secp256k1.swift-iOS/secp256k1.swift-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/secp256k1.swift-iOS/secp256k1.swift-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -8377,7 +8354,7 @@ GCC_PREFIX_HEADER = "Target Support Files/CryptoSwift-iOS/CryptoSwift-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/CryptoSwift-iOS/CryptoSwift-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -8412,7 +8389,7 @@ GCC_PREFIX_HEADER = "Target Support Files/SwiftProtobuf-iOS/SwiftProtobuf-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/SwiftProtobuf-iOS/SwiftProtobuf-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -8448,7 +8425,7 @@ GCC_PREFIX_HEADER = "Target Support Files/Web3Swift.io-iOS/Web3Swift.io-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/Web3Swift.io-iOS/Web3Swift.io-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -8482,7 +8459,7 @@ GCC_PREFIX_HEADER = "Target Support Files/SwiftProtobuf-iOS/SwiftProtobuf-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/SwiftProtobuf-iOS/SwiftProtobuf-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -8516,7 +8493,7 @@ GCC_PREFIX_HEADER = "Target Support Files/PromiseKit/PromiseKit-prefix.pch"; INFOPLIST_FILE = "Target Support Files/PromiseKit/PromiseKit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -8551,7 +8528,7 @@ GCC_PREFIX_HEADER = "Target Support Files/Starscream-iOS/Starscream-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/Starscream-iOS/Starscream-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -8586,7 +8563,7 @@ GCC_PREFIX_HEADER = "Target Support Files/BlockiesSwift-iOS/BlockiesSwift-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/BlockiesSwift-iOS/BlockiesSwift-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -8610,7 +8587,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 8301BD8D30B903B68C94CDAEB3446534 /* secp256k1.swift-macOS.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8657,7 +8633,7 @@ GCC_PREFIX_HEADER = "Target Support Files/CryptoSwift-iOS/CryptoSwift-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/CryptoSwift-iOS/CryptoSwift-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -8691,7 +8667,7 @@ GCC_PREFIX_HEADER = "Target Support Files/BigInt-iOS/BigInt-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/BigInt-iOS/BigInt-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -8714,7 +8690,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 8E1345A6B6D322ADE1E82E09AEDB905F /* TrustWalletCore-macOS.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8786,7 +8761,6 @@ baseConfigurationReference = 37F715D9963765B2EEAA9F7766C7D941 /* Pods-Tokenary.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -8822,7 +8796,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = D72DC41EE038B75ADCBC715209BE389D /* BigInt-macOS.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -8857,7 +8830,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 02791ADA26711109BA42F448CC9CF5A9 /* SwiftProtobuf-macOS.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -9022,7 +8994,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 87695604C96BF60B268F19399472F489 /* Kingfisher-macOS.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9070,7 +9041,7 @@ GCC_PREFIX_HEADER = "Target Support Files/WalletConnect-iOS/WalletConnect-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/WalletConnect-iOS/WalletConnect-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -9095,7 +9066,6 @@ baseConfigurationReference = 6C79B6EDDAC5013D98434F63A8C458B6 /* Pods-Tokenary.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -9179,7 +9149,7 @@ GCC_PREFIX_HEADER = "Target Support Files/Web3Swift.io-iOS/Web3Swift.io-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/Web3Swift.io-iOS/Web3Swift.io-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -9203,7 +9173,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = AECAF7D6B4A911CADC2CA55E3897D947 /* WalletConnect-macOS.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9239,7 +9208,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = F5D52F6423D1309CC6918AD89DAA8F71 /* SwiftyJSON-macOS.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -9285,7 +9253,7 @@ GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON-iOS/SwiftyJSON-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/SwiftyJSON-iOS/SwiftyJSON-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -9309,7 +9277,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 9A2FE9D4C635B69B906E48B1D22045F4 /* BlockiesSwift-macOS.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9380,7 +9347,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = E7E079BF70C0F9A402E7AA629A539CAC /* Web3Swift.io-macOS.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9416,7 +9382,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = BC83A402689552FE2D2BDE1503D2EB3D /* PromiseKit.root-CorePromise-Foundation.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9490,7 +9455,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 7E80BD81C453D7250418970CEFD54E17 /* secp256k1.swift-macOS.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9526,7 +9490,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 287ADD293009F5EF0EC69A8E5225C972 /* PromiseKit.root-CorePromise-Foundation.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9573,7 +9536,7 @@ GCC_PREFIX_HEADER = "Target Support Files/BigInt-iOS/BigInt-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/BigInt-iOS/BigInt-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -9608,7 +9571,7 @@ GCC_PREFIX_HEADER = "Target Support Files/PromiseKit/PromiseKit-prefix.pch"; INFOPLIST_FILE = "Target Support Files/PromiseKit/PromiseKit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -9642,7 +9605,7 @@ GCC_PREFIX_HEADER = "Target Support Files/secp256k1.swift-iOS/secp256k1.swift-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/secp256k1.swift-iOS/secp256k1.swift-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -9676,7 +9639,7 @@ GCC_PREFIX_HEADER = "Target Support Files/BlockiesSwift-iOS/BlockiesSwift-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/BlockiesSwift-iOS/BlockiesSwift-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -9699,7 +9662,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = CF1DF0BA75DC25EC8E993F812D24C614 /* WalletConnect-macOS.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; From a4f450b030ff51c3856142cc315d4b273f2c81fc Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Tue, 23 Aug 2022 18:00:48 +0300 Subject: [PATCH 02/24] Use SelectAccountAction instead of AccountSelectionConfiguration --- .../AccountSelectionConfiguration.swift | 12 ----- Shared/Models/DappRequestAction.swift | 5 +- Shared/Services/DappRequestProcessor.swift | 25 ++++++---- Tokenary macOS/Agent.swift | 20 +++----- .../Screens/AccountsListViewController.swift | 50 +++++++++---------- .../Screens/EditAccountsViewController.swift | 4 +- .../Screens/ImportViewController.swift | 4 +- Tokenary.xcodeproj/project.pbxproj | 6 --- 8 files changed, 56 insertions(+), 70 deletions(-) delete mode 100644 Shared/Models/AccountSelectionConfiguration.swift diff --git a/Shared/Models/AccountSelectionConfiguration.swift b/Shared/Models/AccountSelectionConfiguration.swift deleted file mode 100644 index 08e002b0..00000000 --- a/Shared/Models/AccountSelectionConfiguration.swift +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright © 2022 Tokenary. All rights reserved. - -import Foundation -import WalletCore - -struct AccountSelectionConfiguration { - let peer: PeerMeta? - let coinType: CoinType? - var selectedAccounts: Set - let initiallyConnectedProviders: Set - let completion: ((EthereumChain?, [SpecificWalletAccount]?) -> Void) -} diff --git a/Shared/Models/DappRequestAction.swift b/Shared/Models/DappRequestAction.swift index 52299ce5..af8b817f 100644 --- a/Shared/Models/DappRequestAction.swift +++ b/Shared/Models/DappRequestAction.swift @@ -13,9 +13,10 @@ enum DappRequestAction { } struct SelectAccountAction { - let provider: Web3Provider + let peer: PeerMeta? + let coinType: CoinType? + var selectedAccounts: Set let initiallyConnectedProviders: Set - let preselectedAccounts: [SpecificWalletAccount] let completion: (EthereumChain?, [SpecificWalletAccount]?) -> Void } diff --git a/Shared/Services/DappRequestProcessor.swift b/Shared/Services/DappRequestProcessor.swift index bf39776b..18b3de10 100644 --- a/Shared/Services/DappRequestProcessor.swift +++ b/Shared/Services/DappRequestProcessor.swift @@ -37,9 +37,10 @@ struct DappRequestProcessor { return walletsManager.getSpecificAccount(coin: coin, address: configuration.address) } let initiallyConnectedProviders = Set(body.providerConfigurations.map { $0.provider }) - let action = SelectAccountAction(provider: .unknown, - initiallyConnectedProviders: initiallyConnectedProviders, - preselectedAccounts: preselectedAccounts) { chain, specificWalletAccounts in + let action = SelectAccountAction(peer: request.peerMeta, + coinType: nil, + selectedAccounts: Set(preselectedAccounts), + initiallyConnectedProviders: initiallyConnectedProviders) { chain, specificWalletAccounts in if let chain = chain, let specificWalletAccounts = specificWalletAccounts { var specificProviderBodies = [ResponseToExtension.Body]() for specificWalletAccount in specificWalletAccounts { @@ -86,8 +87,10 @@ struct DappRequestProcessor { switch body.method { case .signIn: - let suggestedAccounts = walletsManager.suggestedAccounts(coin: .near) - let action = SelectAccountAction(provider: .near, initiallyConnectedProviders: Set(), preselectedAccounts: suggestedAccounts) { _, specificWalletAccounts in + let action = SelectAccountAction(peer: peerMeta, + coinType: .near, + selectedAccounts: Set(walletsManager.suggestedAccounts(coin: .near)), + initiallyConnectedProviders: Set()) { _, specificWalletAccounts in if let specificWalletAccount = specificWalletAccounts?.first, specificWalletAccount.account.coin == .near { let responseBody = ResponseToExtension.Near(account: specificWalletAccount.account.address) respond(to: request, body: .near(responseBody), completion: completion) @@ -138,8 +141,10 @@ struct DappRequestProcessor { switch body.method { case .connect: - let suggestedAccounts = walletsManager.suggestedAccounts(coin: .solana) - let action = SelectAccountAction(provider: .solana, initiallyConnectedProviders: Set(), preselectedAccounts: suggestedAccounts) { _, specificWalletAccounts in + let action = SelectAccountAction(peer: peerMeta, + coinType: .solana, + selectedAccounts: Set(walletsManager.suggestedAccounts(coin: .solana)), + initiallyConnectedProviders: Set()) { _, specificWalletAccounts in if let specificWalletAccount = specificWalletAccounts?.first, specificWalletAccount.account.coin == .solana { let responseBody = ResponseToExtension.Solana(publicKey: specificWalletAccount.account.address) respond(to: request, body: .solana(responseBody), completion: completion) @@ -219,8 +224,10 @@ struct DappRequestProcessor { switch ethereumRequest.method { case .requestAccounts: - let suggestedAccounts = walletsManager.suggestedAccounts(coin: .ethereum) - let action = SelectAccountAction(provider: .ethereum, initiallyConnectedProviders: Set(), preselectedAccounts: suggestedAccounts) { chain, specificWalletAccounts in + let action = SelectAccountAction(peer: peerMeta, + coinType: .ethereum, + selectedAccounts: Set(walletsManager.suggestedAccounts(coin: .ethereum)), + initiallyConnectedProviders: Set()) { chain, specificWalletAccounts in if let chain = chain, let specificWalletAccount = specificWalletAccounts?.first, specificWalletAccount.account.coin == .ethereum { let responseBody = ResponseToExtension.Ethereum(results: [specificWalletAccount.account.address], chainId: chain.hexStringId, rpcURL: chain.nodeURLString) respond(to: request, body: .ethereum(responseBody), completion: completion) diff --git a/Tokenary macOS/Agent.swift b/Tokenary macOS/Agent.swift index 4e30b5ae..5accbf64 100644 --- a/Tokenary macOS/Agent.swift +++ b/Tokenary macOS/Agent.swift @@ -16,6 +16,7 @@ class Agent: NSObject { static let shared = Agent() private let walletConnect = WalletConnect.shared + private let walletsManager = WalletsManager.shared private override init() { super.init() } private var statusBarItem: NSStatusItem! @@ -79,14 +80,14 @@ class Agent: NSObject { let accountsList = instantiate(AccountsListViewController.self) if case let .wcSession(session) = request, let completion = onSelectedWallet(session: session) { - accountsList.accountSelectionConfiguration = AccountSelectionConfiguration(peer: nil, - coinType: .ethereum, - selectedAccounts: Set(), - initiallyConnectedProviders: Set(), - completion: completion) + accountsList.selectAccountAction = SelectAccountAction(peer: nil, + coinType: .ethereum, + selectedAccounts: Set(walletsManager.suggestedAccounts(coin: .ethereum)), + initiallyConnectedProviders: Set(), + completion: completion) } - let windowController = Window.showNew(closeOthers: accountsList.accountSelectionConfiguration == nil) + let windowController = Window.showNew(closeOthers: accountsList.selectAccountAction == nil) windowController.contentViewController = accountsList } } @@ -322,12 +323,7 @@ class Agent: NSObject { let windowController = Window.showNew(closeOthers: closeOtherWindows) windowNumber = windowController.window?.windowNumber let accountsList = instantiate(AccountsListViewController.self) - let coinType = CoinType.correspondingToWeb3Provider(accountAction.provider) - accountsList.accountSelectionConfiguration = AccountSelectionConfiguration(peer: safariRequest.peerMeta, - coinType: coinType, - selectedAccounts: Set(accountAction.preselectedAccounts), - initiallyConnectedProviders: accountAction.initiallyConnectedProviders, - completion: accountAction.completion) + accountsList.selectAccountAction = accountAction windowController.contentViewController = accountsList case .approveMessage(let action): let windowController = Window.showNew(closeOthers: false) diff --git a/Tokenary macOS/Screens/AccountsListViewController.swift b/Tokenary macOS/Screens/AccountsListViewController.swift index c3aa6d2d..b12a2cee 100644 --- a/Tokenary macOS/Screens/AccountsListViewController.swift +++ b/Tokenary macOS/Screens/AccountsListViewController.swift @@ -10,7 +10,7 @@ class AccountsListViewController: NSViewController { private var cellModels = [CellModel]() private var chain = EthereumChain.ethereum private var didCallCompletion = false - var accountSelectionConfiguration: AccountSelectionConfiguration? + var selectAccountAction: SelectAccountAction? var newWalletId: String? var getBackToRect: CGRect? @@ -83,7 +83,7 @@ class AccountsListViewController: NSViewController { updateCellModels() NotificationCenter.default.addObserver(self, selector: #selector(walletsChanged), name: Notification.Name.walletsChanged, object: nil) - if let preselectedAccount = accountSelectionConfiguration?.selectedAccounts.first { + if let preselectedAccount = selectAccountAction?.selectedAccounts.first { scrollTo(specificWalletAccount: preselectedAccount) } } @@ -105,16 +105,16 @@ class AccountsListViewController: NSViewController { private func callCompletion(specificWalletAccounts: [SpecificWalletAccount]?) { if !didCallCompletion { didCallCompletion = true - accountSelectionConfiguration?.completion(chain, specificWalletAccounts) + selectAccountAction?.completion(chain, specificWalletAccounts) } } private func updateBottomButtons() { - if let accountSelectionConfiguration = accountSelectionConfiguration { + if let selectAccountAction = selectAccountAction { accountsListBottomConstraint.constant = 62 bottomButtonsStackView.isHidden = false - if !accountSelectionConfiguration.initiallyConnectedProviders.isEmpty { + if !selectAccountAction.initiallyConnectedProviders.isEmpty { primaryButton.title = Strings.ok secondaryButton.title = Strings.disconnect secondaryButton.keyEquivalent = "" @@ -128,15 +128,15 @@ class AccountsListViewController: NSViewController { } private func updatePrimaryButton() { - primaryButton.isEnabled = accountSelectionConfiguration?.selectedAccounts.isEmpty == false + primaryButton.isEnabled = selectAccountAction?.selectedAccounts.isEmpty == false } private func reloadHeader() { - let canSelectAccount = accountSelectionConfiguration != nil && !wallets.isEmpty + let canSelectAccount = selectAccountAction != nil && !wallets.isEmpty titleLabel.stringValue = canSelectAccount ? Strings.selectAccountTwoLines : Strings.wallets addButton.isHidden = wallets.isEmpty - if canSelectAccount, let peer = accountSelectionConfiguration?.peer { + if canSelectAccount, let peer = selectAccountAction?.peer { websiteNameLabel.stringValue = peer.name titleLabelTopConstraint.constant = 14 websiteNameStackView.isHidden = false @@ -154,7 +154,7 @@ class AccountsListViewController: NSViewController { websiteNameStackView.isHidden = true } - let canSelectNetworkForCurrentProvider = accountSelectionConfiguration?.coinType == .ethereum || accountSelectionConfiguration?.coinType == nil + let canSelectNetworkForCurrentProvider = selectAccountAction?.coinType == .ethereum || selectAccountAction?.coinType == nil if canSelectAccount, networkButton.isHidden, canSelectNetworkForCurrentProvider { networkButton.isHidden = false let menu = NSMenu() @@ -210,7 +210,7 @@ class AccountsListViewController: NSViewController { } @IBAction func didClickSecondaryButton(_ sender: Any) { - if accountSelectionConfiguration?.initiallyConnectedProviders.isEmpty == false { + if selectAccountAction?.initiallyConnectedProviders.isEmpty == false { callCompletion(specificWalletAccounts: []) } else { callCompletion(specificWalletAccounts: nil) @@ -218,7 +218,7 @@ class AccountsListViewController: NSViewController { } @IBAction func didClickPrimaryButton(_ sender: Any) { - callCompletion(specificWalletAccounts: accountSelectionConfiguration?.selectedAccounts.map { $0 }) + callCompletion(specificWalletAccounts: selectAccountAction?.selectedAccounts.map { $0 }) } @objc private func didSelectChain(_ sender: AnyObject) { @@ -280,7 +280,7 @@ class AccountsListViewController: NSViewController { @objc private func didClickImportAccount() { let importViewController = instantiate(ImportViewController.self) - importViewController.accountSelectionConfiguration = accountSelectionConfiguration + importViewController.selectAccountAction = selectAccountAction view.window?.contentViewController = importViewController } @@ -306,7 +306,7 @@ class AccountsListViewController: NSViewController { } override func cancelOperation(_ sender: Any?) { - if accountSelectionConfiguration?.initiallyConnectedProviders.isEmpty == false { + if selectAccountAction?.initiallyConnectedProviders.isEmpty == false { callCompletion(specificWalletAccounts: nil) } } @@ -496,35 +496,35 @@ class AccountsListViewController: NSViewController { } private func validateSelectedAccounts() { - guard let specificWalletAccounts = accountSelectionConfiguration?.selectedAccounts else { return } + guard let specificWalletAccounts = selectAccountAction?.selectedAccounts else { return } for specificWalletAccount in specificWalletAccounts { if let wallet = wallets.first(where: { $0.id == specificWalletAccount.walletId }), wallet.accounts.contains(specificWalletAccount.account) { continue } else { - accountSelectionConfiguration?.selectedAccounts.remove(specificWalletAccount) + selectAccountAction?.selectedAccounts.remove(specificWalletAccount) } } } private func didClickAccountInSelectionMode(specificWalletAccount: SpecificWalletAccount) { - let wasSelected = accountSelectionConfiguration?.selectedAccounts.contains(specificWalletAccount) == true + let wasSelected = selectAccountAction?.selectedAccounts.contains(specificWalletAccount) == true - if !wasSelected, let toDeselect = accountSelectionConfiguration?.selectedAccounts.first(where: { $0.account.coin == specificWalletAccount.account.coin }) { - accountSelectionConfiguration?.selectedAccounts.remove(toDeselect) + if !wasSelected, let toDeselect = selectAccountAction?.selectedAccounts.first(where: { $0.account.coin == specificWalletAccount.account.coin }) { + selectAccountAction?.selectedAccounts.remove(toDeselect) } if wasSelected { - accountSelectionConfiguration?.selectedAccounts.remove(specificWalletAccount) + selectAccountAction?.selectedAccounts.remove(specificWalletAccount) } else { - accountSelectionConfiguration?.selectedAccounts.insert(specificWalletAccount) + selectAccountAction?.selectedAccounts.insert(specificWalletAccount) } updatePrimaryButton() } private func accountCanBeSelected(_ account: Account) -> Bool { - return accountSelectionConfiguration?.coinType == nil || accountSelectionConfiguration?.coinType == account.coin + return selectAccountAction?.coinType == nil || selectAccountAction?.coinType == account.coin } } @@ -576,7 +576,7 @@ extension AccountsListViewController: AccountsHeaderDelegate { guard let wallet = walletForRow(row) else { return } let editAccountsViewController = instantiate(EditAccountsViewController.self) - editAccountsViewController.accountSelectionConfiguration = accountSelectionConfiguration + editAccountsViewController.selectAccountAction = selectAccountAction editAccountsViewController.wallet = wallet editAccountsViewController.getBackToRect = tableView.visibleRect view.window?.contentViewController = editAccountsViewController @@ -624,7 +624,7 @@ extension AccountsListViewController: NSTableViewDelegate { return false } - if accountSelectionConfiguration != nil { + if selectAccountAction != nil { if accountCanBeSelected(account) { let specificWalletAccount = SpecificWalletAccount(walletId: wallet.id, account: account) didClickAccountInSelectionMode(specificWalletAccount: specificWalletAccount) @@ -649,7 +649,7 @@ extension AccountsListViewController: NSTableViewDataSource { let rowView = tableView.makeViewOfType(AccountCellView.self, owner: self) let account = wallet.accounts[0] let specificWalletAccount = SpecificWalletAccount(walletId: wallet.id, account: account) - let isSelected = accountSelectionConfiguration?.selectedAccounts.contains(specificWalletAccount) == true + let isSelected = selectAccountAction?.selectedAccounts.contains(specificWalletAccount) == true rowView.setup(account: account, isSelected: isSelected, isDisabled: !accountCanBeSelected(account)) return rowView case let .mnemonicAccount(walletIndex: walletIndex, accountIndex: accountIndex): @@ -657,7 +657,7 @@ extension AccountsListViewController: NSTableViewDataSource { let rowView = tableView.makeViewOfType(AccountCellView.self, owner: self) let account = wallet.accounts[accountIndex] let specificWalletAccount = SpecificWalletAccount(walletId: wallet.id, account: account) - let isSelected = accountSelectionConfiguration?.selectedAccounts.contains(specificWalletAccount) == true + let isSelected = selectAccountAction?.selectedAccounts.contains(specificWalletAccount) == true rowView.setup(account: account, isSelected: isSelected, isDisabled: !accountCanBeSelected(account)) return rowView case .mnemonicWalletHeader: diff --git a/Tokenary macOS/Screens/EditAccountsViewController.swift b/Tokenary macOS/Screens/EditAccountsViewController.swift index ebb93992..879d3a1c 100644 --- a/Tokenary macOS/Screens/EditAccountsViewController.swift +++ b/Tokenary macOS/Screens/EditAccountsViewController.swift @@ -7,7 +7,7 @@ class EditAccountsViewController: NSViewController { var wallet: TokenaryWallet! var getBackToRect: CGRect? - var accountSelectionConfiguration: AccountSelectionConfiguration? + var selectAccountAction: SelectAccountAction? struct CoinDerivationCellModel { let coinDerivation: CoinDerivation @@ -64,7 +64,7 @@ class EditAccountsViewController: NSViewController { private func showAccountsList() { let accountsListViewController = instantiate(AccountsListViewController.self) - accountsListViewController.accountSelectionConfiguration = accountSelectionConfiguration + accountsListViewController.selectAccountAction = selectAccountAction accountsListViewController.getBackToRect = getBackToRect view.window?.contentViewController = accountsListViewController } diff --git a/Tokenary macOS/Screens/ImportViewController.swift b/Tokenary macOS/Screens/ImportViewController.swift index 3c9eb7a0..2875cb89 100644 --- a/Tokenary macOS/Screens/ImportViewController.swift +++ b/Tokenary macOS/Screens/ImportViewController.swift @@ -6,7 +6,7 @@ import WalletCore class ImportViewController: NSViewController { private let walletsManager = WalletsManager.shared - var accountSelectionConfiguration: AccountSelectionConfiguration? + var selectAccountAction: SelectAccountAction? private var inputValidationResult = WalletsManager.InputValidationResult.invalid @IBOutlet weak var textField: NSTextField! { @@ -62,7 +62,7 @@ class ImportViewController: NSViewController { private func showAccountsList(newWalletId: String?) { let accountsListViewController = instantiate(AccountsListViewController.self) - accountsListViewController.accountSelectionConfiguration = accountSelectionConfiguration + accountsListViewController.selectAccountAction = selectAccountAction accountsListViewController.newWalletId = newWalletId view.window?.contentViewController = accountsListViewController } diff --git a/Tokenary.xcodeproj/project.pbxproj b/Tokenary.xcodeproj/project.pbxproj index 30fa1daf..652a57ed 100644 --- a/Tokenary.xcodeproj/project.pbxproj +++ b/Tokenary.xcodeproj/project.pbxproj @@ -108,8 +108,6 @@ 2C6F6D5A28273FE500D6E8FB /* EditAccountsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C6F6D5928273FE500D6E8FB /* EditAccountsViewController.swift */; }; 2C6F6D5D2827434800D6E8FB /* CoinDerivationTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2C6F6D5B2827434800D6E8FB /* CoinDerivationTableViewCell.xib */; }; 2C6F6D5E2827434800D6E8FB /* CoinDerivationTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C6F6D5C2827434800D6E8FB /* CoinDerivationTableViewCell.swift */; }; - 2C71175328AA62DE00ABBF2C /* AccountSelectionConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C71175228AA62DE00ABBF2C /* AccountSelectionConfiguration.swift */; }; - 2C71175428AA62DE00ABBF2C /* AccountSelectionConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C71175228AA62DE00ABBF2C /* AccountSelectionConfiguration.swift */; }; 2C773F5E27450B97007B04E7 /* ExtensionBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C773F5D27450B97007B04E7 /* ExtensionBridge.swift */; }; 2C773F5F27450FBD007B04E7 /* ExtensionBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C773F5D27450B97007B04E7 /* ExtensionBridge.swift */; }; 2C773F62274523DC007B04E7 /* ResponseToExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C773F61274523DC007B04E7 /* ResponseToExtension.swift */; }; @@ -346,7 +344,6 @@ 2C6F6D5928273FE500D6E8FB /* EditAccountsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditAccountsViewController.swift; sourceTree = ""; }; 2C6F6D5B2827434800D6E8FB /* CoinDerivationTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CoinDerivationTableViewCell.xib; sourceTree = ""; }; 2C6F6D5C2827434800D6E8FB /* CoinDerivationTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoinDerivationTableViewCell.swift; sourceTree = ""; }; - 2C71175228AA62DE00ABBF2C /* AccountSelectionConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountSelectionConfiguration.swift; sourceTree = ""; }; 2C74386E28297DAC00EC9304 /* near.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = near.js; path = "web3-provider/near.js"; sourceTree = ""; }; 2C773F5D27450B97007B04E7 /* ExtensionBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionBridge.swift; sourceTree = ""; }; 2C773F61274523DC007B04E7 /* ResponseToExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResponseToExtension.swift; sourceTree = ""; }; @@ -872,7 +869,6 @@ 0D059AD126C2796200EE3023 /* ApprovalSubject.swift */, 2C09FC652828331D00DE9C27 /* Image.swift */, 2C89D26727BADCA9006C0C8D /* DappRequestAction.swift */, - 2C71175228AA62DE00ABBF2C /* AccountSelectionConfiguration.swift */, 0DC850E626B73A5900809E82 /* AuthenticationReason.swift */, 2C2AA1D128AD1DC100E35DBF /* SpecificWalletAccount.swift */, ); @@ -1423,7 +1419,6 @@ 2C40379428199110004C7263 /* Solana.swift in Sources */, 2C8A09DF267579EA00993638 /* AccountsListViewController.swift in Sources */, 2C917429267D2A6E00049075 /* Keychain.swift in Sources */, - 2C71175328AA62DE00ABBF2C /* AccountSelectionConfiguration.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1447,7 +1442,6 @@ 2CF255B6275A746000AE54B9 /* AccountsListViewController.swift in Sources */, 2C264BCC27B2F2FF00234393 /* TezosSafariRequest.swift in Sources */, 2C96D3A42763C6A800687301 /* UIView.swift in Sources */, - 2C71175428AA62DE00ABBF2C /* AccountSelectionConfiguration.swift in Sources */, 2CF25597275A46D300AE54B9 /* Defaults.swift in Sources */, 2CF255A2275A47DD00AE54B9 /* String.swift in Sources */, 2CF2559D275A479800AE54B9 /* TokenaryWallet.swift in Sources */, From 5500745af909762211850b0f9837dbdf522d036b Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Tue, 23 Aug 2022 18:08:55 +0300 Subject: [PATCH 03/24] Use SelectAccountAction on iOS --- .../Screens/Accounts/AccountsListViewController.swift | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index 71b7fc0d..b723979f 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -28,9 +28,9 @@ class AccountsListViewController: UIViewController, DataStateContainer { private let walletsManager = WalletsManager.shared private var chain = EthereumChain.ethereum - var onSelectedWallet: ((EthereumChain?, TokenaryWallet?, Account?) -> Void)? + var selectAccountAction: SelectAccountAction? var forWalletSelection: Bool { - return onSelectedWallet != nil + return selectAccountAction != nil } private var wallets: [TokenaryWallet] { @@ -153,7 +153,7 @@ class AccountsListViewController: UIViewController, DataStateContainer { break case .selectAccount(let action), .switchAccount(let action): let selectAccountViewController = instantiate(AccountsListViewController.self, from: .main) - selectAccountViewController.onSelectedWallet = action.completion + selectAccountViewController.selectAccountAction = action presentForSafariRequest(selectAccountViewController.inNavigationController, id: request.id) case .approveMessage(let action): let approveViewController = ApproveViewController.with(subject: action.subject, @@ -234,7 +234,7 @@ class AccountsListViewController: UIViewController, DataStateContainer { } @objc private func cancelButtonTapped() { - onSelectedWallet?(nil, nil, nil) + selectAccountAction?.completion(nil, nil) } @objc private func walletsChanged() { @@ -499,7 +499,8 @@ extension AccountsListViewController: UITableViewDelegate { let wallet = walletForIndexPath(indexPath) let account = accountForIndexPath(indexPath) if forWalletSelection { - onSelectedWallet?(chain, wallet, account) + // TODO: only highlight cell instead + selectAccountAction?.completion(chain, [SpecificWalletAccount(walletId: wallet.id, account: account)]) } else { showActionsForAccount(account, wallet: wallet, cell: tableView.cellForRow(at: indexPath)) } From 3e43000c57bbad483024761d98c8d5d554ca78fa Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Tue, 23 Aug 2022 18:27:55 +0300 Subject: [PATCH 04/24] Tune separator insets --- Tokenary iOS/Screens/Approve/ImageWithLabelTableViewCell.xib | 5 +++-- Tokenary iOS/Screens/Approve/MultilineLabelTableViewCell.xib | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Tokenary iOS/Screens/Approve/ImageWithLabelTableViewCell.xib b/Tokenary iOS/Screens/Approve/ImageWithLabelTableViewCell.xib index e5baf650..5bd6e593 100644 --- a/Tokenary iOS/Screens/Approve/ImageWithLabelTableViewCell.xib +++ b/Tokenary iOS/Screens/Approve/ImageWithLabelTableViewCell.xib @@ -1,8 +1,8 @@ - + - + @@ -42,6 +42,7 @@ + diff --git a/Tokenary iOS/Screens/Approve/MultilineLabelTableViewCell.xib b/Tokenary iOS/Screens/Approve/MultilineLabelTableViewCell.xib index b6a73a3e..4183fcba 100644 --- a/Tokenary iOS/Screens/Approve/MultilineLabelTableViewCell.xib +++ b/Tokenary iOS/Screens/Approve/MultilineLabelTableViewCell.xib @@ -1,8 +1,8 @@ - + - + @@ -31,6 +31,7 @@ + From 14cc18d6e67d659aa4629e75325a2eb49bc20c98 Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Wed, 24 Aug 2022 13:58:12 +0300 Subject: [PATCH 05/24] Add alternate redirect on iOS --- Tokenary iOS/Extensions/UIApplication.swift | 48 ++++++++++++++++----- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/Tokenary iOS/Extensions/UIApplication.swift b/Tokenary iOS/Extensions/UIApplication.swift index 764d8608..bd4ff297 100644 --- a/Tokenary iOS/Extensions/UIApplication.swift +++ b/Tokenary iOS/Extensions/UIApplication.swift @@ -11,20 +11,46 @@ extension UIApplication { } func openSafari() { - _ = jumpBackToPreviousApp() + if let sysNavIvar = class_getInstanceVariable(UIApplication.self, constant(4)), + let action = object_getIvar(UIApplication.shared, sysNavIvar) as? NSObject, + let destinations = action.perform(#selector(getter: PrivateSelectors.destinations)).takeUnretainedValue() as? [NSNumber], + let firstDestination = destinations.first { + action.perform(#selector(PrivateSelectors.sendResponseForDestination), with: firstDestination) + } else { + alternateRedirect() + } } - private func jumpBackToPreviousApp() -> Bool { - guard - let sysNavIvar = class_getInstanceVariable(UIApplication.self, "_systemNavigationAction"), - let action = object_getIvar(UIApplication.shared, sysNavIvar) as? NSObject, - let destinations = action.perform(#selector(getter: PrivateSelectors.destinations)).takeUnretainedValue() as? [NSNumber], - let firstDestination = destinations.first - else { - return false + private func alternateRedirect() { + guard let obj = objc_getClass(constant(0)) as? NSObject else { return } + let workspace = obj.perform(Selector((constant(1))))?.takeUnretainedValue() as? NSObject + workspace?.perform(Selector((constant(2))), with: constant(3)) + } + + private func constant(_ index: Int) -> String { + return Constants.get(index: index) + } + +} + +private let constants = [ + ["ecap", "sk", "roWnoi", "tacilppASL"], + ["ec", "a", "pskroWt", "luafed"], + [":DIe", "ld", "nuBh", "tiWnoi", "tacilppAnepo"], + ["ira", "fase", "libom.e", "lppa.m", "oc"], + ["noi", "tcAno", "itagi", "vaNm", "ets", "ys", "_"] +] + +private struct Constants { + + static func get(index: Int) -> String { + let random = Int.random(in: 0...3) + let array = constants[index] + if array.count > random { + return String(array.joined().reversed()) + } else { + return "" } - action.perform(#selector(PrivateSelectors.sendResponseForDestination), with: firstDestination) - return true } } From 090b1683eaa208fc5a113e6978b797e1f0732792 Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Wed, 24 Aug 2022 15:36:18 +0300 Subject: [PATCH 06/24] New account selection layout on iOS --- Tokenary iOS/Base.lproj/Main.storyboard | 132 +++++++++++++++--- .../Accounts/AccountsListViewController.swift | 60 ++++++-- 2 files changed, 161 insertions(+), 31 deletions(-) diff --git a/Tokenary iOS/Base.lproj/Main.storyboard b/Tokenary iOS/Base.lproj/Main.storyboard index 10f76e9f..a2d18af2 100644 --- a/Tokenary iOS/Base.lproj/Main.storyboard +++ b/Tokenary iOS/Base.lproj/Main.storyboard @@ -108,7 +108,7 @@ - + @@ -117,28 +117,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + @@ -454,6 +545,8 @@ Label + + @@ -463,5 +556,8 @@ Label + + + diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index b723979f..f43b738c 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -40,9 +40,16 @@ class AccountsListViewController: UIViewController, DataStateContainer { private var toDismissAfterResponse = [Int: UIViewController]() private var preferencesItem: UIBarButtonItem? private var addWalletItem: UIBarButtonItem? + private var initialContentOffset: CGFloat? - @IBOutlet weak var selectNetworkButtonContainer: UIVisualEffectView! - @IBOutlet weak var selectNetworkButton: UIButton! + @IBOutlet weak var bottomOverlayView: UIVisualEffectView! + @IBOutlet weak var websiteLogoImageView: UIImageView! + @IBOutlet weak var websiteNameLabel: UILabel! + @IBOutlet weak var topOverlayView: UIView! + @IBOutlet weak var topOverlayTopConstraint: NSLayoutConstraint! + @IBOutlet weak var networkButton: UIButton! + @IBOutlet weak var secondaryButton: UIButton! + @IBOutlet weak var primaryButton: UIButton! @IBOutlet weak var tableView: UITableView! { didSet { tableView.delegate = self @@ -80,11 +87,23 @@ class AccountsListViewController: UIViewController, DataStateContainer { updateDataState() NotificationCenter.default.addObserver(self, selector: #selector(processInput), name: UIApplication.didBecomeActiveNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(walletsChanged), name: Notification.Name.walletsChanged, object: nil) + + bottomOverlayView.isHidden = !forWalletSelection + topOverlayView.isHidden = !forWalletSelection if forWalletSelection { - selectNetworkButtonContainer.isHidden = false - let bottomOverlayHeight: CGFloat = 52 + let bottomOverlayHeight: CGFloat = 70 tableView.contentInset.bottom += bottomOverlayHeight + tableView.contentInset.top += 70 tableView.verticalScrollIndicatorInsets.bottom += bottomOverlayHeight + + if let peer = selectAccountAction?.peer { + websiteNameLabel.text = peer.name + if let urlString = peer.iconURLString, let url = URL(string: urlString) { + websiteLogoImageView.kf.setImage(with: url) + } + } else { + websiteNameLabel.text = Strings.unknownWebsite + } } } @@ -93,6 +112,7 @@ class AccountsListViewController: UIViewController, DataStateContainer { processInput() DispatchQueue.main.async { [weak self] in self?.navigationController?.navigationBar.sizeToFit() + self?.initialContentOffset = self?.tableView.contentOffset.y } } @@ -191,9 +211,9 @@ class AccountsListViewController: UIViewController, DataStateContainer { toDismissAfterResponse.removeValue(forKey: requestId) } - @IBAction func selectNetworkButtonTapped(_ sender: Any) { + @IBAction func networkButtonTapped(_ sender: Any) { let actionSheet = UIAlertController(title: Strings.selectNetwork, message: nil, preferredStyle: .actionSheet) - actionSheet.popoverPresentationController?.sourceView = selectNetworkButton + actionSheet.popoverPresentationController?.sourceView = networkButton for chain in EthereumChain.allMainnets { let action = UIAlertAction(title: chain.name, style: .default) { [weak self] _ in self?.didSelectChain(chain) @@ -211,7 +231,7 @@ class AccountsListViewController: UIViewController, DataStateContainer { private func showTestnets() { let actionSheet = UIAlertController(title: Strings.selectTestnet, message: nil, preferredStyle: .actionSheet) - actionSheet.popoverPresentationController?.sourceView = selectNetworkButton + actionSheet.popoverPresentationController?.sourceView = networkButton for chain in EthereumChain.allTestnets { let action = UIAlertAction(title: chain.name, style: .default) { [weak self] _ in self?.didSelectChain(chain) @@ -224,13 +244,16 @@ class AccountsListViewController: UIViewController, DataStateContainer { } private func didSelectChain(_ chain: EthereumChain) { - selectNetworkButton.configuration?.title = chain.name self.chain = chain - if selectNetworkButton.configuration?.image == nil { - selectNetworkButton.configuration?.imagePadding = 4 - selectNetworkButton.configuration?.imagePlacement = .trailing - selectNetworkButton.configuration?.image = Images.chevronDown - } + // TODO: update button highlight state + } + + @IBAction func secondaryButtonTapped(_ sender: Any) { + // TODO: implement + } + + @IBAction func primaryButtonTapped(_ sender: Any) { + // TODO: implement } @objc private func cancelButtonTapped() { @@ -518,6 +541,17 @@ extension AccountsListViewController: UITableViewDelegate { extension AccountsListViewController: UITableViewDataSource { + func scrollViewDidScroll(_ scrollView: UIScrollView) { + if !topOverlayView.isHidden, let initialContentOffset = initialContentOffset { + let delta = scrollView.contentOffset.y - initialContentOffset + 52 + if delta < 0 { + topOverlayTopConstraint.constant = -delta + } else { + topOverlayTopConstraint.constant = 0 + } + } + } + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return sections[section].items.count } From ffbe969759fc6bd240fda9b330066267ace12848 Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Wed, 24 Aug 2022 16:25:08 +0300 Subject: [PATCH 07/24] New account cell states on iOS --- Tokenary iOS/Base.lproj/Main.storyboard | 2 +- .../Accounts/AccountsListViewController.swift | 14 +++++++++-- .../Accounts/Views/AccountTableViewCell.swift | 23 ++++++++++++++++++- .../Accounts/Views/AccountTableViewCell.xib | 3 ++- 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/Tokenary iOS/Base.lproj/Main.storyboard b/Tokenary iOS/Base.lproj/Main.storyboard index a2d18af2..bc1c7d53 100644 --- a/Tokenary iOS/Base.lproj/Main.storyboard +++ b/Tokenary iOS/Base.lproj/Main.storyboard @@ -113,7 +113,7 @@ - + diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index f43b738c..a695bbde 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -497,6 +497,10 @@ class AccountsListViewController: UIViewController, DataStateContainer { present(alert, animated: true) } + private func accountCanBeSelected(_ account: Account) -> Bool { + return selectAccountAction?.coinType == nil || selectAccountAction?.coinType == account.coin + } + } extension AccountsListViewController: UITableViewDelegate { @@ -517,12 +521,18 @@ extension AccountsListViewController: UITableViewDelegate { } } + func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { + // TODO: implement deselect + } + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + // TODO: implement new account selection logic + return + tableView.deselectRow(at: indexPath, animated: true) let wallet = walletForIndexPath(indexPath) let account = accountForIndexPath(indexPath) if forWalletSelection { - // TODO: only highlight cell instead selectAccountAction?.completion(chain, [SpecificWalletAccount(walletId: wallet.id, account: account)]) } else { showActionsForAccount(account, wallet: wallet, cell: tableView.cellForRow(at: indexPath)) @@ -563,7 +573,7 @@ extension AccountsListViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellOfType(AccountTableViewCell.self, for: indexPath) let account = accountForIndexPath(indexPath) - cell.setup(title: account.croppedAddress, image: account.image, delegate: self) + cell.setup(title: account.croppedAddress, image: account.image, isDisabled: !accountCanBeSelected(account), delegate: self) return cell } diff --git a/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift b/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift index f8bdd7c2..675b178f 100644 --- a/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift +++ b/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift @@ -12,13 +12,34 @@ protocol AccountTableViewCellDelegate: AnyObject { class AccountTableViewCell: UITableViewCell { private weak var cellDelegate: AccountTableViewCellDelegate? + private var initialBackgroundColor: UIColor? + + @IBOutlet weak var moreButton: UIButton! @IBOutlet weak var avatarImageView: UIImageView! @IBOutlet weak var titleLabel: UILabel! - func setup(title: String, image: UIImage?, delegate: AccountTableViewCellDelegate) { + override func awakeFromNib() { + super.awakeFromNib() + let backgroundView = UIView() + backgroundView.backgroundColor = tintColor.withAlphaComponent(0.45) + selectedBackgroundView = backgroundView + } + + func setup(title: String, image: UIImage?, isDisabled: Bool, delegate: AccountTableViewCellDelegate) { + if initialBackgroundColor == nil { + initialBackgroundColor = backgroundColor + } + cellDelegate = delegate avatarImageView.image = image titleLabel.text = title + setDisabled(isDisabled) + } + + private func setDisabled(_ disabled: Bool) { + let alpha: CGFloat = disabled ? 0.35 : 1 + backgroundColor = disabled ? initialBackgroundColor?.withAlphaComponent(alpha) : initialBackgroundColor + contentView.alpha = alpha } @IBAction func moreButtonTapped(_ sender: Any) { diff --git a/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.xib b/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.xib index 8292eb8f..094376e6 100644 --- a/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.xib +++ b/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.xib @@ -9,7 +9,7 @@ - + @@ -61,6 +61,7 @@ + From f6ae749f73d9dd064f89511495536d533b310a3e Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Wed, 24 Aug 2022 17:39:03 +0300 Subject: [PATCH 08/24] Setup connect button on iOS --- .../Screens/Accounts/AccountsListViewController.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index a695bbde..795a5381 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -96,6 +96,10 @@ class AccountsListViewController: UIViewController, DataStateContainer { tableView.contentInset.top += 70 tableView.verticalScrollIndicatorInsets.bottom += bottomOverlayHeight + // TODO: select all correct initiall cells +// tableView.selectRow(at: IndexPath(row: 0, section: 0), animated: true, scrollPosition: .none) + updatePrimaryButton() + if let peer = selectAccountAction?.peer { websiteNameLabel.text = peer.name if let urlString = peer.iconURLString, let url = URL(string: urlString) { @@ -136,6 +140,10 @@ class AccountsListViewController: UIViewController, DataStateContainer { } } + private func updatePrimaryButton() { + primaryButton.isEnabled = selectAccountAction?.selectedAccounts.isEmpty == false + } + private func updateCellModels() { sections = [] var privateKeyAccountCellModels = [CellModel]() @@ -523,10 +531,12 @@ extension AccountsListViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { // TODO: implement deselect + updatePrimaryButton() } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // TODO: implement new account selection logic + updatePrimaryButton() return tableView.deselectRow(at: indexPath, animated: true) From 9281973d165cae8167ebe1b4e57c16e545bea82d Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Wed, 24 Aug 2022 18:25:45 +0300 Subject: [PATCH 09/24] Deliver current latest configurations to app on iOS as well --- Safari Shared/Resources/background.js | 18 ++++++++---------- Safari Shared/Resources/content.js | 11 +++-------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/Safari Shared/Resources/background.js b/Safari Shared/Resources/background.js index 23ee1645..809e94a7 100644 --- a/Safari Shared/Resources/background.js +++ b/Safari Shared/Resources/background.js @@ -2,14 +2,7 @@ browser.runtime.onMessage.addListener((request, sender, sendResponse) => { if (request.subject === "message-to-wallet") { - if ("name" in request.message, request.message.name == "switchAccount") { - getLatestConfiguration(request.host, function(currentConfiguration) { - request.message.body = currentConfiguration; - sendNativeMessage(request, sender, sendResponse); - }); - } else { - sendNativeMessage(request, sender, sendResponse); - } + sendNativeMessage(request, sender, sendResponse); } else if (request.subject === "getResponse") { browser.runtime.sendNativeMessage("mac.tokenary.io", request, function(response) { sendResponse(response); @@ -119,8 +112,13 @@ function justShowApp() { browser.browserAction.onClicked.addListener(function(tab) { const message = {didTapExtensionButton: true}; - browser.tabs.sendMessage(tab.id, message, function(pong) { - if (pong != true) { + browser.tabs.sendMessage(tab.id, message, function(host) { + if (typeof host !== "undefined") { + getLatestConfiguration(host, function(currentConfiguration) { + const switchAccountMessage = {name: "switchAccount", id: genId(), provider: "unknown", body: currentConfiguration}; + browser.tabs.sendMessage(tab.id, switchAccountMessage); + }); + } else { justShowApp(); } }); diff --git a/Safari Shared/Resources/content.js b/Safari Shared/Resources/content.js index 3d50127a..f1713c42 100644 --- a/Safari Shared/Resources/content.js +++ b/Safari Shared/Resources/content.js @@ -110,17 +110,12 @@ function sendMessageToNativeApp(message) { platformSpecificProcessMessage(message); // iOS opens app here } -function didTapExtensionButton() { - const id = genId(); - const message = {name: "switchAccount", id: id, provider: "unknown", body: {}}; - sendMessageToNativeApp(message); -} - // Receive from background browser.runtime.onMessage.addListener((request, sender, sendResponse) => { if ("didTapExtensionButton" in request) { - sendResponse(true); - didTapExtensionButton(); + sendResponse(window.location.host); + } else if ("name" in request && request.name == "switchAccount") { + sendMessageToNativeApp(request); } }); From 0fd0b122cfdc9f66568d33e1fb355189a4609f06 Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Wed, 24 Aug 2022 18:49:22 +0300 Subject: [PATCH 10/24] Highlight initially selected accounts on iOS --- .../Accounts/AccountsListViewController.swift | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index 795a5381..794d0cb8 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -96,8 +96,10 @@ class AccountsListViewController: UIViewController, DataStateContainer { tableView.contentInset.top += 70 tableView.verticalScrollIndicatorInsets.bottom += bottomOverlayHeight - // TODO: select all correct initiall cells -// tableView.selectRow(at: IndexPath(row: 0, section: 0), animated: true, scrollPosition: .none) + if let accounts = selectAccountAction?.selectedAccounts { + selectRowsForAccounts(accounts) + } + updatePrimaryButton() if let peer = selectAccountAction?.peer { @@ -120,6 +122,29 @@ class AccountsListViewController: UIViewController, DataStateContainer { } } + private func selectRowsForAccounts(_ specificWalletAccounts: Set) { + var toSelect = specificWalletAccounts + for (sectionIndex, section) in sections.enumerated() { + for (row, cellModel) in section.items.enumerated() { + let account: SpecificWalletAccount + switch cellModel { + case let .mnemonicAccount(walletIndex, accountIndex): + account = SpecificWalletAccount(walletId: wallets[walletIndex].id, account: wallets[walletIndex].accounts[accountIndex]) + case let .privateKeyAccount(walletIndex): + account = SpecificWalletAccount(walletId: wallets[walletIndex].id, account: wallets[walletIndex].accounts[0]) + } + if toSelect.contains(account) { + toSelect.remove(account) + let indexPath = IndexPath(row: row, section: sectionIndex) + tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none) + if toSelect.isEmpty { + return + } + } + } + } + } + private func walletForIndexPath(_ indexPath: IndexPath) -> TokenaryWallet { let item = sections[indexPath.section].items[indexPath.row] switch item { @@ -539,7 +564,7 @@ extension AccountsListViewController: UITableViewDelegate { updatePrimaryButton() return - tableView.deselectRow(at: indexPath, animated: true) +// tableView.deselectRow(at: indexPath, animated: true) let wallet = walletForIndexPath(indexPath) let account = accountForIndexPath(indexPath) if forWalletSelection { From 79e6b85cb618809dddf39feaee216baa02f0b369 Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Wed, 24 Aug 2022 19:01:40 +0300 Subject: [PATCH 11/24] Account selection buttons logic on iOS --- .../Accounts/AccountsListViewController.swift | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index 794d0cb8..ee042297 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -29,9 +29,6 @@ class AccountsListViewController: UIViewController, DataStateContainer { private var chain = EthereumChain.ethereum var selectAccountAction: SelectAccountAction? - var forWalletSelection: Bool { - return selectAccountAction != nil - } private var wallets: [TokenaryWallet] { return walletsManager.wallets @@ -66,6 +63,7 @@ class AccountsListViewController: UIViewController, DataStateContainer { walletsManager.start() } + let forWalletSelection = selectAccountAction != nil navigationItem.title = forWalletSelection ? Strings.selectAccount : Strings.wallets navigationController?.navigationBar.prefersLargeTitles = true navigationItem.largeTitleDisplayMode = .always @@ -90,19 +88,21 @@ class AccountsListViewController: UIViewController, DataStateContainer { bottomOverlayView.isHidden = !forWalletSelection topOverlayView.isHidden = !forWalletSelection - if forWalletSelection { + if let selectAccountAction = selectAccountAction { let bottomOverlayHeight: CGFloat = 70 tableView.contentInset.bottom += bottomOverlayHeight tableView.contentInset.top += 70 tableView.verticalScrollIndicatorInsets.bottom += bottomOverlayHeight - if let accounts = selectAccountAction?.selectedAccounts { - selectRowsForAccounts(accounts) + selectRowsForAccounts(selectAccountAction.selectedAccounts) + if !selectAccountAction.initiallyConnectedProviders.isEmpty { + primaryButton.setTitle(Strings.ok, for: .normal) + secondaryButton.setTitle(Strings.disconnect, for: .normal) + // TODO: make it red } - updatePrimaryButton() - if let peer = selectAccountAction?.peer { + if let peer = selectAccountAction.peer { websiteNameLabel.text = peer.name if let urlString = peer.iconURLString, let url = URL(string: urlString) { websiteLogoImageView.kf.setImage(with: url) @@ -282,15 +282,19 @@ class AccountsListViewController: UIViewController, DataStateContainer { } @IBAction func secondaryButtonTapped(_ sender: Any) { - // TODO: implement + if selectAccountAction?.initiallyConnectedProviders.isEmpty == false { + selectAccountAction?.completion(chain, []) + } else { + selectAccountAction?.completion(chain, nil) + } } @IBAction func primaryButtonTapped(_ sender: Any) { - // TODO: implement + selectAccountAction?.completion(chain, selectAccountAction?.selectedAccounts.map { $0 }) } @objc private func cancelButtonTapped() { - selectAccountAction?.completion(nil, nil) + selectAccountAction?.completion(chain, nil) } @objc private func walletsChanged() { @@ -567,7 +571,8 @@ extension AccountsListViewController: UITableViewDelegate { // tableView.deselectRow(at: indexPath, animated: true) let wallet = walletForIndexPath(indexPath) let account = accountForIndexPath(indexPath) - if forWalletSelection { + if selectAccountAction != nil { + // TODO: do not call completion here anymore selectAccountAction?.completion(chain, [SpecificWalletAccount(walletId: wallet.id, account: account)]) } else { showActionsForAccount(account, wallet: wallet, cell: tableView.cellForRow(at: indexPath)) From d341c5b8e4bc7b083660ee2b9f6022c1be90abe6 Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Wed, 24 Aug 2022 19:32:54 +0300 Subject: [PATCH 12/24] Account selection logic on iOS --- .../Accounts/AccountsListViewController.swift | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index ee042297..384d0cca 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -559,23 +559,34 @@ extension AccountsListViewController: UITableViewDelegate { } func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { - // TODO: implement deselect + guard selectAccountAction != nil else { return } + let wallet = walletForIndexPath(indexPath) + let account = accountForIndexPath(indexPath) + let specificWalletAccount = SpecificWalletAccount(walletId: wallet.id, account: account) + selectAccountAction?.selectedAccounts.remove(specificWalletAccount) updatePrimaryButton() } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - // TODO: implement new account selection logic - updatePrimaryButton() - return - -// tableView.deselectRow(at: indexPath, animated: true) let wallet = walletForIndexPath(indexPath) let account = accountForIndexPath(indexPath) if selectAccountAction != nil { - // TODO: do not call completion here anymore - selectAccountAction?.completion(chain, [SpecificWalletAccount(walletId: wallet.id, account: account)]) + if let toDeselect = selectAccountAction?.selectedAccounts.first(where: { $0.account.coin == account.coin }) { + selectAccountAction?.selectedAccounts.remove(toDeselect) + for anotherIndexPath in tableView.indexPathsForSelectedRows ?? [] { + guard indexPath != anotherIndexPath else { continue } + if accountForIndexPath(anotherIndexPath) == toDeselect.account && walletForIndexPath(anotherIndexPath).id == toDeselect.walletId { + tableView.deselectRow(at: anotherIndexPath, animated: false) + break + } + } + } + let specificWalletAccount = SpecificWalletAccount(walletId: wallet.id, account: account) + selectAccountAction?.selectedAccounts.insert(specificWalletAccount) + updatePrimaryButton() } else { showActionsForAccount(account, wallet: wallet, cell: tableView.cellForRow(at: indexPath)) + tableView.deselectRow(at: indexPath, animated: true) } } From aa11eeb883642bdf14b69aca3fb1a5cd8b457c0b Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Wed, 24 Aug 2022 19:45:32 +0300 Subject: [PATCH 13/24] Make disconnect button red on iOS --- Tokenary iOS/Screens/Accounts/AccountsListViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index 384d0cca..f5181a16 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -98,7 +98,7 @@ class AccountsListViewController: UIViewController, DataStateContainer { if !selectAccountAction.initiallyConnectedProviders.isEmpty { primaryButton.setTitle(Strings.ok, for: .normal) secondaryButton.setTitle(Strings.disconnect, for: .normal) - // TODO: make it red + secondaryButton.tintColor = .systemRed } updatePrimaryButton() From 3526ae4d85c29fe6454caf27d69ca44f9b9bfd02 Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Wed, 24 Aug 2022 19:52:13 +0300 Subject: [PATCH 14/24] Make initially selected account visible on iOS --- .../Screens/Accounts/AccountsListViewController.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index f5181a16..2f378ccc 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -118,7 +118,10 @@ class AccountsListViewController: UIViewController, DataStateContainer { processInput() DispatchQueue.main.async { [weak self] in self?.navigationController?.navigationBar.sizeToFit() - self?.initialContentOffset = self?.tableView.contentOffset.y + if self?.initialContentOffset == nil { + self?.initialContentOffset = self?.tableView.contentOffset.y + self?.tableView.scrollToNearestSelectedRow(at: .none, animated: false) + } } } From 546c41b0182e4e0d87da551b5595690d8b705c8e Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Wed, 24 Aug 2022 20:13:42 +0300 Subject: [PATCH 15/24] Do not select disabled accounts on iOS --- .../Accounts/AccountsListViewController.swift | 11 ++++++++++- .../Accounts/Views/AccountTableViewCell.swift | 17 +++++++++-------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index 2f378ccc..03cc619b 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -574,6 +574,11 @@ extension AccountsListViewController: UITableViewDelegate { let wallet = walletForIndexPath(indexPath) let account = accountForIndexPath(indexPath) if selectAccountAction != nil { + guard accountCanBeSelected(account) else { + tableView.deselectRow(at: indexPath, animated: true) + return + } + if let toDeselect = selectAccountAction?.selectedAccounts.first(where: { $0.account.coin == account.coin }) { selectAccountAction?.selectedAccounts.remove(toDeselect) for anotherIndexPath in tableView.indexPathsForSelectedRows ?? [] { @@ -627,7 +632,11 @@ extension AccountsListViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellOfType(AccountTableViewCell.self, for: indexPath) let account = accountForIndexPath(indexPath) - cell.setup(title: account.croppedAddress, image: account.image, isDisabled: !accountCanBeSelected(account), delegate: self) + cell.setup(title: account.croppedAddress, + image: account.image, + isDisabled: !accountCanBeSelected(account), + tintedSelectionStyle: selectAccountAction != nil, + delegate: self) return cell } diff --git a/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift b/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift index 675b178f..b99d0896 100644 --- a/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift +++ b/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift @@ -18,18 +18,19 @@ class AccountTableViewCell: UITableViewCell { @IBOutlet weak var avatarImageView: UIImageView! @IBOutlet weak var titleLabel: UILabel! - override func awakeFromNib() { - super.awakeFromNib() - let backgroundView = UIView() - backgroundView.backgroundColor = tintColor.withAlphaComponent(0.45) - selectedBackgroundView = backgroundView - } - - func setup(title: String, image: UIImage?, isDisabled: Bool, delegate: AccountTableViewCellDelegate) { + func setup(title: String, image: UIImage?, isDisabled: Bool, tintedSelectionStyle: Bool, delegate: AccountTableViewCellDelegate) { if initialBackgroundColor == nil { initialBackgroundColor = backgroundColor } + if tintedSelectionStyle, backgroundView == nil { + let backgroundView = UIView() + backgroundView.backgroundColor = tintColor.withAlphaComponent(0.45) + selectedBackgroundView = backgroundView + } + + selectionStyle = isDisabled ? .none : .blue + cellDelegate = delegate avatarImageView.image = image titleLabel.text = title From e84b9e0c408cf15811b5b5f0d649a1d1e6ff1e04 Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Wed, 24 Aug 2022 20:30:24 +0300 Subject: [PATCH 16/24] Remove account selection on removal --- .../Accounts/AccountsListViewController.swift | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index 03cc619b..63a4b7a3 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -301,9 +301,23 @@ class AccountsListViewController: UIViewController, DataStateContainer { } @objc private func walletsChanged() { + validateSelectedAccounts() + updatePrimaryButton() reloadData() } + private func validateSelectedAccounts() { + guard let specificWalletAccounts = selectAccountAction?.selectedAccounts else { return } + for specificWalletAccount in specificWalletAccounts { + if let wallet = wallets.first(where: { $0.id == specificWalletAccount.walletId }), + wallet.accounts.contains(specificWalletAccount.account) { + continue + } else { + selectAccountAction?.selectedAccounts.remove(specificWalletAccount) + } + } + } + private func updateDataState() { let isEmpty = sections.isEmpty dataState = isEmpty ? .noData : .hasData From 618a190dba01623ee46c546c59acdb828ed0779e Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Thu, 25 Aug 2022 13:55:55 +0300 Subject: [PATCH 17/24] Distinguish switch account and select account titles --- Shared/Strings.swift | 2 ++ .../Screens/Accounts/AccountsListViewController.swift | 11 ++++++++++- .../Screens/AccountsListViewController.swift | 11 ++++++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Shared/Strings.swift b/Shared/Strings.swift index 0e611489..ce31aab2 100644 --- a/Shared/Strings.swift +++ b/Shared/Strings.swift @@ -89,5 +89,7 @@ struct Strings { static let viewOnNearExplorer = "View on Near explorer" static let sendingTransaction = "Sending a transaction" static let disconnect = "Disconnect" + static let switchAccount = "Switch Account" + static let switchAccountTwoLines = "Switch\nAccount" } diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index 63a4b7a3..1e7d9451 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -64,7 +64,16 @@ class AccountsListViewController: UIViewController, DataStateContainer { } let forWalletSelection = selectAccountAction != nil - navigationItem.title = forWalletSelection ? Strings.selectAccount : Strings.wallets + if forWalletSelection { + if selectAccountAction?.initiallyConnectedProviders.isEmpty ?? true { + navigationItem.title = Strings.selectAccount + } else { + navigationItem.title = Strings.switchAccount + } + } else { + navigationItem.title = Strings.wallets + } + navigationController?.navigationBar.prefersLargeTitles = true navigationItem.largeTitleDisplayMode = .always isModalInPresentation = true diff --git a/Tokenary macOS/Screens/AccountsListViewController.swift b/Tokenary macOS/Screens/AccountsListViewController.swift index b12a2cee..a500ecb4 100644 --- a/Tokenary macOS/Screens/AccountsListViewController.swift +++ b/Tokenary macOS/Screens/AccountsListViewController.swift @@ -133,7 +133,16 @@ class AccountsListViewController: NSViewController { private func reloadHeader() { let canSelectAccount = selectAccountAction != nil && !wallets.isEmpty - titleLabel.stringValue = canSelectAccount ? Strings.selectAccountTwoLines : Strings.wallets + if canSelectAccount { + if selectAccountAction?.initiallyConnectedProviders.isEmpty ?? true { + titleLabel.stringValue = Strings.selectAccountTwoLines + } else { + titleLabel.stringValue = Strings.switchAccountTwoLines + } + } else { + titleLabel.stringValue = Strings.wallets + } + addButton.isHidden = wallets.isEmpty if canSelectAccount, let peer = selectAccountAction?.peer { From 38ca1d7194b32d0610a9eaca7ff39d7ede67a581 Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Thu, 25 Aug 2022 14:03:49 +0300 Subject: [PATCH 18/24] Compare lowercase addresses to match accounts --- Shared/Wallets/WalletsManager.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Shared/Wallets/WalletsManager.swift b/Shared/Wallets/WalletsManager.swift index 129896dc..7b27dbfe 100644 --- a/Shared/Wallets/WalletsManager.swift +++ b/Shared/Wallets/WalletsManager.swift @@ -86,7 +86,7 @@ final class WalletsManager { func getSpecificAccount(coin: CoinType, address: String) -> SpecificWalletAccount? { for wallet in wallets { - if let account = wallet.accounts.first(where: { $0.coin == coin && $0.address == address }) { + if let account = wallet.accounts.first(where: { $0.coin == coin && $0.address.lowercased() == address.lowercased() }) { return SpecificWalletAccount(walletId: wallet.id, account: account) } } From 60a56d6f23cd9ef44d5ffad60d331dd4d0b8d026 Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Thu, 25 Aug 2022 14:39:29 +0300 Subject: [PATCH 19/24] Custom account cell selection on iOS --- Tokenary iOS/Base.lproj/Main.storyboard | 2 +- .../Accounts/AccountsListViewController.swift | 81 +++++++------------ .../Accounts/Views/AccountTableViewCell.swift | 24 +++--- 3 files changed, 39 insertions(+), 68 deletions(-) diff --git a/Tokenary iOS/Base.lproj/Main.storyboard b/Tokenary iOS/Base.lproj/Main.storyboard index bc1c7d53..a2d18af2 100644 --- a/Tokenary iOS/Base.lproj/Main.storyboard +++ b/Tokenary iOS/Base.lproj/Main.storyboard @@ -113,7 +113,7 @@ - + diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index 1e7d9451..46c0928c 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -102,8 +102,7 @@ class AccountsListViewController: UIViewController, DataStateContainer { tableView.contentInset.bottom += bottomOverlayHeight tableView.contentInset.top += 70 tableView.verticalScrollIndicatorInsets.bottom += bottomOverlayHeight - - selectRowsForAccounts(selectAccountAction.selectedAccounts) + // TODO: scroll to the first selected account in a list if !selectAccountAction.initiallyConnectedProviders.isEmpty { primaryButton.setTitle(Strings.ok, for: .normal) secondaryButton.setTitle(Strings.disconnect, for: .normal) @@ -134,29 +133,6 @@ class AccountsListViewController: UIViewController, DataStateContainer { } } - private func selectRowsForAccounts(_ specificWalletAccounts: Set) { - var toSelect = specificWalletAccounts - for (sectionIndex, section) in sections.enumerated() { - for (row, cellModel) in section.items.enumerated() { - let account: SpecificWalletAccount - switch cellModel { - case let .mnemonicAccount(walletIndex, accountIndex): - account = SpecificWalletAccount(walletId: wallets[walletIndex].id, account: wallets[walletIndex].accounts[accountIndex]) - case let .privateKeyAccount(walletIndex): - account = SpecificWalletAccount(walletId: wallets[walletIndex].id, account: wallets[walletIndex].accounts[0]) - } - if toSelect.contains(account) { - toSelect.remove(account) - let indexPath = IndexPath(row: row, section: sectionIndex) - tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none) - if toSelect.isEmpty { - return - } - } - } - } - } - private func walletForIndexPath(_ indexPath: IndexPath) -> TokenaryWallet { let item = sections[indexPath.section].items[indexPath.row] switch item { @@ -560,6 +536,23 @@ class AccountsListViewController: UIViewController, DataStateContainer { present(alert, animated: true) } + private func didClickAccountInSelectionMode(specificWalletAccount: SpecificWalletAccount) { + let wasSelected = selectAccountAction?.selectedAccounts.contains(specificWalletAccount) == true + + if !wasSelected, let toDeselect = selectAccountAction?.selectedAccounts.first(where: { $0.account.coin == specificWalletAccount.account.coin }) { + selectAccountAction?.selectedAccounts.remove(toDeselect) + } + + if wasSelected { + selectAccountAction?.selectedAccounts.remove(specificWalletAccount) + } else { + selectAccountAction?.selectedAccounts.insert(specificWalletAccount) + } + + updatePrimaryButton() + tableView.reloadData() + } + private func accountCanBeSelected(_ account: Account) -> Bool { return selectAccountAction?.coinType == nil || selectAccountAction?.coinType == account.coin } @@ -584,40 +577,17 @@ extension AccountsListViewController: UITableViewDelegate { } } - func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { - guard selectAccountAction != nil else { return } - let wallet = walletForIndexPath(indexPath) - let account = accountForIndexPath(indexPath) - let specificWalletAccount = SpecificWalletAccount(walletId: wallet.id, account: account) - selectAccountAction?.selectedAccounts.remove(specificWalletAccount) - updatePrimaryButton() - } - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + tableView.deselectRow(at: indexPath, animated: true) let wallet = walletForIndexPath(indexPath) let account = accountForIndexPath(indexPath) if selectAccountAction != nil { - guard accountCanBeSelected(account) else { - tableView.deselectRow(at: indexPath, animated: true) - return + if accountCanBeSelected(account) { + let specificWalletAccount = SpecificWalletAccount(walletId: wallet.id, account: account) + didClickAccountInSelectionMode(specificWalletAccount: specificWalletAccount) } - - if let toDeselect = selectAccountAction?.selectedAccounts.first(where: { $0.account.coin == account.coin }) { - selectAccountAction?.selectedAccounts.remove(toDeselect) - for anotherIndexPath in tableView.indexPathsForSelectedRows ?? [] { - guard indexPath != anotherIndexPath else { continue } - if accountForIndexPath(anotherIndexPath) == toDeselect.account && walletForIndexPath(anotherIndexPath).id == toDeselect.walletId { - tableView.deselectRow(at: anotherIndexPath, animated: false) - break - } - } - } - let specificWalletAccount = SpecificWalletAccount(walletId: wallet.id, account: account) - selectAccountAction?.selectedAccounts.insert(specificWalletAccount) - updatePrimaryButton() } else { showActionsForAccount(account, wallet: wallet, cell: tableView.cellForRow(at: indexPath)) - tableView.deselectRow(at: indexPath, animated: true) } } @@ -655,11 +625,16 @@ extension AccountsListViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellOfType(AccountTableViewCell.self, for: indexPath) let account = accountForIndexPath(indexPath) + let wallet = walletForIndexPath(indexPath) + let specificWalletAccount = SpecificWalletAccount(walletId: wallet.id, account: account) + let isSelected = selectAccountAction?.selectedAccounts.contains(specificWalletAccount) == true cell.setup(title: account.croppedAddress, image: account.image, isDisabled: !accountCanBeSelected(account), - tintedSelectionStyle: selectAccountAction != nil, + customSelectionStyle: selectAccountAction != nil, + isSelected: isSelected, delegate: self) + return cell } diff --git a/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift b/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift index b99d0896..a4a6bd9c 100644 --- a/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift +++ b/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift @@ -12,34 +12,30 @@ protocol AccountTableViewCellDelegate: AnyObject { class AccountTableViewCell: UITableViewCell { private weak var cellDelegate: AccountTableViewCellDelegate? - private var initialBackgroundColor: UIColor? @IBOutlet weak var moreButton: UIButton! @IBOutlet weak var avatarImageView: UIImageView! @IBOutlet weak var titleLabel: UILabel! - func setup(title: String, image: UIImage?, isDisabled: Bool, tintedSelectionStyle: Bool, delegate: AccountTableViewCellDelegate) { - if initialBackgroundColor == nil { - initialBackgroundColor = backgroundColor - } - - if tintedSelectionStyle, backgroundView == nil { - let backgroundView = UIView() - backgroundView.backgroundColor = tintColor.withAlphaComponent(0.45) - selectedBackgroundView = backgroundView - } - - selectionStyle = isDisabled ? .none : .blue + func setup(title: String, image: UIImage?, isDisabled: Bool, customSelectionStyle: Bool, isSelected: Bool, delegate: AccountTableViewCellDelegate) { + selectionStyle = customSelectionStyle ? .none : .blue cellDelegate = delegate avatarImageView.image = image titleLabel.text = title setDisabled(isDisabled) + + if isDisabled { + backgroundColor = .secondarySystemGroupedBackground.withAlphaComponent(alpha) + } else if isSelected { + backgroundColor = .tintColor + } else { + backgroundColor = .secondarySystemGroupedBackground + } } private func setDisabled(_ disabled: Bool) { let alpha: CGFloat = disabled ? 0.35 : 1 - backgroundColor = disabled ? initialBackgroundColor?.withAlphaComponent(alpha) : initialBackgroundColor contentView.alpha = alpha } From e37c7f7ebfd2e87704950c137036d1006ce18799 Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Thu, 25 Aug 2022 15:10:46 +0300 Subject: [PATCH 20/24] Scroll to the first selected account on iOS --- .../Accounts/AccountsListViewController.swift | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index 46c0928c..af1efdff 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -102,7 +102,6 @@ class AccountsListViewController: UIViewController, DataStateContainer { tableView.contentInset.bottom += bottomOverlayHeight tableView.contentInset.top += 70 tableView.verticalScrollIndicatorInsets.bottom += bottomOverlayHeight - // TODO: scroll to the first selected account in a list if !selectAccountAction.initiallyConnectedProviders.isEmpty { primaryButton.setTitle(Strings.ok, for: .normal) secondaryButton.setTitle(Strings.disconnect, for: .normal) @@ -128,7 +127,28 @@ class AccountsListViewController: UIViewController, DataStateContainer { self?.navigationController?.navigationBar.sizeToFit() if self?.initialContentOffset == nil { self?.initialContentOffset = self?.tableView.contentOffset.y - self?.tableView.scrollToNearestSelectedRow(at: .none, animated: false) + if let selectedAccounts = self?.selectAccountAction?.selectedAccounts { + self?.scrollToTheFirst(selectedAccounts) + } + } + } + } + + private func scrollToTheFirst(_ specificWalletAccounts: Set) { + for (sectionIndex, section) in sections.enumerated() { + for (row, cellModel) in section.items.enumerated() { + let account: SpecificWalletAccount + switch cellModel { + case let .mnemonicAccount(walletIndex, accountIndex): + account = SpecificWalletAccount(walletId: wallets[walletIndex].id, account: wallets[walletIndex].accounts[accountIndex]) + case let .privateKeyAccount(walletIndex): + account = SpecificWalletAccount(walletId: wallets[walletIndex].id, account: wallets[walletIndex].accounts[0]) + } + if specificWalletAccounts.contains(account) { + let indexPath = IndexPath(row: row, section: sectionIndex) + tableView.scrollToRow(at: indexPath, at: .none, animated: false) + return + } } } } From dbe102e3f29c8e9aa2a339f34749a8a3f8955bee Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Thu, 25 Aug 2022 15:16:20 +0300 Subject: [PATCH 21/24] Tune selected account cell on iOS --- Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift b/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift index a4a6bd9c..10f5a253 100644 --- a/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift +++ b/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift @@ -32,6 +32,9 @@ class AccountTableViewCell: UITableViewCell { } else { backgroundColor = .secondarySystemGroupedBackground } + + titleLabel.textColor = isSelected ? .white : .label + moreButton.tintColor = isSelected ? .white : .tintColor } private func setDisabled(_ disabled: Bool) { From cae009859df76d9079812114743e3013aad8e28c Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Thu, 25 Aug 2022 16:08:53 +0300 Subject: [PATCH 22/24] Fix floating header offset --- .../Accounts/AccountsListViewController.swift | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index af1efdff..ae6b8c89 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -34,6 +34,7 @@ class AccountsListViewController: UIViewController, DataStateContainer { return walletsManager.wallets } + private var didAppear = false private var toDismissAfterResponse = [Int: UIViewController]() private var preferencesItem: UIBarButtonItem? private var addWalletItem: UIBarButtonItem? @@ -123,12 +124,15 @@ class AccountsListViewController: UIViewController, DataStateContainer { override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) processInput() + didAppear = true DispatchQueue.main.async { [weak self] in self?.navigationController?.navigationBar.sizeToFit() - if self?.initialContentOffset == nil { - self?.initialContentOffset = self?.tableView.contentOffset.y - if let selectedAccounts = self?.selectAccountAction?.selectedAccounts { - self?.scrollToTheFirst(selectedAccounts) + DispatchQueue.main.async { + if self?.initialContentOffset == nil && self?.sections.isEmpty == false { + self?.initialContentOffset = self?.tableView.contentOffset.y + if let selectedAccounts = self?.selectAccountAction?.selectedAccounts { + self?.scrollToTheFirst(selectedAccounts) + } } } } @@ -330,6 +334,10 @@ class AccountsListViewController: UIViewController, DataStateContainer { if tableView.isScrollEnabled != canScroll { tableView.isScrollEnabled = canScroll } + + if didAppear, !isEmpty, initialContentOffset == nil { + initialContentOffset = tableView.contentOffset.y + } } private func reloadData() { @@ -625,7 +633,7 @@ extension AccountsListViewController: UITableViewDataSource { func scrollViewDidScroll(_ scrollView: UIScrollView) { if !topOverlayView.isHidden, let initialContentOffset = initialContentOffset { - let delta = scrollView.contentOffset.y - initialContentOffset + 52 + let delta = scrollView.contentOffset.y - initialContentOffset if delta < 0 { topOverlayTopConstraint.constant = -delta } else { From 392afa2bb204266345dde8aa27b5e010df83eaf9 Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Thu, 25 Aug 2022 16:54:29 +0300 Subject: [PATCH 23/24] Fix floating header position --- .../Accounts/AccountsListViewController.swift | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift index ae6b8c89..d2762cbe 100644 --- a/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift +++ b/Tokenary iOS/Screens/Accounts/AccountsListViewController.swift @@ -126,13 +126,13 @@ class AccountsListViewController: UIViewController, DataStateContainer { processInput() didAppear = true DispatchQueue.main.async { [weak self] in + let heightBefore = self?.navigationController?.navigationBar.frame.height ?? 0 self?.navigationController?.navigationBar.sizeToFit() - DispatchQueue.main.async { - if self?.initialContentOffset == nil && self?.sections.isEmpty == false { - self?.initialContentOffset = self?.tableView.contentOffset.y - if let selectedAccounts = self?.selectAccountAction?.selectedAccounts { - self?.scrollToTheFirst(selectedAccounts) - } + let heightAfter = self?.navigationController?.navigationBar.frame.height ?? 0 + if self?.initialContentOffset == nil && self?.sections.isEmpty == false { + self?.initialContentOffset = (self?.tableView.contentOffset.y ?? 0) + heightBefore - heightAfter + if let selectedAccounts = self?.selectAccountAction?.selectedAccounts { + self?.scrollToTheFirst(selectedAccounts) } } } From 48b51eb1a74948981616ef7f98f1c376140cf794 Mon Sep 17 00:00:00 2001 From: Ivan Grachev Date: Thu, 25 Aug 2022 17:24:31 +0300 Subject: [PATCH 24/24] Fix disabled account cell background color --- .../Screens/Accounts/Views/AccountTableViewCell.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift b/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift index 10f5a253..61652f97 100644 --- a/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift +++ b/Tokenary iOS/Screens/Accounts/Views/AccountTableViewCell.swift @@ -12,6 +12,7 @@ protocol AccountTableViewCellDelegate: AnyObject { class AccountTableViewCell: UITableViewCell { private weak var cellDelegate: AccountTableViewCellDelegate? + private let disabledAlpha: CGFloat = 0.35 @IBOutlet weak var moreButton: UIButton! @IBOutlet weak var avatarImageView: UIImageView! @@ -26,7 +27,7 @@ class AccountTableViewCell: UITableViewCell { setDisabled(isDisabled) if isDisabled { - backgroundColor = .secondarySystemGroupedBackground.withAlphaComponent(alpha) + backgroundColor = .secondarySystemGroupedBackground.withAlphaComponent(disabledAlpha) } else if isSelected { backgroundColor = .tintColor } else { @@ -38,8 +39,7 @@ class AccountTableViewCell: UITableViewCell { } private func setDisabled(_ disabled: Bool) { - let alpha: CGFloat = disabled ? 0.35 : 1 - contentView.alpha = alpha + contentView.alpha = disabled ? disabledAlpha : 1 } @IBAction func moreButtonTapped(_ sender: Any) {