From 09e542c18bc8738494fd3a9f3dcba1b4c1e2bc9e Mon Sep 17 00:00:00 2001 From: amddg44 Date: Mon, 14 Oct 2024 11:51:43 +0200 Subject: [PATCH 1/3] Prevent autofill prompt crash for edge case where a context menu is also visible on screen (#3417) Task/Issue URL: https://app.asana.com/0/414709148257752/1208361080593409/f Tech Design URL: CC: Description: Fixes a potential crash that is triggered when dismissing the password generation prompt fails where a context menu is also present, requiring a subsequent attempt which results in crashing on: NSInternalInconsistencyException: replyHandler passed to userContentController:didReceiveScriptMessage:replyHandler: should not be called twice --- ...sswordGenerationPromptViewController.swift | 23 ++++++++++++------ DuckDuckGo/TabViewController.swift | 24 ++++++++++++++++--- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/DuckDuckGo/PasswordGenerationPromptViewController.swift b/DuckDuckGo/PasswordGenerationPromptViewController.swift index 4ac1c56edb..024104e6ff 100644 --- a/DuckDuckGo/PasswordGenerationPromptViewController.swift +++ b/DuckDuckGo/PasswordGenerationPromptViewController.swift @@ -63,11 +63,24 @@ class PasswordGenerationPromptViewController: UIViewController { presentationController?.delegate = self installChildViewController(controller) } + + /// This is to handle cases where a webpage may have also presented a context menu, which ends up getting dismissed instead of this sheet + private func dismissSheetWithRetry(attempts: Int = 2, useGeneratedPassword: Bool) { + dismiss(animated: true) { [weak self] in + if self?.presentingViewController != nil && attempts > 0 { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + self?.dismissSheetWithRetry(attempts: attempts - 1, useGeneratedPassword: useGeneratedPassword) + } + } else { + self?.completion?(useGeneratedPassword) + } + } + } } extension PasswordGenerationPromptViewController: UISheetPresentationControllerDelegate { func presentationControllerDidDismiss(_ presentationController: UIPresentationController) { - Pixel.fire(pixel: .autofillLoginsPasswordGenerationPromptDismissed) + Pixel.fire(pixel: .autofillLoginsPasswordGenerationPromptDismissed) self.completion?(false) } @@ -77,17 +90,13 @@ extension PasswordGenerationPromptViewController: PasswordGenerationPromptViewMo func passwordGenerationPromptViewModelDidSelect(_ viewModel: PasswordGenerationPromptViewModel) { Pixel.fire(pixel: .autofillLoginsPasswordGenerationPromptConfirmed) - dismiss(animated: true) { - self.completion?(true) - } + dismissSheetWithRetry(useGeneratedPassword: true) } func passwordGenerationPromptViewModelDidCancel(_ viewModel: PasswordGenerationPromptViewModel) { Pixel.fire(pixel: .autofillLoginsPasswordGenerationPromptDismissed) - dismiss(animated: true) { - self.completion?(false) - } + dismissSheetWithRetry(useGeneratedPassword: false) } func passwordGenerationPromptViewModelDidResizeContent(_ viewModel: PasswordGenerationPromptViewModel, contentHeight: CGFloat) { diff --git a/DuckDuckGo/TabViewController.swift b/DuckDuckGo/TabViewController.swift index 668ff0364a..57ccefbb33 100644 --- a/DuckDuckGo/TabViewController.swift +++ b/DuckDuckGo/TabViewController.swift @@ -2786,8 +2786,17 @@ extension TabViewController: SecureVaultManagerDelegate { func secureVaultManager(_: SecureVaultManager, promptUserWithGeneratedPassword password: String, completionHandler: @escaping (Bool) -> Void) { + + var responseSent: Bool = false + + let sendResponse: (Bool) -> Void = { useGeneratedPassword in + guard !responseSent else { return } + responseSent = true + completionHandler(useGeneratedPassword) + } + let passwordGenerationPromptViewController = PasswordGenerationPromptViewController(generatedPassword: password) { useGeneratedPassword in - completionHandler(useGeneratedPassword) + sendResponse(useGeneratedPassword) } if let presentationController = passwordGenerationPromptViewController.presentationController as? UISheetPresentationController { @@ -2810,6 +2819,15 @@ extension TabViewController: SecureVaultManagerDelegate { useLargeDetent: Bool, onAccountSelected: @escaping (SecureVaultModels.WebsiteAccount?) -> Void, completionHandler: @escaping (SecureVaultModels.WebsiteAccount?) -> Void) { + + var responseSent: Bool = false + + let sendResponse: (SecureVaultModels.WebsiteAccount?) -> Void = { account in + guard !responseSent else { return } + responseSent = true + completionHandler(account) + } + let autofillPromptViewController = AutofillLoginPromptViewController(accounts: accountMatches, domain: domain, trigger: trigger, @@ -2825,10 +2843,10 @@ extension TabViewController: SecureVaultManagerDelegate { onAccountSelected(account) }, completionHandler: { account in - completionHandler(account) + sendResponse(account) }) } else { - completionHandler(account) + sendResponse(account) } }) From c9a486b5bb0ec1e3a0bcfd27279b431d2c0b4bfa Mon Sep 17 00:00:00 2001 From: bwaresiak Date: Mon, 14 Oct 2024 16:00:34 +0200 Subject: [PATCH 2/3] Add error handling to contrainer removal (#3424) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task/Issue URL: https://app.asana.com/0/856498667320406/1207976962313181/f **Description**: Make sure the containers created recently or the ones that fail to be removed are given another chance to be cleaned. **Steps to test this PR**: Open the app, navigate to site that sets cookies, refresh, press fire button. Smoke test data clearing, auto clear - both on app restart and time based one. Test fireproofing on usage and after restart. **Definition of Done (Internal Only)**: * [ ] Does this PR satisfy our [Definition of Done](https://app.asana.com/0/1202500774821704/1207634633537039/f)? **OS Testing**: * [ ] iOS 15 * [ ] iOS 16 * [ ] iOS 17 **Theme Testing**: * [ ] Light theme * [ ] Dark theme --- ###### Internal references: [Software Engineering Expectations](https://app.asana.com/0/59792373528535/199064865822552) [Technical Design Template](https://app.asana.com/0/59792373528535/184709971311943) --- Core/WebCacheManager.swift | 40 ++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/Core/WebCacheManager.swift b/Core/WebCacheManager.swift index c43462a36c..b6655f82b6 100644 --- a/Core/WebCacheManager.swift +++ b/Core/WebCacheManager.swift @@ -82,14 +82,29 @@ public class WebCacheManager { dataStoreIdManager: DataStoreIdManaging = DataStoreIdManager.shared) async { var cookiesToUpdate = [HTTPCookie]() + var leftoverContainerIDs = [UUID]() if #available(iOS 17, *) { - cookiesToUpdate += await containerBasedClearing(storeIdManager: dataStoreIdManager) ?? [] + let result = await containerBasedClearing(storeIdManager: dataStoreIdManager) + cookiesToUpdate += result.cookies + leftoverContainerIDs = result.leftoverContainerIDs } // Perform legacy clearing to migrate to new container cookiesToUpdate += await legacyDataClearing() ?? [] cookieStorage.updateCookies(cookiesToUpdate, keepingPreservedLogins: logins) + + // Attempt to clean up leftover stores again after a delay + // This should not be a problem as these containers are not supposed to be used anymore. + // If this fails, we are going to still clean them next time as WebKit keeps track of all stores for us. + if #available(iOS 17, *), !leftoverContainerIDs.isEmpty { + Task { + try? await Task.sleep(for: .seconds(3)) + for uuid in leftoverContainerIDs { + try? await WKWebsiteDataStore.remove(forIdentifier: uuid) + } + } + } } } @@ -113,18 +128,27 @@ extension WebCacheManager { } @available(iOS 17, *) - private func containerBasedClearing(storeIdManager: DataStoreIdManaging) async -> [HTTPCookie]? { + private func containerBasedClearing(storeIdManager: DataStoreIdManaging) async -> (cookies: [HTTPCookie], + leftoverContainerIDs: [UUID]) { guard let containerId = storeIdManager.currentId else { storeIdManager.invalidateCurrentIdAndAllocateNew() - return [] + return ([], []) } storeIdManager.invalidateCurrentIdAndAllocateNew() + var leftoverContainerIDs = [UUID]() + var dataStore: WKWebsiteDataStore? = WKWebsiteDataStore(forIdentifier: containerId) - let cookies = await dataStore?.httpCookieStore.allCookies() + let cookies = await dataStore?.httpCookieStore.allCookies() ?? [] dataStore = nil var uuids = await WKWebsiteDataStore.allDataStoreIdentifiers + + // There may be a timing issue related to fetching current container, so append previous UUID as a precaution + if uuids.firstIndex(of: containerId) == nil { + uuids.append(containerId) + } + if let newContainerID = storeIdManager.currentId, let newIdIndex = uuids.firstIndex(of: newContainerID) { assertionFailure("Attempted to cleanup current Data Store") @@ -133,11 +157,15 @@ extension WebCacheManager { let previousLeftOversCount = max(0, uuids.count - 1) // -1 because one store is expected to be cleared for uuid in uuids { - try? await WKWebsiteDataStore.remove(forIdentifier: uuid) + do { + try await WKWebsiteDataStore.remove(forIdentifier: uuid) + } catch { + leftoverContainerIDs.append(uuid) + } } await checkForLeftBehindDataStores(previousLeftOversCount: previousLeftOversCount) - return cookies + return (cookies, leftoverContainerIDs) } private func legacyDataClearing() async -> [HTTPCookie]? { From d82a8400b193fb5134b98eea33637e20a39f3309 Mon Sep 17 00:00:00 2001 From: Christopher Brind Date: Mon, 14 Oct 2024 15:37:05 +0100 Subject: [PATCH 3/3] Release 7.141.0-0 (#3435) Please make sure all GH checks passed before merging. It can take around 20 minutes. Briefly review this PR to see if there are no issues or red flags and then merge it. --- Configuration/Version.xcconfig | 2 +- .../AppPrivacyConfigurationDataProvider.swift | 4 +- Core/ios-config.json | 71 +++++++++++++++---- DuckDuckGo.xcodeproj/project.pbxproj | 56 +++++++-------- DuckDuckGo/Settings.bundle/Root.plist | 2 +- 5 files changed, 89 insertions(+), 46 deletions(-) diff --git a/Configuration/Version.xcconfig b/Configuration/Version.xcconfig index 52d296dc41..3b2b7dc2b3 100644 --- a/Configuration/Version.xcconfig +++ b/Configuration/Version.xcconfig @@ -1 +1 @@ -MARKETING_VERSION = 7.140.0 +MARKETING_VERSION = 7.141.0 diff --git a/Core/AppPrivacyConfigurationDataProvider.swift b/Core/AppPrivacyConfigurationDataProvider.swift index 268f012dee..e26b5f00c5 100644 --- a/Core/AppPrivacyConfigurationDataProvider.swift +++ b/Core/AppPrivacyConfigurationDataProvider.swift @@ -23,8 +23,8 @@ import BrowserServicesKit final public class AppPrivacyConfigurationDataProvider: EmbeddedDataProvider { public struct Constants { - public static let embeddedDataETag = "\"6330c36f7ff354d26f32ee951e0a972e\"" - public static let embeddedDataSHA = "40f77d6db1db544f06740b3290c5a72e5f03f706d17c9c0e05b13cd9255f2778" + public static let embeddedDataETag = "\"4ffe7d2b6c8e252d0289b1398cc2685d\"" + public static let embeddedDataSHA = "9795ade4fdbc474688250f2ecfa097e917feea21a54fd97c524b851245d170e8" } public var embeddedDataEtag: String { diff --git a/Core/ios-config.json b/Core/ios-config.json index f44fb74c45..161c16b811 100644 --- a/Core/ios-config.json +++ b/Core/ios-config.json @@ -1,6 +1,6 @@ { "readme": "https://github.com/duckduckgo/privacy-configuration", - "version": 1728095993160, + "version": 1728900024972, "features": { "adClickAttribution": { "readme": "https://help.duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/#3rd-party-tracker-loading-protection", @@ -370,10 +370,7 @@ ], "settings": { "disabledCMPs": [ - "generic-cosmetic", - "termsfeed3", - "healthline-media", - "ketch" + "healthline-media" ] }, "state": "enabled", @@ -396,7 +393,7 @@ } } }, - "hash": "cc06869d3abb10ef0570aa68829cc37b" + "hash": "ea2fef42c1666e9d9e4cabd49e57764d" }, "autofillBreakageReporter": { "state": "enabled", @@ -1462,7 +1459,8 @@ "state": "disabled" }, "enableDuckPlayer": { - "state": "internal" + "state": "enabled", + "minSupportedVersion": "7.139.0" } }, "settings": { @@ -1499,7 +1497,8 @@ ".ytd-video-preview", "#thumbnail-container", "#video-title-link", - "#video-title" + "#video-title", + "video.video-stream.html5-main-video" ] }, "thumbnailOverlays": { @@ -1549,8 +1548,8 @@ } ] }, - "state": "internal", - "hash": "887a8548cb01c9568e4d1b4d195af88b" + "state": "enabled", + "hash": "7f82d68f07b3e2aaac1b89725c1d379e" }, "elementHiding": { "exceptions": [ @@ -3444,6 +3443,15 @@ } ] }, + { + "domain": "livebeaches.com", + "rules": [ + { + "selector": "[class*='random-ad']", + "type": "hide-empty" + } + ] + }, { "domain": "livemint.com", "rules": [ @@ -4860,7 +4868,7 @@ ] }, "state": "enabled", - "hash": "ee31df28088021bca94518f6f8c63ce9" + "hash": "91a3dbe67daa37762247c415766a2634" }, "exceptionHandler": { "exceptions": [ @@ -5275,6 +5283,9 @@ { "domain": "jcrew.com" }, + { + "domain": "pgealerts.alerts.pge.com" + }, { "domain": "marvel.com" }, @@ -5303,7 +5314,7 @@ "privacy-test-pages.site" ] }, - "hash": "dfbfd6b6e23a093d562989baa78a2f25" + "hash": "fb031f27a1e1c2b143505c4f2e7b3ba7" }, "harmfulApis": { "settings": { @@ -7404,6 +7415,7 @@ "local12.com", "local21news.com", "midmichigannow.com", + "mlb.com", "my15wtcn.com", "my24milwaukee.com", "my48.tv", @@ -7997,7 +8009,7 @@ "nosto.com": { "rules": [ { - "rule": "connect.nosto.com/script/shopify/nosto.js", + "rule": "connect.nosto.com", "domains": [ "" ] @@ -8383,6 +8395,7 @@ "rule": "a.pub.network/core/prebid-universal-creative.js", "domains": [ "signupgenius.com", + "smithsonianmag.com", "titantv.com" ] }, @@ -8527,6 +8540,16 @@ } ] }, + "sascdn.com": { + "rules": [ + { + "rule": "sascdn.com/tag/", + "domains": [ + "filmweb.pl" + ] + } + ] + }, "scene7.com": { "rules": [ { @@ -8651,6 +8674,16 @@ } ] }, + "smartadserver.com": { + "rules": [ + { + "rule": "smartadserver.com/genericpost", + "domains": [ + "filmweb.pl" + ] + } + ] + }, "snapkit.com": { "rules": [ { @@ -9181,6 +9214,16 @@ } ] }, + "eltiempo.co": { + "rules": [ + { + "rule": "ads.eltiempo.co/genericpost", + "domains": [ + "filmweb.pl" + ] + } + ] + }, "yandex.tm": { "rules": [ { @@ -9210,7 +9253,7 @@ "domain": "instructure.com" } ], - "hash": "aacc956491f7760f65ab1c508b92b26d" + "hash": "0692c3f8cc6179433b9f23f00c7dd0ac" }, "trackingCookies1p": { "settings": { diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index c25fcbd87a..fec6e2b7fe 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -9162,7 +9162,7 @@ CODE_SIGN_ENTITLEMENTS = PacketTunnelProvider/PacketTunnelProvider.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEVELOPMENT_TEAM = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -9199,7 +9199,7 @@ CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -9289,7 +9289,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ShareExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -9316,7 +9316,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -9465,7 +9465,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGo.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_ASSET_PATHS = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -9490,7 +9490,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGo.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; INFOPLIST_FILE = DuckDuckGo/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -9559,7 +9559,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEAD_CODE_STRIPPING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = Widgets/Info.plist; @@ -9593,7 +9593,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEAD_CODE_STRIPPING = NO; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -9626,7 +9626,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = OpenAction/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -9656,7 +9656,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -9966,7 +9966,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGoAlpha.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_ASSET_PATHS = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -9997,7 +9997,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ShareExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -10025,7 +10025,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = OpenAction/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -10058,7 +10058,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEAD_CODE_STRIPPING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = Widgets/Info.plist; @@ -10088,7 +10088,7 @@ CODE_SIGN_ENTITLEMENTS = PacketTunnelProvider/PacketTunnelProviderAlpha.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEVELOPMENT_TEAM = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -10121,11 +10121,11 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; + DYLIB_CURRENT_VERSION = 0; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -10358,7 +10358,7 @@ CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGoAlpha.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_ASSET_PATHS = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -10385,7 +10385,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -10417,7 +10417,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -10454,7 +10454,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEAD_CODE_STRIPPING = NO; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; @@ -10489,7 +10489,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKE973VLUW; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -10524,11 +10524,11 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; + DYLIB_CURRENT_VERSION = 0; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -10701,11 +10701,11 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; + DYLIB_CURRENT_VERSION = 0; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -10734,10 +10734,10 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; + DYLIB_CURRENT_VERSION = 0; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = Core/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; diff --git a/DuckDuckGo/Settings.bundle/Root.plist b/DuckDuckGo/Settings.bundle/Root.plist index c1c16ddc4f..3d6a4bec95 100644 --- a/DuckDuckGo/Settings.bundle/Root.plist +++ b/DuckDuckGo/Settings.bundle/Root.plist @@ -6,7 +6,7 @@ DefaultValue - 7.140.0 + 7.141.0 Key version Title