From 0400c59d54a0661727243eca84f9544832e39855 Mon Sep 17 00:00:00 2001 From: Ioan Moldovan Date: Thu, 25 Dec 2025 15:57:28 -0800 Subject: [PATCH 1/5] add ios 26 compatibility --- .../Controllers/Search/SearchViewController.swift | 3 ++- FlowCrypt/Info.plist | 2 -- FlowCryptUI/Views/NavigationBarActionButton.swift | 15 +++++---------- FlowCryptUI/Views/NavigationBarItemsView.swift | 13 +++++++++---- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/FlowCrypt/Controllers/Search/SearchViewController.swift b/FlowCrypt/Controllers/Search/SearchViewController.swift index 0817eeebd..59d91ef8e 100644 --- a/FlowCrypt/Controllers/Search/SearchViewController.swift +++ b/FlowCrypt/Controllers/Search/SearchViewController.swift @@ -38,7 +38,8 @@ class SearchViewController: InboxViewController { override func setupNavigationBar() { title = "search_title".localized - navigationItem.titleView = searchController.searchBar + navigationItem.searchController = searchController + navigationItem.hidesSearchBarWhenScrolling = false navigationItem.rightBarButtonItems = nil navigationItem.leftBarButtonItem = .defaultBackButton { self.navigationController?.popViewController(animated: true) diff --git a/FlowCrypt/Info.plist b/FlowCrypt/Info.plist index fcb9898e2..8907b4276 100644 --- a/FlowCrypt/Info.plist +++ b/FlowCrypt/Info.plist @@ -2,8 +2,6 @@ - UIDesignRequiresCompatibility - CFBundleDevelopmentRegion en CFBundleDisplayName diff --git a/FlowCryptUI/Views/NavigationBarActionButton.swift b/FlowCryptUI/Views/NavigationBarActionButton.swift index 4ad781e96..67ab0843b 100644 --- a/FlowCryptUI/Views/NavigationBarActionButton.swift +++ b/FlowCryptUI/Views/NavigationBarActionButton.swift @@ -16,16 +16,11 @@ public final class NavigationBarActionButton: UIBarButtonItem { private var onAction: (() -> Void)? public convenience init(imageSystemName: String, action: (() -> Void)?, accessibilityIdentifier: String? = nil) { - self.init() - onAction = action - customView = UIButton(type: .system).with { - $0.contentHorizontalAlignment = .left - $0.setImage(UIImage(systemName: imageSystemName), for: .normal) - $0.frame.size = Constants.buttonSize - $0.addTarget(self, action: #selector(tap), for: .touchUpInside) - $0.accessibilityIdentifier = accessibilityIdentifier - $0.isAccessibilityElement = true - } + self.init(image: UIImage(systemName: imageSystemName), style: .plain, target: nil, action: nil) + self.target = self + self.action = #selector(tap) + self.accessibilityIdentifier = accessibilityIdentifier + self.onAction = action } @objc private func tap() { diff --git a/FlowCryptUI/Views/NavigationBarItemsView.swift b/FlowCryptUI/Views/NavigationBarItemsView.swift index f720380e4..6d58648d7 100644 --- a/FlowCryptUI/Views/NavigationBarItemsView.swift +++ b/FlowCryptUI/Views/NavigationBarItemsView.swift @@ -43,12 +43,17 @@ public final class NavigationBarItemsView: UIBarButtonItem { let buttons = input.enumerated() .map { value in - UIButton(type: .system).then { + UIButton(configuration: .plain()).then { $0.tag = value.offset + $0.configuration?.image = value.element.image + $0.configuration?.title = value.element.title + $0.configuration?.baseForegroundColor = .white + $0.configuration?.contentInsets = .zero + $0.frame.size = Constants.buttonSize - $0.imageView?.frame.size = Constants.buttonSize - $0.setImage(value.element.image, for: .normal) - $0.setTitle(value.element.title, for: .normal) + // Ensure image scales correctly within the configuration + $0.imageView?.contentMode = .scaleAspectFit + $0.accessibilityIdentifier = value.element.accessibilityId $0.isAccessibilityElement = true $0.addTarget(self, action: #selector(self.handleTap(with:)), for: .touchUpInside) From f51a4cfca64afc225b81d70a53bd7fe6dc91a712 Mon Sep 17 00:00:00 2001 From: Ioan Moldovan Date: Tue, 14 Apr 2026 08:27:30 -0300 Subject: [PATCH 2/5] Revert "add ios 26 compatibility" This reverts commit 0400c59d54a0661727243eca84f9544832e39855. --- .../Controllers/Search/SearchViewController.swift | 3 +-- FlowCrypt/Info.plist | 2 ++ FlowCryptUI/Views/NavigationBarActionButton.swift | 15 ++++++++++----- FlowCryptUI/Views/NavigationBarItemsView.swift | 13 ++++--------- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/FlowCrypt/Controllers/Search/SearchViewController.swift b/FlowCrypt/Controllers/Search/SearchViewController.swift index 59d91ef8e..0817eeebd 100644 --- a/FlowCrypt/Controllers/Search/SearchViewController.swift +++ b/FlowCrypt/Controllers/Search/SearchViewController.swift @@ -38,8 +38,7 @@ class SearchViewController: InboxViewController { override func setupNavigationBar() { title = "search_title".localized - navigationItem.searchController = searchController - navigationItem.hidesSearchBarWhenScrolling = false + navigationItem.titleView = searchController.searchBar navigationItem.rightBarButtonItems = nil navigationItem.leftBarButtonItem = .defaultBackButton { self.navigationController?.popViewController(animated: true) diff --git a/FlowCrypt/Info.plist b/FlowCrypt/Info.plist index 8907b4276..fcb9898e2 100644 --- a/FlowCrypt/Info.plist +++ b/FlowCrypt/Info.plist @@ -2,6 +2,8 @@ + UIDesignRequiresCompatibility + CFBundleDevelopmentRegion en CFBundleDisplayName diff --git a/FlowCryptUI/Views/NavigationBarActionButton.swift b/FlowCryptUI/Views/NavigationBarActionButton.swift index 67ab0843b..4ad781e96 100644 --- a/FlowCryptUI/Views/NavigationBarActionButton.swift +++ b/FlowCryptUI/Views/NavigationBarActionButton.swift @@ -16,11 +16,16 @@ public final class NavigationBarActionButton: UIBarButtonItem { private var onAction: (() -> Void)? public convenience init(imageSystemName: String, action: (() -> Void)?, accessibilityIdentifier: String? = nil) { - self.init(image: UIImage(systemName: imageSystemName), style: .plain, target: nil, action: nil) - self.target = self - self.action = #selector(tap) - self.accessibilityIdentifier = accessibilityIdentifier - self.onAction = action + self.init() + onAction = action + customView = UIButton(type: .system).with { + $0.contentHorizontalAlignment = .left + $0.setImage(UIImage(systemName: imageSystemName), for: .normal) + $0.frame.size = Constants.buttonSize + $0.addTarget(self, action: #selector(tap), for: .touchUpInside) + $0.accessibilityIdentifier = accessibilityIdentifier + $0.isAccessibilityElement = true + } } @objc private func tap() { diff --git a/FlowCryptUI/Views/NavigationBarItemsView.swift b/FlowCryptUI/Views/NavigationBarItemsView.swift index 6d58648d7..f720380e4 100644 --- a/FlowCryptUI/Views/NavigationBarItemsView.swift +++ b/FlowCryptUI/Views/NavigationBarItemsView.swift @@ -43,17 +43,12 @@ public final class NavigationBarItemsView: UIBarButtonItem { let buttons = input.enumerated() .map { value in - UIButton(configuration: .plain()).then { + UIButton(type: .system).then { $0.tag = value.offset - $0.configuration?.image = value.element.image - $0.configuration?.title = value.element.title - $0.configuration?.baseForegroundColor = .white - $0.configuration?.contentInsets = .zero - $0.frame.size = Constants.buttonSize - // Ensure image scales correctly within the configuration - $0.imageView?.contentMode = .scaleAspectFit - + $0.imageView?.frame.size = Constants.buttonSize + $0.setImage(value.element.image, for: .normal) + $0.setTitle(value.element.title, for: .normal) $0.accessibilityIdentifier = value.element.accessibilityId $0.isAccessibilityElement = true $0.addTarget(self, action: #selector(self.handleTap(with:)), for: .touchUpInside) From 07e639700f44d0a0e362ad379eac822942646ee1 Mon Sep 17 00:00:00 2001 From: Ioan Moldovan Date: Tue, 14 Apr 2026 09:42:26 -0300 Subject: [PATCH 3/5] fix: ios 26 compatability --- FlowCrypt/Controllers/Search/SearchViewController.swift | 3 --- .../Setup/SetupManuallyEnterPassPhraseViewController.swift | 1 - .../Setup/SetupManuallyImportKeyViewController.swift | 1 - .../NavigationController/MainNavigationController.swift | 5 ++--- FlowCrypt/Info.plist | 2 -- 5 files changed, 2 insertions(+), 10 deletions(-) diff --git a/FlowCrypt/Controllers/Search/SearchViewController.swift b/FlowCrypt/Controllers/Search/SearchViewController.swift index 0817eeebd..7de6186d9 100644 --- a/FlowCrypt/Controllers/Search/SearchViewController.swift +++ b/FlowCrypt/Controllers/Search/SearchViewController.swift @@ -51,10 +51,7 @@ class SearchViewController: InboxViewController { $0.searchResultsUpdater = self $0.hidesNavigationBarDuringPresentation = false $0.searchBar.tintColor = .white - $0.searchBar.setImage(UIImage(systemName: "magnifyingglass")?.tinted(.white), for: .search, state: .normal) - $0.searchBar.setImage(UIImage(systemName: "xmark")?.tinted(.white), for: .clear, state: .normal) $0.searchBar.delegate = self - $0.searchBar.searchTextField.textColor = .white } update(searchController: searchController) definesPresentationContext = true diff --git a/FlowCrypt/Controllers/Setup/SetupManuallyEnterPassPhraseViewController.swift b/FlowCrypt/Controllers/Setup/SetupManuallyEnterPassPhraseViewController.swift index ff19bdce3..a93f48068 100644 --- a/FlowCrypt/Controllers/Setup/SetupManuallyEnterPassPhraseViewController.swift +++ b/FlowCrypt/Controllers/Setup/SetupManuallyEnterPassPhraseViewController.swift @@ -68,7 +68,6 @@ final class SetupManuallyEnterPassPhraseViewController: TableNodeViewController, override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) navigationController?.setNavigationBarHidden(false, animated: animated) - navigationController?.navigationBar.barStyle = .black } private func setupUI() { diff --git a/FlowCrypt/Controllers/Setup/SetupManuallyImportKeyViewController.swift b/FlowCrypt/Controllers/Setup/SetupManuallyImportKeyViewController.swift index 328a70592..cf1201471 100644 --- a/FlowCrypt/Controllers/Setup/SetupManuallyImportKeyViewController.swift +++ b/FlowCrypt/Controllers/Setup/SetupManuallyImportKeyViewController.swift @@ -60,7 +60,6 @@ final class SetupManuallyImportKeyViewController: TableNodeViewController { override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) navigationController?.setNavigationBarHidden(false, animated: animated) - navigationController?.navigationBar.barStyle = .black } override func viewDidAppear(_ animated: Bool) { diff --git a/FlowCrypt/Controllers/SideMenu/NavigationController/MainNavigationController.swift b/FlowCrypt/Controllers/SideMenu/NavigationController/MainNavigationController.swift index 8ad3564c7..53b1e75d8 100644 --- a/FlowCrypt/Controllers/SideMenu/NavigationController/MainNavigationController.swift +++ b/FlowCrypt/Controllers/SideMenu/NavigationController/MainNavigationController.swift @@ -62,15 +62,14 @@ extension UINavigationController { navigationBar.backItem?.title = "" let appearance = UINavigationBarAppearance() - appearance.configureWithOpaqueBackground() - appearance.backgroundColor = .main + appearance.configureWithDefaultBackground() appearance.titleTextAttributes = [.foregroundColor: UIColor.white] navigationBar.standardAppearance = appearance navigationBar.scrollEdgeAppearance = appearance + navigationBar.compactAppearance = appearance navigationBar.compactScrollEdgeAppearance = appearance navigationBar.do { - $0.barTintColor = .main $0.tintColor = .white $0.titleTextAttributes = [.foregroundColor: UIColor.white] } diff --git a/FlowCrypt/Info.plist b/FlowCrypt/Info.plist index fcb9898e2..8907b4276 100644 --- a/FlowCrypt/Info.plist +++ b/FlowCrypt/Info.plist @@ -2,8 +2,6 @@ - UIDesignRequiresCompatibility - CFBundleDevelopmentRegion en CFBundleDisplayName From 9a141b01ec321606b485559627aa6a9e4d26e491 Mon Sep 17 00:00:00 2001 From: Ioan Moldovan Date: Tue, 14 Apr 2026 09:51:11 -0300 Subject: [PATCH 4/5] fix: ios26 --- .../Search/SearchViewController.swift | 37 ++++++++++++++----- .../Main/SideMenuNavigationController.swift | 5 ++- .../MainNavigationController.swift | 33 ++++++++++++----- 3 files changed, 54 insertions(+), 21 deletions(-) diff --git a/FlowCrypt/Controllers/Search/SearchViewController.swift b/FlowCrypt/Controllers/Search/SearchViewController.swift index 7de6186d9..e334f22b9 100644 --- a/FlowCrypt/Controllers/Search/SearchViewController.swift +++ b/FlowCrypt/Controllers/Search/SearchViewController.swift @@ -38,11 +38,17 @@ class SearchViewController: InboxViewController { override func setupNavigationBar() { title = "search_title".localized - navigationItem.titleView = searchController.searchBar navigationItem.rightBarButtonItems = nil navigationItem.leftBarButtonItem = .defaultBackButton { self.navigationController?.popViewController(animated: true) } + + if #available(iOS 26.0, *) { + navigationItem.searchController = searchController + navigationItem.hidesSearchBarWhenScrolling = false + } else { + navigationItem.titleView = searchController.searchBar + } } private func setupSearch() { @@ -50,22 +56,33 @@ class SearchViewController: InboxViewController { $0.delegate = self $0.searchResultsUpdater = self $0.hidesNavigationBarDuringPresentation = false - $0.searchBar.tintColor = .white $0.searchBar.delegate = self } + + if #unavailable(iOS 26.0) { + searchController.do { + $0.searchBar.tintColor = .white + $0.searchBar.setImage(UIImage(systemName: "magnifyingglass")?.tinted(.white), for: .search, state: .normal) + $0.searchBar.setImage(UIImage(systemName: "xmark")?.tinted(.white), for: .clear, state: .normal) + $0.searchBar.searchTextField.textColor = .white + } + } + update(searchController: searchController) definesPresentationContext = true } private func update(searchController: UISearchController) { - searchController.searchBar.searchTextField.attributedPlaceholder = "search_placeholder" - .localized - .attributed( - .regular(14), - color: UIColor.white.withAlphaComponent(0.7), - alignment: .left - ) - searchController.searchBar.searchTextField.textColor = .white + if #unavailable(iOS 26.0) { + searchController.searchBar.searchTextField.attributedPlaceholder = "search_placeholder" + .localized + .attributed( + .regular(14), + color: UIColor.white.withAlphaComponent(0.7), + alignment: .left + ) + searchController.searchBar.searchTextField.textColor = .white + } searchController.searchBar.searchTextField.accessibilityIdentifier = "aid-search-all-emails-field" } } diff --git a/FlowCrypt/Controllers/SideMenu/Main/SideMenuNavigationController.swift b/FlowCrypt/Controllers/SideMenu/Main/SideMenuNavigationController.swift index f5b84ad73..3d0e41798 100644 --- a/FlowCrypt/Controllers/SideMenu/Main/SideMenuNavigationController.swift +++ b/FlowCrypt/Controllers/SideMenu/Main/SideMenuNavigationController.swift @@ -24,7 +24,10 @@ final class SideMenuNavigationController: ENSideMenuNavigationController { } override var preferredStatusBarStyle: UIStatusBarStyle { - .lightContent + if #available(iOS 26.0, *) { + return .default + } + return .lightContent } override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { diff --git a/FlowCrypt/Controllers/SideMenu/NavigationController/MainNavigationController.swift b/FlowCrypt/Controllers/SideMenu/NavigationController/MainNavigationController.swift index 53b1e75d8..5c6ef36ba 100644 --- a/FlowCrypt/Controllers/SideMenu/NavigationController/MainNavigationController.swift +++ b/FlowCrypt/Controllers/SideMenu/NavigationController/MainNavigationController.swift @@ -61,17 +61,30 @@ extension UINavigationController { .then { $0.title = "" } navigationBar.backItem?.title = "" - let appearance = UINavigationBarAppearance() - appearance.configureWithDefaultBackground() - appearance.titleTextAttributes = [.foregroundColor: UIColor.white] - navigationBar.standardAppearance = appearance - navigationBar.scrollEdgeAppearance = appearance - navigationBar.compactAppearance = appearance - navigationBar.compactScrollEdgeAppearance = appearance + if #available(iOS 26.0, *) { + let appearance = UINavigationBarAppearance() + appearance.configureWithTransparentBackground() + navigationBar.standardAppearance = appearance + navigationBar.scrollEdgeAppearance = appearance + navigationBar.compactAppearance = appearance + navigationBar.compactScrollEdgeAppearance = appearance - navigationBar.do { - $0.tintColor = .white - $0.titleTextAttributes = [.foregroundColor: UIColor.white] + navigationBar.tintColor = .main + } else { + let appearance = UINavigationBarAppearance() + appearance.configureWithOpaqueBackground() + appearance.backgroundColor = .main + appearance.titleTextAttributes = [.foregroundColor: UIColor.white] + navigationBar.standardAppearance = appearance + navigationBar.scrollEdgeAppearance = appearance + navigationBar.compactAppearance = appearance + navigationBar.compactScrollEdgeAppearance = appearance + + navigationBar.do { + $0.barTintColor = .main + $0.tintColor = .white + $0.titleTextAttributes = [.foregroundColor: UIColor.white] + } } } } From 29c31080536507c5dce9ba816ab0c109623b4f3b Mon Sep 17 00:00:00 2001 From: Ioan Moldovan Date: Thu, 16 Apr 2026 06:02:15 -0700 Subject: [PATCH 5/5] fix: pr reviews --- .../xcshareddata/swiftpm/Package.resolved | 41 +++++++++++-------- FlowCryptUI/Nodes/TableViewController.swift | 8 +++- .../Views/NavigationBarActionButton.swift | 23 +++++++---- 3 files changed, 48 insertions(+), 24 deletions(-) diff --git a/FlowCrypt.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/FlowCrypt.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 9494aa36d..81c5db5e7 100644 --- a/FlowCrypt.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/FlowCrypt.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -42,8 +42,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/google/google-api-objectivec-client-for-rest", "state" : { - "revision" : "3981beeb0ece282c6ed8e965cbb5b1bccfbe1543", - "version" : "5.0.0" + "revision" : "499087368ae106b7e00cd8cbb82fdd78257dfbc7", + "version" : "5.2.0" } }, { @@ -51,8 +51,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/google/GoogleSignIn-iOS", "state" : { - "revision" : "3996d908c7b3ce8a87d39c808f9a6b2a08fbe043", - "version" : "9.0.0" + "revision" : "913b4005ea26aebe1c97d54e35ad82a515924c71", + "version" : "9.1.0" } }, { @@ -141,8 +141,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/jpsim/SourceKitten.git", "state" : { - "revision" : "453f75b8a3bb2c3596c0d2dd422c289788233a22", - "version" : "0.37.1" + "revision" : "6529c17fe80dd94843a3df7ed3e6a239790d5c91", + "version" : "0.37.3" } }, { @@ -150,8 +150,17 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-argument-parser.git", "state" : { - "revision" : "309a47b2b1d9b5e991f36961c983ecec72275be3", - "version" : "1.6.1" + "revision" : "626b5b7b2f45e1b0b1c6f4a309296d1d21d7311b", + "version" : "1.7.1" + } + }, + { + "identity" : "swift-filename-matcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ileitch/swift-filename-matcher", + "state" : { + "revision" : "eef5ac0b6b3cdc64b3039b037bed2def8a1edaeb", + "version" : "2.0.1" } }, { @@ -159,8 +168,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/swiftlang/swift-syntax.git", "state" : { - "revision" : "1103c45ece4f7fe160b8f75b4ea1ee2e5fac1841", - "version" : "601.0.0" + "revision" : "65b02a90ad2cc213e09309faeb7f6909e0a8577a", + "version" : "604.0.0-prerelease-2026-01-20" } }, { @@ -168,8 +177,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/realm/SwiftLint", "state" : { - "revision" : "625792423014cc49b0a1e5a1a5c0d6b8b3de10f9", - "version" : "0.59.1" + "revision" : "88952528a590ed366c6f76f6bfb980b5ebdcefc1", + "version" : "0.63.2" } }, { @@ -177,8 +186,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/scinfu/SwiftSoup.git", "state" : { - "revision" : "04a5da442816f764b2a8513c38420b4e6605145b", - "version" : "2.10.1" + "revision" : "6c7915e16f729857aec3e99068c361e58a00ed68", + "version" : "2.13.4" } }, { @@ -222,8 +231,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/jpsim/Yams.git", "state" : { - "revision" : "3d6871d5b4a5cd519adf233fbb576e0a2af71c17", - "version" : "5.4.0" + "revision" : "deaf82e867fa2cbd3cd865978b079bfcf384ac28", + "version" : "6.2.1" } } ], diff --git a/FlowCryptUI/Nodes/TableViewController.swift b/FlowCryptUI/Nodes/TableViewController.swift index d7b7cd8c0..226b6b958 100644 --- a/FlowCryptUI/Nodes/TableViewController.swift +++ b/FlowCryptUI/Nodes/TableViewController.swift @@ -52,10 +52,16 @@ open class TableNodeViewController: ASDKViewController { public extension UINavigationItem { func setAccessibility(id: String?) { + let titleColor: UIColor + if #available(iOS 26.0, *) { + titleColor = .main + } else { + titleColor = .white + } let titleLabel = UILabel() titleLabel.attributedText = id?.attributed( .medium(16), - color: .white, + color: titleColor, alignment: .center ) titleLabel.sizeToFit() diff --git a/FlowCryptUI/Views/NavigationBarActionButton.swift b/FlowCryptUI/Views/NavigationBarActionButton.swift index 4ad781e96..5c41e24a9 100644 --- a/FlowCryptUI/Views/NavigationBarActionButton.swift +++ b/FlowCryptUI/Views/NavigationBarActionButton.swift @@ -18,13 +18,22 @@ public final class NavigationBarActionButton: UIBarButtonItem { public convenience init(imageSystemName: String, action: (() -> Void)?, accessibilityIdentifier: String? = nil) { self.init() onAction = action - customView = UIButton(type: .system).with { - $0.contentHorizontalAlignment = .left - $0.setImage(UIImage(systemName: imageSystemName), for: .normal) - $0.frame.size = Constants.buttonSize - $0.addTarget(self, action: #selector(tap), for: .touchUpInside) - $0.accessibilityIdentifier = accessibilityIdentifier - $0.isAccessibilityElement = true + if #available(iOS 26.0, *) { + image = UIImage(systemName: imageSystemName) + tintColor = .main + target = self + self.action = #selector(tap) + self.accessibilityIdentifier = accessibilityIdentifier + isAccessibilityElement = true + } else { + customView = UIButton(type: .system).with { + $0.contentHorizontalAlignment = .left + $0.setImage(UIImage(systemName: imageSystemName), for: .normal) + $0.frame.size = Constants.buttonSize + $0.addTarget(self, action: #selector(tap), for: .touchUpInside) + $0.accessibilityIdentifier = accessibilityIdentifier + $0.isAccessibilityElement = true + } } }