From a288c8c17fa8282c4802d9cfc701ddcda08bec34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacek=20=C5=81yp?= Date: Fri, 8 Nov 2024 16:35:07 +0100 Subject: [PATCH 1/7] Remove experiment code --- .../xcshareddata/swiftpm/Package.resolved | 4 ++-- .../PrivacyDashboard/PrivacyDashboardViewController.swift | 6 ------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index aaa1a2add3..506b9b5468 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -122,8 +122,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/privacy-dashboard", "state" : { - "revision" : "bea4d750913ef82c10cd06e791686501c8e648e4", - "version" : "7.6.0" + "branch" : "pr-releases/pr-196", + "revision" : "1c355be4c27d067b8f3b7435274865a02d949f52" } }, { diff --git a/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift b/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift index 1c3161a27f..7d8472ed8f 100644 --- a/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift +++ b/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift @@ -88,17 +88,11 @@ final class PrivacyDashboardViewController: UIViewController { contentBlockingManager: ContentBlockerRulesManager, breakageAdditionalInfo: BreakageAdditionalInfo?) { - var variant: PrivacyDashboardVariant { - let isExperimentEnabled = privacyConfigurationManager.privacyConfig.isEnabled(featureKey: .brokenSiteReportExperiment) - return PrivacyDashboardVariant.control - } - let toggleReportingConfiguration = ToggleReportingConfiguration(privacyConfigurationManager: privacyConfigurationManager) let toggleReportingFeature = ToggleReportingFeature(toggleReportingConfiguration: toggleReportingConfiguration) let toggleReportingManager = ToggleReportingManager(feature: toggleReportingFeature) privacyDashboardController = PrivacyDashboardController(privacyInfo: privacyInfo, entryPoint: entryPoint, - variant: variant, toggleReportingManager: toggleReportingManager, eventMapping: privacyDashboardEvents) self.privacyConfigurationManager = privacyConfigurationManager From ceb6694ba0a021c81d3233d25ed62b3b1f7e7680 Mon Sep 17 00:00:00 2001 From: Marcos Gurgel Date: Tue, 19 Nov 2024 17:57:34 +0000 Subject: [PATCH 2/7] Updated packages --- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 506b9b5468..090ef07c05 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -123,7 +123,7 @@ "location" : "https://github.com/duckduckgo/privacy-dashboard", "state" : { "branch" : "pr-releases/pr-196", - "revision" : "1c355be4c27d067b8f3b7435274865a02d949f52" + "revision" : "b4e4a2f7ef5fb0faa999bacb46adef9eac4ce583" } }, { From 95801e816ec1913ec7cae195d88c20e6227a4bb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacek=20=C5=81yp?= Date: Wed, 20 Nov 2024 21:39:00 +0100 Subject: [PATCH 3/7] Remove experimental code --- Core/PixelEvent.swift | 18 ++---------------- DuckDuckGo/FeedbackFormViewController.swift | 8 +------- DuckDuckGo/FeedbackNavigator.swift | 17 +++++++---------- DuckDuckGo/FeedbackPickerViewController.swift | 10 +++------- DuckDuckGo/FeedbackSender.swift | 3 --- DuckDuckGo/FeedbackViewController.swift | 2 +- DuckDuckGo/MainViewController+Segues.swift | 4 ++-- .../PrivacyDashboardViewController.swift | 7 +------ DuckDuckGo/TabViewController.swift | 2 -- 9 files changed, 17 insertions(+), 54 deletions(-) diff --git a/Core/PixelEvent.swift b/Core/PixelEvent.swift index a4dbd0d621..8f48b544cc 100644 --- a/Core/PixelEvent.swift +++ b/Core/PixelEvent.swift @@ -857,16 +857,9 @@ extension Pixel { case secureVaultL2KeyMigration case secureVaultL2KeyPasswordMigration - // MARK: Experimental report broken site flows + // MARK: Report broken site flows case reportBrokenSiteShown - case reportBrokenSiteBreakageCategorySelected case reportBrokenSiteSent - case reportBrokenSiteOverallCategorySelected - case reportBrokenSiteFeedbackCategorySubmitted - case reportBrokenSiteTogglePromptNo - case reportBrokenSiteTogglePromptYes - case reportBrokenSiteSkipToggleStep - case reportBrokenSiteToggleProtectionOff // MARK: New Tab Page baseline engagement case addFavoriteDaily @@ -1812,16 +1805,9 @@ extension Pixel.Event { case .secureVaultL2KeyMigration: return "m_secure-vault_keystore_event_l2-key-migration" case .secureVaultL2KeyPasswordMigration: return "m_secure-vault_keystore_event_l2-key-password-migration" - // MARK: Experimental report broken site flows + // MARK: Report broken site flows case .reportBrokenSiteShown: return "m_report-broken-site_shown" - case .reportBrokenSiteBreakageCategorySelected: return "m_report-broken-site_breakage-category-selected" case .reportBrokenSiteSent: return "m_report-broken-site_sent" - case .reportBrokenSiteOverallCategorySelected: return "m_report-broken-site_overall-category-selected" - case .reportBrokenSiteFeedbackCategorySubmitted: return "m_report-broken-site_feedback-category-submitted" - case .reportBrokenSiteTogglePromptNo: return "m_report-broken-site_toggle-prompt-no" - case .reportBrokenSiteTogglePromptYes: return "m_report-broken-site_toggle-prompt-yes" - case .reportBrokenSiteSkipToggleStep: return "m_report-broken-site_skip-toggle-step" - case .reportBrokenSiteToggleProtectionOff: return "m_report-broken-site_toggle-protection-off" // MARK: New Tab Page baseline engagement case .addFavoriteDaily: return "m_add_favorite_daily" diff --git a/DuckDuckGo/FeedbackFormViewController.swift b/DuckDuckGo/FeedbackFormViewController.swift index 06405bba78..2fa88fde6f 100644 --- a/DuckDuckGo/FeedbackFormViewController.swift +++ b/DuckDuckGo/FeedbackFormViewController.swift @@ -60,7 +60,6 @@ class FeedbackFormViewController: UIViewController { @IBOutlet weak var submitFeedbackButton: UIButton! private var model: FormModel? - private var isFromBrokenSiteReportFlow: Bool = false static func loadFromStoryboard() -> FeedbackFormViewController { let storyboard = UIStoryboard(name: "Feedback", bundle: nil) @@ -94,13 +93,11 @@ class FeedbackFormViewController: UIViewController { } func configureForNegativeSentiment(for type: FormType, - with feedbackModel: Feedback.Model, - isFromBrokenSiteReportFlow: Bool) { + with feedbackModel: Feedback.Model) { guard let category = feedbackModel.category else { fatalError("Feedback model is incomplete!") } model = .negative(feedbackModel) - self.isFromBrokenSiteReportFlow = isFromBrokenSiteReportFlow loadViewIfNeeded() @@ -165,9 +162,6 @@ class FeedbackFormViewController: UIViewController { } case .negative(let feedbackModel): feedbackSender.fireNegativeSentimentPixel(with: feedbackModel) - if isFromBrokenSiteReportFlow { - feedbackSender.fireBrokenSiteReportPixel(with: feedbackModel) - } if message.trimmingWhitespace().isEmpty == false { feedbackSender.submitNegativeSentiment(message: message, url: websiteTextField.text, diff --git a/DuckDuckGo/FeedbackNavigator.swift b/DuckDuckGo/FeedbackNavigator.swift index c7d9d056aa..f762ac4c8a 100644 --- a/DuckDuckGo/FeedbackNavigator.swift +++ b/DuckDuckGo/FeedbackNavigator.swift @@ -23,32 +23,29 @@ class FeedbackNavigator { static func navigate(to nextStep: Feedback.NextStep, from controller: UIViewController, - with model: Feedback.Model, - isFromBrokenSiteReportFlow: Bool) { + with model: Feedback.Model) { switch nextStep { case .presentEntries(let entries): - navigateToFeedbackPicker(with: entries, model: model, from: controller, isFromBrokenSiteReportFlow: isFromBrokenSiteReportFlow) + navigateToFeedbackPicker(with: entries, model: model, from: controller) case .presentForm(let formType): - navigateToFeedbackForm(of: formType, with: model, from: controller, isFromBrokenSiteReportFlow: isFromBrokenSiteReportFlow) + navigateToFeedbackForm(of: formType, with: model, from: controller) } } private static func navigateToFeedbackPicker(with entries: [FeedbackEntry], model: Feedback.Model, - from controller: UIViewController, - isFromBrokenSiteReportFlow: Bool) { + from controller: UIViewController) { let pickerViewController = FeedbackPickerViewController.loadFromStoryboard() - pickerViewController.configureFor(entries: entries, with: model, isFromBrokenSiteReportFlow: isFromBrokenSiteReportFlow) + pickerViewController.configureFor(entries: entries, with: model) controller.navigationController?.pushViewController(pickerViewController, animated: true) } private static func navigateToFeedbackForm(of type: FeedbackFormViewController.FormType, with model: Feedback.Model, - from controller: UIViewController, - isFromBrokenSiteReportFlow: Bool) { + from controller: UIViewController) { let formViewController = FeedbackFormViewController.loadFromStoryboard() - formViewController.configureForNegativeSentiment(for: type, with: model, isFromBrokenSiteReportFlow: isFromBrokenSiteReportFlow) + formViewController.configureForNegativeSentiment(for: type, with: model) controller.navigationController?.pushViewController(formViewController, animated: true) } } diff --git a/DuckDuckGo/FeedbackPickerViewController.swift b/DuckDuckGo/FeedbackPickerViewController.swift index c031dedd46..5d617406d4 100644 --- a/DuckDuckGo/FeedbackPickerViewController.swift +++ b/DuckDuckGo/FeedbackPickerViewController.swift @@ -25,8 +25,6 @@ class FeedbackPickerViewController: UITableViewController { @IBOutlet weak var headerText: UILabel! @IBOutlet weak var supplementaryText: UILabel! - private var isFromBrokenSiteReportFlow: Bool = false - private var entries = [FeedbackEntry]() private var selectionHandler: (Feedback.Model) -> Void = { _ in } @@ -61,15 +59,14 @@ class FeedbackPickerViewController: UITableViewController { } } - func configure(with categories: [Feedback.Category], isFromBrokenSiteReportFlow: Bool) { + func configure(with categories: [Feedback.Category]) { entries = categories - self.isFromBrokenSiteReportFlow = isFromBrokenSiteReportFlow headerText.setAttributedTextString(UserText.feedbackNegativeHeader) supplementaryText.setAttributedTextString(UserText.feedbackNegativeSupplementary) } - func configureFor(entries: [FeedbackEntry], with model: Feedback.Model, isFromBrokenSiteReportFlow: Bool) { + func configureFor(entries: [FeedbackEntry], with model: Feedback.Model) { guard let category = model.category else { fatalError("Feedback model has empty category") } @@ -81,7 +78,6 @@ class FeedbackPickerViewController: UITableViewController { supplementaryText.setAttributedTextString(FeedbackPresenter.subtitle(for: category)) self.entries = entries - self.isFromBrokenSiteReportFlow = isFromBrokenSiteReportFlow } func setSelectionHandler(_ handler: @escaping (Feedback.Model) -> Void) { @@ -105,7 +101,7 @@ class FeedbackPickerViewController: UITableViewController { model.subcategory = selectedEntry } - FeedbackNavigator.navigate(to: selectedEntry.nextStep, from: self, with: model, isFromBrokenSiteReportFlow: isFromBrokenSiteReportFlow) + FeedbackNavigator.navigate(to: selectedEntry.nextStep, from: self, with: model) } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { diff --git a/DuckDuckGo/FeedbackSender.swift b/DuckDuckGo/FeedbackSender.swift index 1572232174..2dd3521b47 100644 --- a/DuckDuckGo/FeedbackSender.swift +++ b/DuckDuckGo/FeedbackSender.swift @@ -119,7 +119,4 @@ struct FeedbackSubmitter: FeedbackSender { Pixel.fire(pixel: pixel) } - public func fireBrokenSiteReportPixel(with model: Feedback.Model) { - Pixel.fire(pixel: .reportBrokenSiteFeedbackCategorySubmitted, withAdditionalParameters: ["category": model.category?.component ?? ""]) - } } diff --git a/DuckDuckGo/FeedbackViewController.swift b/DuckDuckGo/FeedbackViewController.swift index 5badf846e9..43d450ce04 100644 --- a/DuckDuckGo/FeedbackViewController.swift +++ b/DuckDuckGo/FeedbackViewController.swift @@ -69,7 +69,7 @@ class FeedbackViewController: UIViewController { let isNavigatingToCategories = sender as? UIButton == negativeFeedbackButton if isNavigatingToCategories { controller.loadViewIfNeeded() - controller.configure(with: Feedback.Category.allCases, isFromBrokenSiteReportFlow: false) + controller.configure(with: Feedback.Category.allCases) return } } diff --git a/DuckDuckGo/MainViewController+Segues.swift b/DuckDuckGo/MainViewController+Segues.swift index 2ca6573a8a..f7aaa34335 100644 --- a/DuckDuckGo/MainViewController+Segues.swift +++ b/DuckDuckGo/MainViewController+Segues.swift @@ -150,7 +150,7 @@ extension MainViewController { Pixel.fire(pixel: .reportBrokenSiteShown, withAdditionalParameters: parameters) } - func segueToNegativeFeedbackForm(isFromBrokenSiteReportFlow: Bool = false) { + func segueToNegativeFeedbackForm() { Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() @@ -160,7 +160,7 @@ extension MainViewController { feedbackPicker.view.backgroundColor = UIColor(designSystemColor: .backgroundSheets) feedbackPicker.modalPresentationStyle = isPad ? .formSheet : .pageSheet feedbackPicker.loadViewIfNeeded() - feedbackPicker.configure(with: Feedback.Category.allCases, isFromBrokenSiteReportFlow: isFromBrokenSiteReportFlow) + feedbackPicker.configure(with: Feedback.Category.allCases) present(UINavigationController(rootViewController: feedbackPicker), animated: true) } diff --git a/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift b/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift index 7d8472ed8f..2336fbc829 100644 --- a/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift +++ b/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift @@ -66,13 +66,8 @@ final class PrivacyDashboardViewController: UIViewController { let domainEvent: Pixel.Event switch event { case .showReportBrokenSite: domainEvent = .privacyDashboardReportBrokenSite - - case .breakageCategorySelected: domainEvent = .reportBrokenSiteBreakageCategorySelected - case .overallCategorySelected: domainEvent = .reportBrokenSiteOverallCategorySelected case .reportBrokenSiteShown: domainEvent = .reportBrokenSiteShown case .reportBrokenSiteSent: domainEvent = .reportBrokenSiteSent - case .skipToggleStep: domainEvent = .reportBrokenSiteSkipToggleStep - case .toggleProtectionOff: domainEvent = .reportBrokenSiteToggleProtectionOff } if let parameters { Pixel.fire(pixel: domainEvent, withAdditionalParameters: parameters) @@ -244,7 +239,7 @@ extension PrivacyDashboardViewController: PrivacyDashboardControllerDelegate { func privacyDashboardControllerDidRequestShowGeneralFeedback(_ privacyDashboardController: PrivacyDashboardController) { guard let mainViewController = presentingViewController as? MainViewController else { return } dismiss(animated: true) { - mainViewController.segueToNegativeFeedbackForm(isFromBrokenSiteReportFlow: true) + mainViewController.segueToNegativeFeedbackForm() } } diff --git a/DuckDuckGo/TabViewController.swift b/DuckDuckGo/TabViewController.swift index 6f2aceffb1..4eda32da73 100644 --- a/DuckDuckGo/TabViewController.swift +++ b/DuckDuckGo/TabViewController.swift @@ -1235,12 +1235,10 @@ class TabViewController: UIViewController { self.alertPresenter = AlertViewPresenter(title: UserText.brokenSiteReportToggleAlertTitle, image: "SiteBreakage", leftButton: (UserText.brokenSiteReportToggleAlertYesButton, { [weak self] in - Pixel.fire(pixel: .reportBrokenSiteTogglePromptYes) (self?.parent as? MainViewController)?.segueToReportBrokenSite(entryPoint: .afterTogglePrompt(category: breakageCategory, didToggleProtectionsFixIssue: true)) }), rightButton: (UserText.brokenSiteReportToggleAlertNoButton, { [weak self] in - Pixel.fire(pixel: .reportBrokenSiteTogglePromptNo) (self?.parent as? MainViewController)?.segueToReportBrokenSite(entryPoint: .afterTogglePrompt(category: breakageCategory, didToggleProtectionsFixIssue: false)) })) From bd27272d7ef3e3d002260c939beeb2b7d92e1d3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacek=20=C5=81yp?= Date: Thu, 21 Nov 2024 11:48:02 +0100 Subject: [PATCH 4/7] Remove experimental code --- DuckDuckGo.xcodeproj/project.pbxproj | 10 +-- DuckDuckGo/AlertView.swift | 83 ----------------- DuckDuckGo/AlertViewPresenter.swift | 90 ------------------- DuckDuckGo/MainViewController+Segues.swift | 2 - .../PrivacyDashboardViewController.swift | 12 --- DuckDuckGo/TabViewController.swift | 31 ------- DuckDuckGo/UserText.swift | 3 - DuckDuckGo/en.lproj/Localizable.strings | 9 -- 8 files changed, 2 insertions(+), 238 deletions(-) delete mode 100644 DuckDuckGo/AlertView.swift delete mode 100644 DuckDuckGo/AlertViewPresenter.swift diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 02f068e429..cb9fe70ab0 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -1028,8 +1028,6 @@ CB5516D2286500290079B175 /* AtbServerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85F21DBD21121147002631A6 /* AtbServerTests.swift */; }; CB6CC7E42CD2529000320907 /* BrokenSitePrompt in Frameworks */ = {isa = PBXBuildFile; productRef = CB6CC7E32CD2529000320907 /* BrokenSitePrompt */; }; CB6D8E982C80A9B100D0E772 /* SpecialErrorPages in Frameworks */ = {isa = PBXBuildFile; productRef = CB6D8E972C80A9B100D0E772 /* SpecialErrorPages */; }; - CB825C922C071B1400BCC586 /* AlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB825C912C071B1400BCC586 /* AlertView.swift */; }; - CB825C962C071C9300BCC586 /* AlertViewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB825C952C071C9300BCC586 /* AlertViewPresenter.swift */; }; CB84C7BD29A3EF530088A5B8 /* AppConfigurationURLProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB24F70E29A3EB15006DCC58 /* AppConfigurationURLProvider.swift */; }; CB941A6E2B96AB08000F9E7A /* PrivacyDashboard in Frameworks */ = {isa = PBXBuildFile; productRef = CB941A6D2B96AB08000F9E7A /* PrivacyDashboard */; }; CB9B873E278C93C2001F4906 /* HomeMessage.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CB9B873D278C93C2001F4906 /* HomeMessage.xcassets */; }; @@ -2957,8 +2955,6 @@ CB6CE65B2AF6D4EE00119848 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; CB7407BC2AF6D56D0090A41C /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; CB75AA132AF6D5AA00AED266 /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/InfoPlist.strings; sourceTree = ""; }; - CB825C912C071B1400BCC586 /* AlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertView.swift; sourceTree = ""; }; - CB825C952C071C9300BCC586 /* AlertViewPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertViewPresenter.swift; sourceTree = ""; }; CB84C7C029A3F0280088A5B8 /* ConfigurationStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfigurationStore.swift; sourceTree = ""; }; CB8EF4A32AF6D4C200EF158D /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/InfoPlist.strings; sourceTree = ""; }; CB8F1F7D2AF6D5370024BF0E /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -2990,6 +2986,7 @@ CBDD5DDE29A6736A00832877 /* APIHeadersTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = APIHeadersTests.swift; sourceTree = ""; }; CBDD5DE029A6741300832877 /* MockBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockBundle.swift; sourceTree = ""; }; CBE099292AF6D54D000EFC47 /* lv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lv; path = lv.lproj/InfoPlist.strings; sourceTree = ""; }; + CBE66FB22CEF436D009A57F1 /* BrowserServicesKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = BrowserServicesKit; path = ../BrowserServicesKit; sourceTree = SOURCE_ROOT; }; CBECB27B2AF6D58D006960FA /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; CBECDB792CD981C6005B8B87 /* AppPageRefreshMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppPageRefreshMonitor.swift; sourceTree = ""; }; CBEF49902AF6D50600BFBD7D /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -3536,8 +3533,6 @@ 1E162604296840D80004127F /* Triangle.swift */, 1E1626062968413B0004127F /* ViewExtension.swift */, EE4BE0082A740BED00CD6AA8 /* ClearTextField.swift */, - CB825C912C071B1400BCC586 /* AlertView.swift */, - CB825C952C071C9300BCC586 /* AlertViewPresenter.swift */, 6FD3F80E2C3EF4F000DA5797 /* DeviceOrientationEnvironmentValue.swift */, 9FEA222D2C324ECD006B03BF /* ViewVisibility.swift */, 9F69331E2C5B1D0C00CD6A5D /* OnFirstAppearViewModifier.swift */, @@ -4516,6 +4511,7 @@ 84E341891E2F7EFB00BDBA6F = { isa = PBXGroup; children = ( + CBE66FB22CEF436D009A57F1 /* BrowserServicesKit */, EE3B98EB2A963515002F63A0 /* WidgetsExtensionAlpha.entitlements */, 6FB030C7234331B400A10DB9 /* Configuration.xcconfig */, EEB8FDB92A990AEE00EBEDCF /* Configuration-Alpha.xcconfig */, @@ -8085,7 +8081,6 @@ 7B059F112D0387E900371ED0 /* WidgetEducationViewController.swift in Sources */, 7B059F122D0387E900371ED0 /* WidgetEducationView.swift in Sources */, 9F9A92342C86B42B001D036D /* AppIconPicker.swift in Sources */, - CB825C962C071C9300BCC586 /* AlertViewPresenter.swift in Sources */, 1EE7C299294227EC0026C8CB /* AutoconsentSettingsViewController.swift in Sources */, 1E8AD1D527C2E22900ABA377 /* DownloadsListSectionViewModel.swift in Sources */, EE0798C52B179936000A4F64 /* NetworkProtectionVPNCountryLabelsModel.swift in Sources */, @@ -8294,7 +8289,6 @@ 1DEAADEC2BA45B4500E25A97 /* SettingsAccessibilityView.swift in Sources */, 85C8E61D2B0E47380029A6BD /* BookmarksDatabaseSetup.swift in Sources */, 3132FA2C27A07A1B00DD7A12 /* FilePreview.swift in Sources */, - CB825C922C071B1400BCC586 /* AlertView.swift in Sources */, 1DDF40292BA04FCD006850D9 /* SettingsPrivacyProtectionsView.swift in Sources */, BDE91CD82C629A910005CB74 /* UnifiedFeedbackSender.swift in Sources */, 7B4DC5C32CB2AF0700EE5CC2 /* WidgetKind.swift in Sources */, diff --git a/DuckDuckGo/AlertView.swift b/DuckDuckGo/AlertView.swift deleted file mode 100644 index 2a4288725b..0000000000 --- a/DuckDuckGo/AlertView.swift +++ /dev/null @@ -1,83 +0,0 @@ -// -// AlertView.swift -// DuckDuckGo -// -// Copyright © 2024 DuckDuckGo. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation -import SwiftUI - -struct AlertButtonStyle: ButtonStyle { - - func makeBody(configuration: Configuration) -> some View { - configuration.label - .padding() - .frame(maxWidth: .infinity) - .background(Color(.white).opacity(0.18)) - .foregroundColor(.white) - .font(Font(uiFont: UIFont.daxBodyBold())) - .cornerRadius(8) - .scaleEffect(configuration.isPressed ? 0.95 : 1.0) - .animation(.easeInOut(duration: 0.2), value: configuration.isPressed) - } - -} - -struct AlertView: View { - let title: String - let image: String - let leftButton: (title: String, action: () -> Void) - let rightButton: (title: String, action: () -> Void) - - var body: some View { - VStack(alignment: .leading, spacing: 10) { - HStack(spacing: 5) { - Image(image) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 53) - Text(title) - .font(Font(uiFont: UIFont.appFont(ofSize: 16))) - .foregroundColor(.white) - } - - HStack(spacing: 10) { - Group { - Button(leftButton.title) { - leftButton.action() - } - Button(rightButton.title) { - rightButton.action() - } - } - .buttonStyle(AlertButtonStyle()) - } - - } - .padding(EdgeInsets(top: 16, leading: 20, bottom: 16, trailing: 20)) - .background(Color.black) - .cornerRadius(10) - } -} - -struct AlertView_Previews: PreviewProvider { - static var previews: some View { - AlertView(title: "Did turning Privacy Protections off resolve the issue on this site?", - image: "SiteBreakage", - leftButton: ("Yes", {}), - rightButton: ("No", {})) - } -} diff --git a/DuckDuckGo/AlertViewPresenter.swift b/DuckDuckGo/AlertViewPresenter.swift deleted file mode 100644 index 80bbfb3957..0000000000 --- a/DuckDuckGo/AlertViewPresenter.swift +++ /dev/null @@ -1,90 +0,0 @@ -// -// AlertViewPresenter.swift -// DuckDuckGo -// -// Copyright © 2024 DuckDuckGo. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation -import SwiftUI -import UIKit - -final class AlertViewPresenter { - - private enum Constants { - - static let animationDuration: Double = 0.2 - static let bottomPadding: Double = 28.0 - static let horizontalPadding: Double = 20.0 - static let maxWidth: Double = 358.0 - - } - - let title: String - let image: String - let leftButton: (title: String, action: () -> Void) - let rightButton: (title: String, action: () -> Void) - - private lazy var alertView: AlertView = { - AlertView(title: title, - image: image, - leftButton: (leftButton.title, { [weak self] in self?.leftButton.action(); self?.hide() }), - rightButton: (rightButton.title, { [weak self] in self?.rightButton.action(); self?.hide() })) - }() - private lazy var hostingController: UIHostingController = { - let hostingController = UIHostingController(rootView: alertView) - hostingController.view.backgroundColor = .clear - return hostingController - }() - - init(title: String, - image: String, - leftButton: (title: String, action: () -> Void), - rightButton: (title: String, action: () -> Void)) { - self.title = title - self.image = image - self.leftButton = leftButton - self.rightButton = rightButton - } - - func present(in viewController: UIViewController, animated: Bool) { - guard let view = viewController.view, let window = view.window else { return } - - viewController.addChild(hostingController) - view.addSubview(hostingController.view) - hostingController.didMove(toParent: viewController) - hostingController.view.alpha = 0.0 - - let alertViewWidth = min(window.frame.width - 2 * Constants.horizontalPadding, Constants.maxWidth) - hostingController.view.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint.activate([ - hostingController.view.centerXAnchor.constraint(equalTo: view.centerXAnchor), - hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -Constants.bottomPadding), - hostingController.view.widthAnchor.constraint(equalToConstant: alertViewWidth) - ]) - hostingController.view.layoutIfNeeded() - - UIView.animate(withDuration: animated ? Constants.animationDuration : 0) { - self.hostingController.view.alpha = 1.0 - } - } - - func hide() { - hostingController.willMove(toParent: nil) - hostingController.view.removeFromSuperview() - hostingController.removeFromParent() - } - -} diff --git a/DuckDuckGo/MainViewController+Segues.swift b/DuckDuckGo/MainViewController+Segues.swift index f7aaa34335..f1ddf10815 100644 --- a/DuckDuckGo/MainViewController+Segues.swift +++ b/DuckDuckGo/MainViewController+Segues.swift @@ -128,8 +128,6 @@ extension MainViewController { } currentTab?.privacyDashboard = controller - controller.delegate = currentTab - currentTab?.breakageCategory = nil controller.popoverPresentationController?.delegate = controller controller.view.backgroundColor = UIColor(designSystemColor: .backgroundSheets) diff --git a/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift b/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift index 2336fbc829..68c9bee306 100644 --- a/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift +++ b/DuckDuckGo/PrivacyDashboard/PrivacyDashboardViewController.swift @@ -26,19 +26,11 @@ import PrivacyDashboard import Common import os.log -protocol PrivacyDashboardViewControllerDelegate: AnyObject { - - func privacyDashboardViewController(_ privacyDashboardViewController: PrivacyDashboardViewController, - didSelectBreakageCategory breakageCategory: String) - -} - final class PrivacyDashboardViewController: UIViewController { @IBOutlet private(set) weak var webView: WKWebView! public var breakageAdditionalInfo: BreakageAdditionalInfo? - public weak var delegate: PrivacyDashboardViewControllerDelegate? private let privacyDashboardController: PrivacyDashboardController private let privacyConfigurationManager: PrivacyConfigurationManaging @@ -175,10 +167,6 @@ extension PrivacyDashboardViewController { // MARK: - PrivacyDashboardControllerDelegate extension PrivacyDashboardViewController: PrivacyDashboardControllerDelegate { - - func privacyDashboardController(_ privacyDashboardController: PrivacyDashboardController, didSelectBreakageCategory category: String) { - delegate?.privacyDashboardViewController(self, didSelectBreakageCategory: category) - } func privacyDashboardController(_ privacyDashboardController: PrivacyDashboardController, didChangeProtectionSwitch protectionState: ProtectionState, diff --git a/DuckDuckGo/TabViewController.swift b/DuckDuckGo/TabViewController.swift index 4eda32da73..7f34a0460d 100644 --- a/DuckDuckGo/TabViewController.swift +++ b/DuckDuckGo/TabViewController.swift @@ -952,8 +952,6 @@ class TabViewController: UIViewController { controller.popoverPresentationController?.sourceRect = iconView.bounds } privacyDashboard = controller - privacyDashboard?.delegate = self - breakageCategory = nil } if let controller = segue.destination as? FullscreenDaxDialogViewController { @@ -1226,26 +1224,6 @@ class TabViewController: UIViewController { job() } - private var alertPresenter: AlertViewPresenter? - var breakageCategory: String? - private func schedulePrivacyProtectionsOffAlert() { - guard let breakageCategory else { return } - DispatchQueue.main.asyncAfter(deadline: .now() + 3) { - self.alertPresenter?.hide() - self.alertPresenter = AlertViewPresenter(title: UserText.brokenSiteReportToggleAlertTitle, - image: "SiteBreakage", - leftButton: (UserText.brokenSiteReportToggleAlertYesButton, { [weak self] in - (self?.parent as? MainViewController)?.segueToReportBrokenSite(entryPoint: .afterTogglePrompt(category: breakageCategory, - didToggleProtectionsFixIssue: true)) - }), - rightButton: (UserText.brokenSiteReportToggleAlertNoButton, { [weak self] in - (self?.parent as? MainViewController)?.segueToReportBrokenSite(entryPoint: .afterTogglePrompt(category: breakageCategory, - didToggleProtectionsFixIssue: false)) - })) - self.alertPresenter?.present(in: self, animated: true) - } - } - deinit { rulesCompilationMonitor.tabWillClose(tabModel.uid) removeObservers() @@ -1254,14 +1232,6 @@ class TabViewController: UIViewController { } } -extension TabViewController: PrivacyDashboardViewControllerDelegate { - - func privacyDashboardViewController(_ privacyDashboardViewController: PrivacyDashboardViewController, didSelectBreakageCategory breakageCategory: String) { - self.breakageCategory = breakageCategory - } - -} - // MARK: - LoginFormDetectionDelegate extension TabViewController: LoginFormDetectionDelegate { @@ -2590,7 +2560,6 @@ extension TabViewController: UserContentControllerDelegate { }) { reload() - schedulePrivacyProtectionsOffAlert() } } diff --git a/DuckDuckGo/UserText.swift b/DuckDuckGo/UserText.swift index 1a09828feb..34931e4d01 100644 --- a/DuckDuckGo/UserText.swift +++ b/DuckDuckGo/UserText.swift @@ -1353,9 +1353,6 @@ But if you *do* want a peek under the hood, you can find more information about public static let brokenSiteReportMissingDescriptionAlertTitle = NSLocalizedString("broken.site.report.missing.description.alert.title", value: "Description Required", comment: "It appears as an alert after user tries to send a report without submitting any details") public static let brokenSiteReportMissingDescriptionAlertDescription = NSLocalizedString("broken.site.report.missing.description.alert.description", value: "Please describe the issue you experienced on this site so we can better understand how to fix it.", comment: "It appears as an alert after user tries to send a report without submitting any details") public static let brokenSiteReportMissingDescriptionAlertButton = NSLocalizedString("broken.site.report.missing.description.alert.button", value: "Got It", comment: "Acknowledge button") - public static let brokenSiteReportToggleAlertTitle = NSLocalizedString("broken.site.report.toggle.alert.title", value: "Did turning Privacy Protections off resolve the issue on this site?", comment: "An alert that appears after user turns off the privacy protection") - public static let brokenSiteReportToggleAlertYesButton = NSLocalizedString("broken.site.report.toggle.alert.yes.button", value: "Yes", comment: "Button to answer question 'Did turning off protections resolve the issue on this site?'") - public static let brokenSiteReportToggleAlertNoButton = NSLocalizedString("broken.site.report.toggle.alert.no.button", value: "No", comment: "Button to answer question 'Did turning off protections resolve the issue on this site?'") // Duck Player public static let duckPlayerAlwaysEnabledLabel = NSLocalizedString("duckPlayer.alwaysEnabled.label", value: "Always", comment: "Text displayed when DuckPlayer is always enabled") diff --git a/DuckDuckGo/en.lproj/Localizable.strings b/DuckDuckGo/en.lproj/Localizable.strings index 4ef6488e78..b034ee999b 100644 --- a/DuckDuckGo/en.lproj/Localizable.strings +++ b/DuckDuckGo/en.lproj/Localizable.strings @@ -773,15 +773,6 @@ /* Message that appears after submitting report */ "broken.site.report.success.toast" = "Your report helps make DuckDuckGo better for everyone!"; -/* Button to answer question 'Did turning off protections resolve the issue on this site?' */ -"broken.site.report.toggle.alert.no.button" = "No"; - -/* An alert that appears after user turns off the privacy protection */ -"broken.site.report.toggle.alert.title" = "Did turning Privacy Protections off resolve the issue on this site?"; - -/* Button to answer question 'Did turning off protections resolve the issue on this site?' */ -"broken.site.report.toggle.alert.yes.button" = "Yes"; - /* Button to continue the onboarding process */ "contextual.onboarding.addToDock.buttons.skip" = "Skip"; From 19cbcf074072c3c38723d80128d7ff95e6479e25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacek=20=C5=81yp?= Date: Thu, 21 Nov 2024 16:53:42 +0100 Subject: [PATCH 5/7] Privacy Dashboard 8.0.0 --- DuckDuckGo.xcodeproj/project.pbxproj | 2 -- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index cb9fe70ab0..28ac8e0836 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -2986,7 +2986,6 @@ CBDD5DDE29A6736A00832877 /* APIHeadersTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = APIHeadersTests.swift; sourceTree = ""; }; CBDD5DE029A6741300832877 /* MockBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockBundle.swift; sourceTree = ""; }; CBE099292AF6D54D000EFC47 /* lv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lv; path = lv.lproj/InfoPlist.strings; sourceTree = ""; }; - CBE66FB22CEF436D009A57F1 /* BrowserServicesKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = BrowserServicesKit; path = ../BrowserServicesKit; sourceTree = SOURCE_ROOT; }; CBECB27B2AF6D58D006960FA /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; CBECDB792CD981C6005B8B87 /* AppPageRefreshMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppPageRefreshMonitor.swift; sourceTree = ""; }; CBEF49902AF6D50600BFBD7D /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -4511,7 +4510,6 @@ 84E341891E2F7EFB00BDBA6F = { isa = PBXGroup; children = ( - CBE66FB22CEF436D009A57F1 /* BrowserServicesKit */, EE3B98EB2A963515002F63A0 /* WidgetsExtensionAlpha.entitlements */, 6FB030C7234331B400A10DB9 /* Configuration.xcconfig */, EEB8FDB92A990AEE00EBEDCF /* Configuration-Alpha.xcconfig */, diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 090ef07c05..a587cc9487 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -122,8 +122,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/privacy-dashboard", "state" : { - "branch" : "pr-releases/pr-196", - "revision" : "b4e4a2f7ef5fb0faa999bacb46adef9eac4ce583" + "revision" : "3f58e008d4e9d1b56ab12dbb95bd891045cf2758", + "version" : "8.0.0" } }, { From 88397210f311c0a9a32e7a6f05e92957cbee4488 Mon Sep 17 00:00:00 2001 From: Marcos Gurgel Date: Fri, 17 Jan 2025 17:56:11 +0000 Subject: [PATCH 6/7] Aligning Privacy Dashboard EventMapping with macOS (#3822) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task/Issue URL: https://app.asana.com/0/1206594217596623/1209173355503842/f **Description**: Removes automatic firing of `BrokenSiteReportShown` pixel to align with macOS. The firing of that pixel is now actively requested by the Privacy Dashboard (see https://github.com/duckduckgo/BrowserServicesKit/pull/1167) This PR contains a fix for on https://github.com/duckduckgo/iOS/pull/3802 which is why it is stacked on it. Please let me know if this is not the best way to have this code reviewed. **Steps to test this PR**: 1. Invoke the breakage form in the two possible ways: Open the Privacy Dashboard and click on "Report a problem with this site" Open the app menu ••• and click on "Report Broken Site” (iOS) 2. Confirm that the pixel `m_report-broken-site_shown` was fired 3. Submit a report 4. Confirm that the pixels `epbf` and `m_report-broken-site_sent` were fired **Definition of Done (Internal Only)**: * [ ] Does this PR satisfy our [Definition of Done](https://app.asana.com/0/1202500774821704/1207634633537039/f)? **Copy Testing**: * [ ] Use of correct apostrophes in new copy, ie `’` rather than `’` **Orientation Testing**: * [ ] Portrait * [ ] Landscape **Device Testing**: * [ ] iPhone SE (1st Gen) * [ ] iPhone 8 * [ ] iPhone X * [ ] iPhone 14 Pro * [ ] iPad **OS Testing**: * [ ] iOS 15 * [ ] iOS 16 * [ ] iOS 17 **Theme Testing**: * [ ] Light theme * [ ] Dark theme — [Software Engineering Expectations](https://app.asana.com/0/59792373528535/199064865822552) [Technical Design Template](https://app.asana.com/0/59792373528535/184709971311943) --------- Co-authored-by: Jacek Łyp --- .../xcshareddata/swiftpm/Package.resolved | 4 ++-- DuckDuckGo/MainViewController+Segues.swift | 11 ----------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index a587cc9487..6c19350ccc 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -122,8 +122,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/privacy-dashboard", "state" : { - "revision" : "3f58e008d4e9d1b56ab12dbb95bd891045cf2758", - "version" : "8.0.0" + "branch" : "pr-releases/pr-302", + "revision" : "05d04de7505117b32949b2007e5a56ba2d39469b" } }, { diff --git a/DuckDuckGo/MainViewController+Segues.swift b/DuckDuckGo/MainViewController+Segues.swift index f1ddf10815..714d5e67b3 100644 --- a/DuckDuckGo/MainViewController+Segues.swift +++ b/DuckDuckGo/MainViewController+Segues.swift @@ -108,10 +108,6 @@ extension MainViewController { return } - if entryPoint == .report { - fireBrokenSiteReportShown() - } - let storyboard = UIStoryboard(name: "PrivacyDashboard", bundle: nil) let controller = storyboard.instantiateInitialViewController { coder in PrivacyDashboardViewController(coder: coder, @@ -141,13 +137,6 @@ extension MainViewController { present(controller, animated: true) } - private func fireBrokenSiteReportShown() { - let parameters = [ - PrivacyDashboardEvents.Parameters.source: BrokenSiteReport.Source.appMenu.rawValue - ] - Pixel.fire(pixel: .reportBrokenSiteShown, withAdditionalParameters: parameters) - } - func segueToNegativeFeedbackForm() { Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() From 7cf6d8fc143837e4641bb10922ea049e2ae5ddf9 Mon Sep 17 00:00:00 2001 From: Marcos Gurgel Date: Mon, 20 Jan 2025 11:58:19 +0000 Subject: [PATCH 7/7] BSK bump --- DuckDuckGo.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/swiftpm/Package.resolved | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 28ac8e0836..d42081729d 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -11953,7 +11953,7 @@ repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit"; requirement = { kind = exactVersion; - version = 225.1.0; + version = 226.0.0; }; }; 9F8FE9472BAE50E50071E372 /* XCRemoteSwiftPackageReference "lottie-spm" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 6c19350ccc..d2d80a070b 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -32,8 +32,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/DuckDuckGo/BrowserServicesKit", "state" : { - "revision" : "fb315acdbbea9dee949cc066fcafbb1a1f3618f4", - "version" : "225.1.0" + "revision" : "d1275238d88f25cd31a29be2b4f20bbba5de9aa1", + "version" : "226.0.0" } }, { @@ -122,8 +122,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/privacy-dashboard", "state" : { - "branch" : "pr-releases/pr-302", - "revision" : "05d04de7505117b32949b2007e5a56ba2d39469b" + "revision" : "c52bd5d851b1f8f0482e82b8720852670f525497", + "version" : "8.1.0" } }, {