From 0d94bea4097f102dc337975f7fb686fdff3d174f Mon Sep 17 00:00:00 2001 From: Fonta1n3 Date: Tue, 19 Oct 2021 15:14:47 +0800 Subject: [PATCH] feat: add qr button to each input output for exporting address qr chore: reenable entitlements for app store --- FullyNoded.xcodeproj/project.pbxproj | 8 ++--- FullyNoded/Base.lproj/Main.storyboard | 30 +++++++++++++++++-- FullyNoded/FullyNoded.entitlements | 6 ++++ FullyNoded/FullyNodedRelease.entitlements | 6 ++++ .../SecurityCenterViewController.swift | 12 ++++---- .../VerifyTransactionViewController.swift | 27 ++++++++++++++++- 6 files changed, 75 insertions(+), 14 deletions(-) diff --git a/FullyNoded.xcodeproj/project.pbxproj b/FullyNoded.xcodeproj/project.pbxproj index d6935f58..5d1c16ee 100644 --- a/FullyNoded.xcodeproj/project.pbxproj +++ b/FullyNoded.xcodeproj/project.pbxproj @@ -1510,7 +1510,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 337; + CURRENT_PROJECT_VERSION = 338; DEVELOPMENT_TEAM = 8JHDU5M9KD; "ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = YES; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; @@ -1521,7 +1521,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.417; + MARKETING_VERSION = 1.418; PRODUCT_BUNDLE_IDENTIFIER = com.fontaine.FullyNoded; "PRODUCT_BUNDLE_IDENTIFIER[sdk=macosx*]" = com.fontaine.fullynodedmacos; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1546,7 +1546,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 337; + CURRENT_PROJECT_VERSION = 338; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = 8JHDU5M9KD; "ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = YES; @@ -1559,7 +1559,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.417; + MARKETING_VERSION = 1.418; PRODUCT_BUNDLE_IDENTIFIER = com.fontaine.FullyNoded; "PRODUCT_BUNDLE_IDENTIFIER[sdk=macosx*]" = com.fontaine.fullynodedmacos; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/FullyNoded/Base.lproj/Main.storyboard b/FullyNoded/Base.lproj/Main.storyboard index 848bf65c..d5f80356 100644 --- a/FullyNoded/Base.lproj/Main.storyboard +++ b/FullyNoded/Base.lproj/Main.storyboard @@ -1559,6 +1559,15 @@ + @@ -1567,6 +1576,7 @@ + @@ -1575,6 +1585,7 @@ + @@ -1813,6 +1824,15 @@ xxxxx + @@ -1829,8 +1849,10 @@ xxxxx + + @@ -2165,6 +2187,7 @@ xxxxx + @@ -7729,9 +7752,9 @@ COLD means no keys will be generated and no private keys can be imported. - - - + + + @@ -7773,6 +7796,7 @@ COLD means no keys will be generated and no private keys can be imported. + diff --git a/FullyNoded/FullyNoded.entitlements b/FullyNoded/FullyNoded.entitlements index a74a3e30..7340fbb3 100644 --- a/FullyNoded/FullyNoded.entitlements +++ b/FullyNoded/FullyNoded.entitlements @@ -4,6 +4,12 @@ aps-environment development + com.apple.developer.applesignin + + Default + + com.apple.developer.default-data-protection + NSFileProtectionComplete com.apple.developer.icloud-container-identifiers iCloud.com.fullynoded.backup diff --git a/FullyNoded/FullyNodedRelease.entitlements b/FullyNoded/FullyNodedRelease.entitlements index d741096f..4aa7a5e7 100644 --- a/FullyNoded/FullyNodedRelease.entitlements +++ b/FullyNoded/FullyNodedRelease.entitlements @@ -4,6 +4,12 @@ aps-environment development + com.apple.developer.applesignin + + Default + + com.apple.developer.default-data-protection + NSFileProtectionComplete com.apple.developer.icloud-container-identifiers iCloud.com.fullynoded.backup diff --git a/FullyNoded/View Controllers/Settings/Security Center/SecurityCenterViewController.swift b/FullyNoded/View Controllers/Settings/Security Center/SecurityCenterViewController.swift index 6d18ebed..731292c8 100644 --- a/FullyNoded/View Controllers/Settings/Security Center/SecurityCenterViewController.swift +++ b/FullyNoded/View Controllers/Settings/Security Center/SecurityCenterViewController.swift @@ -161,12 +161,12 @@ class SecurityCenterViewController: UIViewController, UITableViewDelegate, UITab } case 1: -// if KeyChain.getData("userIdentifier") == nil { -// add2fa() -// } else { -// promptToDisable2fa() -// } - showAlert(vc: self, title: "", message: "This feature is not available for the dmg.") + if KeyChain.getData("userIdentifier") == nil { + add2fa() + } else { + promptToDisable2fa() + } + //showAlert(vc: self, title: "", message: "This feature is not available for the dmg.") case 2: DispatchQueue.main.async { [unowned vc = self] in vc.performSegue(withIdentifier: "addPasswordSegue", sender: vc) diff --git a/FullyNoded/View Controllers/VerifyTransactionViewController.swift b/FullyNoded/View Controllers/VerifyTransactionViewController.swift index d68c5dee..12d14239 100644 --- a/FullyNoded/View Controllers/VerifyTransactionViewController.swift +++ b/FullyNoded/View Controllers/VerifyTransactionViewController.swift @@ -1456,6 +1456,7 @@ class VerifyTransactionViewController: UIViewController, UINavigationControllerD let sigsImageView = inputCell.viewWithTag(17) as! UIImageView let copyAddressButton = inputCell.viewWithTag(18) as! UIButton let copyDescButton = inputCell.viewWithTag(19) as! UIButton + let addressQrButton = inputCell.viewWithTag(20) as! UIButton backgroundView1.layer.cornerRadius = 5 backgroundView2.layer.cornerRadius = 5 @@ -1495,9 +1496,11 @@ class VerifyTransactionViewController: UIViewController, UINavigationControllerD copyAddressButton.restorationIdentifier = inputAddress copyDescButton.restorationIdentifier = desc + addressQrButton.restorationIdentifier = inputAddress copyAddressButton.addTarget(self, action: #selector(copyAddress(_:)), for: .touchUpInside) copyDescButton.addTarget(self, action: #selector(copyDesc(_:)), for: .touchUpInside) + addressQrButton.addTarget(self, action: #selector(showAddressQr(_:)), for: .touchUpInside) signaturesLabel.text = signatureStatus @@ -1584,6 +1587,7 @@ class VerifyTransactionViewController: UIViewController, UINavigationControllerD let copyAddressButton = outputCell.viewWithTag(21) as! UIButton let copyDescriptorButton = outputCell.viewWithTag(22) as! UIButton let verifyOwnerButton = outputCell.viewWithTag(23) as! UIButton + let addressQrButton = outputCell.viewWithTag(24) as! UIButton signableBackgroundView.layer.cornerRadius = 5 verifiedByFnBackgroundView.layer.cornerRadius = 5 @@ -1628,10 +1632,12 @@ class VerifyTransactionViewController: UIViewController, UINavigationControllerD copyAddressButton.restorationIdentifier = outputAddress verifyOwnerButton.restorationIdentifier = outputAddress + " " + "\(indexPath.row)" copyDescriptorButton.restorationIdentifier = desc + addressQrButton.restorationIdentifier = outputAddress copyAddressButton.addTarget(self, action: #selector(copyAddress(_:)), for: .touchUpInside) copyDescriptorButton.addTarget(self, action: #selector(copyDesc(_:)), for: .touchUpInside) verifyOwnerButton.addTarget(self, action: #selector(verifyOwner(_:)), for: .touchUpInside) + addressQrButton.addTarget(self, action: #selector(showAddressQr(_:)), for: .touchUpInside) if isOursFullyNoded { verifiedByFnLabel.text = "Owned by \(walletLabel)" @@ -1988,6 +1994,17 @@ class VerifyTransactionViewController: UIViewController, UINavigationControllerD showAlert(vc: self, title: "", message: "Address copied ✓") } + @objc func showAddressQr(_ sender: UIButton) { + guard let address = sender.restorationIdentifier else { return } + + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + + self.qrCodeStringToExport = address + self.performSegue(withIdentifier: "segueToShowAddressQR", sender: self) + } + } + @objc func copyDesc(_ sender: UIButton) { UIPasteboard.general.string = sender.restorationIdentifier @@ -2388,8 +2405,16 @@ class VerifyTransactionViewController: UIViewController, UINavigationControllerD override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. + if segue.identifier == "segueToShowAddressQR" { + if let vc = segue.destination as? QRDisplayerViewController { + vc.text = self.qrCodeStringToExport + vc.headerIcon = UIImage(systemName: "square.and.arrow.up") + vc.headerText = "Address" + vc.descriptionText = self.qrCodeStringToExport + } + } + if segue.identifier == "segueToExportPsbtAsQr" { - if let vc = segue.destination as? QRDisplayerViewController { if self.qrCodeStringToExport != "" {