From d6b788e27b383e654df678853f0d0e272432a21f Mon Sep 17 00:00:00 2001 From: ieow Date: Wed, 15 Jan 2025 16:31:07 +0800 Subject: [PATCH] fix: cleanup --- .../project.pbxproj | 10 +- .../xcshareddata/swiftpm/Package.resolved | 8 +- .../UserInterfaceState.xcuserstate | Bin 32326 -> 60584 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 328 ++++++++++++++++++ .../Models/MainViewModel.swift | 51 ++- .../Views/HomeView.swift | 199 ++++++----- .../Views/LoadingView.swift | 50 +++ .../mpc-core-kit-ios-quick-start.entitlements | 8 + 8 files changed, 555 insertions(+), 99 deletions(-) create mode 100644 mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.xcodeproj/xcuserdata/apollo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/Views/LoadingView.swift create mode 100644 mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.entitlements diff --git a/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.xcodeproj/project.pbxproj b/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.xcodeproj/project.pbxproj index 131d07ae..9060c427 100644 --- a/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.xcodeproj/project.pbxproj +++ b/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ 284BE6342BC512A80049C203 /* RecoveryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 284BE6332BC512A80049C203 /* RecoveryView.swift */; }; 284BE6362BC512B20049C203 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 284BE6352BC512B20049C203 /* HomeView.swift */; }; 284BE63E2BC55A080049C203 /* EthereumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 284BE63D2BC55A080049C203 /* EthereumHelper.swift */; }; + F0B964702D376989008A3FE1 /* LoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0B9646F2D376983008A3FE1 /* LoadingView.swift */; }; F0EB92902D27C1270024D038 /* mpc-core-kit-swift in Frameworks */ = {isa = PBXBuildFile; productRef = F0EB928F2D27C1270024D038 /* mpc-core-kit-swift */; }; F0EB92922D27C12A0024D038 /* MpcProviderSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F0EB92912D27C12A0024D038 /* MpcProviderSwift */; }; /* End PBXBuildFile section */ @@ -60,6 +61,8 @@ 284BE6332BC512A80049C203 /* RecoveryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecoveryView.swift; sourceTree = ""; }; 284BE6352BC512B20049C203 /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; 284BE63D2BC55A080049C203 /* EthereumHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthereumHelper.swift; sourceTree = ""; }; + F09C56682D2F93C00056861D /* mpc-core-kit-ios-quick-start.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "mpc-core-kit-ios-quick-start.entitlements"; sourceTree = ""; }; + F0B9646F2D376983008A3FE1 /* LoadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingView.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -113,6 +116,7 @@ 284BE5FC2BC509500049C203 /* mpc-core-kit-ios-quick-start */ = { isa = PBXGroup; children = ( + F09C56682D2F93C00056861D /* mpc-core-kit-ios-quick-start.entitlements */, 284BE6302BC50C3C0049C203 /* Helpers */, 284BE62B2BC50A0E0049C203 /* Models */, 284BE62A2BC50A080049C203 /* Views */, @@ -151,6 +155,7 @@ 284BE62A2BC50A080049C203 /* Views */ = { isa = PBXGroup; children = ( + F0B9646F2D376983008A3FE1 /* LoadingView.swift */, 284BE5FF2BC509500049C203 /* ContentView.swift */, 284BE62C2BC50A1F0049C203 /* LoginView.swift */, 284BE6332BC512A80049C203 /* RecoveryView.swift */, @@ -324,6 +329,7 @@ files = ( 284712242BFB94450088411D /* Extension.swift in Sources */, 284BE62D2BC50A1F0049C203 /* LoginView.swift in Sources */, + F0B964702D376989008A3FE1 /* LoadingView.swift in Sources */, 284BE6362BC512B20049C203 /* HomeView.swift in Sources */, 284BE6002BC509500049C203 /* ContentView.swift in Sources */, 284BE5FE2BC509500049C203 /* mpc_core_kit_ios_quick_startApp.swift in Sources */, @@ -491,6 +497,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = "mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.entitlements"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"mpc-core-kit-ios-quick-start/Preview Content\""; @@ -520,6 +527,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = "mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.entitlements"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"mpc-core-kit-ios-quick-start/Preview Content\""; @@ -666,7 +674,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/tkey/mpc-core-kit-swift"; requirement = { - branch = update_dependencies; + branch = feat/signer; kind = branch; }; }; diff --git a/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index c24b64b6..0df5bce1 100644 --- a/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -60,8 +60,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/tkey/mpc-core-kit-swift", "state" : { - "branch" : "update_dependencies", - "revision" : "742afd28c5a7319933c1f41f6796d864581fe0dc" + "branch" : "feat/signer", + "revision" : "31261336790df3227a34d365fd038e10b3c3c7f2" } }, { @@ -195,8 +195,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/tkey/tkey-mpc-swift", "state" : { - "revision" : "b6d9d1013f21f51105e845a0c16ee39b2f01fd1c", - "version" : "4.0.1" + "revision" : "74ea5301e316163b48e653ba107fd9edd4fe6bf8", + "version" : "4.0.2" } }, { diff --git a/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.xcodeproj/project.xcworkspace/xcuserdata/apollo.xcuserdatad/UserInterfaceState.xcuserstate b/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.xcodeproj/project.xcworkspace/xcuserdata/apollo.xcuserdatad/UserInterfaceState.xcuserstate index 116c819a14324ecd82162580c54936c083fb1ea0..6c49afb33a75f2347e28b4c438507138051c7214 100644 GIT binary patch literal 60584 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 F{{Z`cE6)G` literal 32326 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 iHGMzHVN&9x=1E diff --git a/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.xcodeproj/xcuserdata/apollo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.xcodeproj/xcuserdata/apollo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 00000000..fc54be70 --- /dev/null +++ b/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.xcodeproj/xcuserdata/apollo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/Models/MainViewModel.swift b/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/Models/MainViewModel.swift index 792ade59..165b43cf 100644 --- a/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/Models/MainViewModel.swift +++ b/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/Models/MainViewModel.swift @@ -16,6 +16,10 @@ class MainViewModel: ObservableObject { @Published var isRecoveryRequired: Bool = false @Published var factorPubs: [String] = [] + @Published var showAlert: Bool = false + + @Published var isLoaderVisible: Bool = false + var publicAddress: String! @@ -23,10 +27,14 @@ class MainViewModel: ObservableObject { private var ethereumClient: EthereumClient! private var mpcEthereumProvider: MPCEthereumProvider! + + var alertContent: String = "" + var loaderContent: String = "" + func initialize() throws { mpcCoreKit = try MpcCoreKit( - options: .init(web3AuthClientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", - web3AuthNetwork: .SAPPHIRE_MAINNET, storage: UserStorage() + options: .init(web3AuthClientId: "BHgArYmWwSeq21czpcarYh0EVq2WWOzflX-NTK-tY1-1pauPzHKRRLgpABkmYiIV_og9jAvoIxQ8L3Smrwe04Lw", + web3AuthNetwork: .SAPPHIRE_DEVNET, storage: UserStorage() ) ) @@ -57,7 +65,7 @@ class MainViewModel: ObservableObject { Task { do { let result = try await mpcCoreKit.loginWithOAuth( - singleLoginParams: .init(typeOfLogin: .google, verifier: "w3a-google-demo", clientId: "519228911939-cri01h55lsjbsia1k7ll6qpalrus75ps.apps.googleusercontent.com") + singleLoginParams: .init(typeOfLogin: .google, verifier: "w3a-sfa-web-google", clientId: "519228911939-cri01h55lsjbsia1k7ll6qpalrus75ps.apps.googleusercontent.com") ) DispatchQueue.main.async { @@ -78,7 +86,8 @@ class MainViewModel: ObservableObject { do { try await mpcCoreKit.resetAccount() DispatchQueue.main.async { - self.isRecoveryRequired.toggle() + self.isRecoveryRequired = false + self.isLoggedIn = false } } catch let error { print(error.localizedDescription) @@ -101,9 +110,10 @@ class MainViewModel: ObservableObject { func signMessage(onSigned: @escaping (_ signedMessage: String?, _ error: String?) -> ()){ Task { do { + let signature = try mpcCoreKit.sign(message: "YOUR_MESSAGE".data(using: .ascii)!) print(mpcCoreKit.debugDescription) - let signature = try mpcEthereumProvider.signMessage(message: "YOUR_MESSAGE".data(using: .ascii)!) - onSigned(signature, nil) +// let signature = try mpcEthereumProvider.signMessage(message: "YOUR_MESSAGE".data(using: .ascii)!) + onSigned(signature.hexString, nil) } catch let error { onSigned(nil, error.localizedDescription) } @@ -213,6 +223,15 @@ class MainViewModel: ObservableObject { } } + func logout() { + Task { + do { + try await mpcCoreKit.logout() + toggleIsLoggedIn() + } + } + } + private func login() async throws { mpcEthereumProvider = MPCEthereumProvider(evmSigner: mpcCoreKit) publicAddress = mpcEthereumProvider.address.toChecksumAddress() @@ -233,4 +252,24 @@ class MainViewModel: ObservableObject { self.isLoggedIn.toggle() } } + + func showLoader(_ message: String) { + loaderContent = message + DispatchQueue.main.async { + self.isLoaderVisible = true + } + } + + func hideLoader() { + DispatchQueue.main.async { + self.isLoaderVisible = false + } + } + + func showAlert(message: String) { + alertContent = message + DispatchQueue.main.async { + self.showAlert = true + } + } } diff --git a/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/Views/HomeView.swift b/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/Views/HomeView.swift index 357b354e..b91f51ed 100644 --- a/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/Views/HomeView.swift +++ b/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/Views/HomeView.swift @@ -17,107 +17,130 @@ struct HomeView: View { var body: some View { NavigationView { - Form { - Section(header: Text("Public Address")) { - Button( - action: { - UIPasteboard.general.string = viewModel.publicAddress - }, label: { - Text(viewModel.publicAddress) - }) + LoadingView(viewModel: viewModel, content: { + Form { + Section(header: Text("Public Address")) { + Button( + action: { + UIPasteboard.general.string = viewModel.publicAddress + }, label: { + Text(viewModel.publicAddress) + }) + + } - } - - Section(header: Text("Chain Interactions")) { - Button( - action: { - viewModel.signMessage{ - result, error in - if result != nil { - signedMessage = result + Section(header: Text("Chain Interactions")) { + Button( + action: { + viewModel.signMessage{ + result, error in + if result != nil { + signedMessage = result + } } + }, + label: { + Text("Sign Message") } - }, - label: { - Text("Sign Message") + ) + + if signedMessage != nil { + Text(signedMessage!) } - ) - - if signedMessage != nil { - Text(signedMessage!) - } - - Button( - action: { - viewModel.sendTransaction{ - result, error in - if result != nil { - hash = result + + Button( + action: { + viewModel.sendTransaction{ + result, error in + if result != nil { + hash = result + } } + }, + label: { + Text("Send 0.001 ETH") } - }, - label: { - Text("Send 0.001 ETH") + ) + + if(hash != nil) { + Link( + hash!, + destination: URL( + string: "https://sepolia.etherscan.io/tx/\(hash!)" + )! + ).underline() } - ) - - if(hash != nil) { - Link( - hash!, - destination: URL( - string: "https://sepolia.etherscan.io/tx/\(hash!)" - )! - ).underline() + + Text("The sample uses Eth Sepolia, you can choose any EVM network of your choice. Send 0.001 ETH will perform self transfer of ETH. You'll need to have Sepolia faucet to perform transaction.").font(.caption) + } - Text("The sample uses Eth Sepolia, you can choose any EVM network of your choice. Send 0.001 ETH will perform self transfer of ETH. You'll need to have Sepolia faucet to perform transaction.").font(.caption) - - } - - if(!viewModel.factorPubs.isEmpty) { - Section(header: Text("TSS Factors PubKey")) { - ForEach(Array(viewModel.factorPubs), id: \.self) { factorPub in - HStack( - alignment: .top, - spacing: 24, - content: { - Text(factorPub) - Button(action: { - withAnimation { - viewModel.deleteFactor( - factorPub: factorPub - ) + if(!viewModel.factorPubs.isEmpty) { + Section(header: Text("TSS Factors PubKey")) { + ForEach(Array(viewModel.factorPubs), id: \.self) { factorPub in + HStack( + alignment: .top, + spacing: 24, + content: { + Text(factorPub) + Button(action: { + withAnimation { + viewModel.deleteFactor( + factorPub: factorPub + ) + } + }) { + Label("",systemImage: "trash") } - }) { - Label("",systemImage: "trash") } - } - ) + ) + } } } + + Section( + header: Text("TSS Operations") + ) { + Button( + action: { + viewModel.enableMFA() + }, + label: { + Text("Enable MFA") + } + ) + Button( + action: { + viewModel.showAlert(message: "creating factor...") + viewModel.createNewTssFactor() + viewModel.hideLoader() + }, + label: { + Text("Create new Factor") + } + ) + Button( + action: { + viewModel.logout() + }, + label: { + Text("Logout") + } + ) + + Button( + action: { + viewModel.resetAccount() + }, + label: { + Text("Reset") + } + ) + } } - - Section( - header: Text("TSS Operations") - ) { - Button( - action: { - viewModel.enableMFA() - }, - label: { - Text("Enable MFA") - } - ) - Button( - action: { - viewModel.createNewTssFactor() - }, - label: { - Text("Create new Factor") - } - ) - } - } - } + }) + }.alert(isPresented: $viewModel.showAlert, content: { + Alert(title: Text(viewModel.alertContent)) + }) } } diff --git a/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/Views/LoadingView.swift b/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/Views/LoadingView.swift new file mode 100644 index 00000000..ddf9e692 --- /dev/null +++ b/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/Views/LoadingView.swift @@ -0,0 +1,50 @@ +// +// Loading.swift +// mpc-core-kit-ios-quick-start +// +// Created by CW Lee on 15/01/2025. +// + +import SwiftUI + +struct ActivityIndicator: UIViewRepresentable { + + @Binding var isAnimating: Bool + let style: UIActivityIndicatorView.Style + + func makeUIView(context: UIViewRepresentableContext) -> UIActivityIndicatorView { + return UIActivityIndicatorView(style: style) + } + + func updateUIView(_ uiView: UIActivityIndicatorView, context: UIViewRepresentableContext) { + isAnimating ? uiView.startAnimating() : uiView.stopAnimating() + } +} + +struct LoadingView: View where Content: View { + @StateObject var viewModel: MainViewModel + var content: () -> Content + + var body: some View { + GeometryReader { geometry in + ZStack(alignment: .center) { + + self.content() + .disabled(viewModel.isLoaderVisible) + .blur(radius: viewModel.isLoaderVisible ? 3 : 0) + + VStack { + Text(viewModel.loaderContent) + ActivityIndicator(isAnimating: .constant(true), style: .large) + } + .frame(width: geometry.size.width / 2, + height: geometry.size.height / 5) + .background(Color.secondary.colorInvert()) + .foregroundColor(Color.primary) + .cornerRadius(20) + .opacity(viewModel.isLoaderVisible ? 1 : 0) + + } + } + } +} diff --git a/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.entitlements b/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.entitlements new file mode 100644 index 00000000..fbad0237 --- /dev/null +++ b/mpc-core-kit-ios/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start/mpc-core-kit-ios-quick-start.entitlements @@ -0,0 +1,8 @@ + + + + + keychain-access-groups + + +