From c7eed7ed0551fd3a9153e4c50ec4fdeefbf374a8 Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Fri, 20 Sep 2024 12:44:24 +0200 Subject: [PATCH 01/90] Update supported Xcode version to 16.0 --- .xcode-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.xcode-version b/.xcode-version index 232a7fc1a6..0d68f8a0eb 100644 --- a/.xcode-version +++ b/.xcode-version @@ -1 +1 @@ -15.4 +16.0 From 5924439736ab493878c273dee380ef780dc31e8d Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Sat, 21 Sep 2024 12:59:55 +0200 Subject: [PATCH 02/90] Update BSK --- DuckDuckGo.xcodeproj/project.pbxproj | 4 ++-- .../xcshareddata/swiftpm/Package.resolved | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 6213f5ca4c..f318de1c0a 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -14305,8 +14305,8 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; requirement = { - kind = exactVersion; - version = 199.0.0; + branch = "dominik/xcode-16"; + kind = branch; }; }; 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 82d9c4dbfc..dbf3383ab4 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" : "ec46d991838527dd8c7041a3673428c0e18e0fdc", - "version" : "199.0.0" + "branch" : "dominik/xcode-16", + "revision" : "927b50cbad1e296d3e57e876bf687aa8b8988e76" } }, { @@ -59,8 +59,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/GRDB.swift.git", "state" : { - "revision" : "4225b85c9a0c50544e413a1ea1e502c802b44b35", - "version" : "2.4.0" + "revision" : "5b2f6a81099d26ae0f9e38788f51490cd6a4b202", + "version" : "2.4.2" } }, { From c77ca9cdad74751ab8a605b2219695048caaa4e3 Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Sat, 21 Sep 2024 13:10:06 +0200 Subject: [PATCH 03/90] Fix DataBrokerProtectionOperationQueue protocol --- .../Scheduler/DataBrokerProtectionQueueManager.swift | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/LocalPackages/DataBrokerProtection/Sources/DataBrokerProtection/Scheduler/DataBrokerProtectionQueueManager.swift b/LocalPackages/DataBrokerProtection/Sources/DataBrokerProtection/Scheduler/DataBrokerProtectionQueueManager.swift index 8ed9e8dd3f..750b776041 100644 --- a/LocalPackages/DataBrokerProtection/Sources/DataBrokerProtection/Scheduler/DataBrokerProtectionQueueManager.swift +++ b/LocalPackages/DataBrokerProtection/Sources/DataBrokerProtection/Scheduler/DataBrokerProtectionQueueManager.swift @@ -24,10 +24,14 @@ protocol DataBrokerProtectionOperationQueue { var maxConcurrentOperationCount: Int { get set } func cancelAllOperations() func addOperation(_ op: Operation) - func addBarrierBlock(_ barrier: @escaping @Sendable () -> Void) + func addBarrierBlock1(_ barrier: @escaping @Sendable () -> Void) } -extension OperationQueue: DataBrokerProtectionOperationQueue {} +extension OperationQueue: DataBrokerProtectionOperationQueue { + func addBarrierBlock1(_ barrier: @escaping () -> Void) { + addBarrierBlock(barrier) + } +} enum DataBrokerProtectionQueueMode { case idle @@ -251,7 +255,7 @@ private extension DefaultDataBrokerProtectionQueueManager { return } - operationQueue.addBarrierBlock { [weak self] in + operationQueue.addBarrierBlock1 { [weak self] in let errorCollection = DataBrokerProtectionAgentErrorCollection(oneTimeError: nil, operationErrors: self?.operationErrorsForCurrentOperations()) errorHandler?(errorCollection) self?.resetMode(clearErrors: true) From 42ad38b28a57507c9b21467c88a9cbd45027343b Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Sat, 21 Sep 2024 13:19:06 +0200 Subject: [PATCH 04/90] Update MockDataBrokerProtectionOperationQueue --- .../Tests/DataBrokerProtectionTests/Mocks.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LocalPackages/DataBrokerProtection/Tests/DataBrokerProtectionTests/Mocks.swift b/LocalPackages/DataBrokerProtection/Tests/DataBrokerProtectionTests/Mocks.swift index d0a0bcf970..63e76c87ff 100644 --- a/LocalPackages/DataBrokerProtection/Tests/DataBrokerProtectionTests/Mocks.swift +++ b/LocalPackages/DataBrokerProtection/Tests/DataBrokerProtectionTests/Mocks.swift @@ -1388,7 +1388,7 @@ final class MockDataBrokerProtectionOperationQueue: DataBrokerProtectionOperatio self.operations.append(op) } - func addBarrierBlock(_ barrier: @escaping @Sendable () -> Void) { + func addBarrierBlock1(_ barrier: @escaping @Sendable () -> Void) { didCallAddBarrierBlockCount += 1 self.barrierBlock = barrier } From fa0279319b85292511120e7f7bfb75238ef71f7e Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Sat, 21 Sep 2024 22:36:02 +0200 Subject: [PATCH 05/90] Fix failing ErrorPageTests --- IntegrationTests/Tab/ErrorPageTests.swift | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/IntegrationTests/Tab/ErrorPageTests.swift b/IntegrationTests/Tab/ErrorPageTests.swift index 216a9960fc..4f9b5b6657 100644 --- a/IntegrationTests/Tab/ErrorPageTests.swift +++ b/IntegrationTests/Tab/ErrorPageTests.swift @@ -622,9 +622,12 @@ class ErrorPageTests: XCTestCase { eServerQueried.fulfill() return .failure(NSError.connectionLost) }] - let eNavigationFailed2 = tab.$error.compactMap { $0 }.timeout(5).first().promise() + /// Set content before subscribing to `tab.$error.compactMap { $0 }` to allow + /// for error to be nullified first by the call to `setContent`. tab.setContent(.url(.test, source: .userEntered(URL.test.absoluteString))) + let eNavigationFailed2 = tab.$error.compactMap { $0 }.timeout(5).first().promise() + _=try await eNavigationFailed2.value await fulfillment(of: [eServerQueried]) @@ -698,9 +701,12 @@ class ErrorPageTests: XCTestCase { eServerQueried.fulfill() return .failure(NSError.connectionLost) }] - let eNavigationFailed2 = tab.$error.compactMap { $0 }.timeout(5).first().promise() + /// Set content before subscribing to `tab.$error.compactMap { $0 }` to allow + /// for error to be nullified first by the call to `setContent`. tab.setContent(.url(.alternative, source: .userEntered(URL.alternative.absoluteString))) + let eNavigationFailed2 = tab.$error.compactMap { $0 }.timeout(5).first().promise() + _=try await eNavigationFailed2.value await fulfillment(of: [eServerQueried]) From 92c85be78ac55bb16f667417eb9ed0fd37f08169 Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Wed, 25 Sep 2024 21:39:02 +0200 Subject: [PATCH 06/90] Update to macos-15 runners --- .github/workflows/build_notarized.yml | 4 ++-- .github/workflows/bump_internal_release.yml | 4 ++-- .github/workflows/code_freeze.yml | 4 ++-- .github/workflows/create_variant.yml | 2 +- .github/workflows/hotfix.yml | 2 +- .github/workflows/publish_dmg_release.yml | 2 +- .github/workflows/sync_end_to_end.yml | 4 +++- .github/workflows/tag_release.yml | 2 +- .github/workflows/ui_tests.yml | 4 +++- 9 files changed, 16 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build_notarized.yml b/.github/workflows/build_notarized.yml index c0dc2e22c7..93201b279a 100644 --- a/.github/workflows/build_notarized.yml +++ b/.github/workflows/build_notarized.yml @@ -71,7 +71,7 @@ jobs: name: Export Notarized App - runs-on: macos-14-xlarge + runs-on: macos-15-xlarge outputs: app-version: ${{ steps.set-outputs.outputs.app-version }} @@ -230,7 +230,7 @@ jobs: needs: export-notarized-app if: ${{ github.event.inputs.create-dmg == true || inputs.create-dmg == true }} - runs-on: macos-14 + runs-on: macos-15 env: app-version: ${{ needs.export-notarized-app.outputs.app-version }} diff --git a/.github/workflows/bump_internal_release.yml b/.github/workflows/bump_internal_release.yml index 670cb3323b..e95e6f556c 100644 --- a/.github/workflows/bump_internal_release.yml +++ b/.github/workflows/bump_internal_release.yml @@ -26,7 +26,7 @@ jobs: # This doesn't need Xcode, so could technically run on Ubuntu, but find_asana_release_task.sh # uses BSD-specific `date` syntax, that doesn't work with GNU `date` (available on Linux). - runs-on: macos-14 + runs-on: macos-15 timeout-minutes: 10 outputs: @@ -151,7 +151,7 @@ jobs: name: Increment Build Number needs: [ validate_input_conditions, run_tests ] - runs-on: macos-14-xlarge + runs-on: macos-15-xlarge timeout-minutes: 10 steps: diff --git a/.github/workflows/code_freeze.yml b/.github/workflows/code_freeze.yml index 451b3daa11..9cdf49502f 100644 --- a/.github/workflows/code_freeze.yml +++ b/.github/workflows/code_freeze.yml @@ -9,7 +9,7 @@ jobs: name: Create Release Branch - runs-on: macos-14-xlarge + runs-on: macos-15-xlarge timeout-minutes: 10 outputs: @@ -111,7 +111,7 @@ jobs: name: Increment Build Number needs: [ create_release_branch, run_tests ] - runs-on: macos-14-xlarge + runs-on: macos-15-xlarge timeout-minutes: 10 steps: diff --git a/.github/workflows/create_variant.yml b/.github/workflows/create_variant.yml index 24def9102a..671d7e57de 100644 --- a/.github/workflows/create_variant.yml +++ b/.github/workflows/create_variant.yml @@ -45,7 +45,7 @@ jobs: ATB_VARIANT_NAME: ${{ inputs.atb-variant || github.event.inputs.atb-variant }} ORIGIN_VARIANT_NAME: ${{ inputs.origin-variant || github.event.inputs.origin-variant }} - runs-on: macos-14 + runs-on: macos-15 timeout-minutes: 15 steps: diff --git a/.github/workflows/hotfix.yml b/.github/workflows/hotfix.yml index b17d183a68..0ccac03008 100644 --- a/.github/workflows/hotfix.yml +++ b/.github/workflows/hotfix.yml @@ -9,7 +9,7 @@ jobs: name: Create Release Branch - runs-on: macos-14-xlarge + runs-on: macos-15-xlarge timeout-minutes: 10 outputs: diff --git a/.github/workflows/publish_dmg_release.yml b/.github/workflows/publish_dmg_release.yml index 8c003b27f1..988a717b27 100644 --- a/.github/workflows/publish_dmg_release.yml +++ b/.github/workflows/publish_dmg_release.yml @@ -76,7 +76,7 @@ jobs: # or failed (for public releases or hotfixes), because tagging doesn't block publishing the release if: always() - runs-on: macos-14-xlarge + runs-on: macos-15-xlarge timeout-minutes: 10 steps: diff --git a/.github/workflows/sync_end_to_end.yml b/.github/workflows/sync_end_to_end.yml index 91308789b7..d55dc24c8c 100644 --- a/.github/workflows/sync_end_to_end.yml +++ b/.github/workflows/sync_end_to_end.yml @@ -34,12 +34,14 @@ jobs: strategy: fail-fast: false matrix: - runner: [macos-13-xlarge, macos-14-xlarge] + runner: [macos-13-xlarge, macos-14-xlarge, macos-15-xlarge] include: - xcode-version: "15.2" runner: macos-13-xlarge - xcode-version: "15.4" runner: macos-14-xlarge + - xcode-version: "16.0" + runner: macos-15-xlarge timeout-minutes: 60 diff --git a/.github/workflows/tag_release.yml b/.github/workflows/tag_release.yml index 591ef2e57e..bbd9a46f89 100644 --- a/.github/workflows/tag_release.yml +++ b/.github/workflows/tag_release.yml @@ -55,7 +55,7 @@ jobs: # This doesn't need Xcode, so could technically run on Ubuntu, but actions that add comments and tasks # in Asana use BSD-specific sed syntax, that doesn't work with GNU sed (available on Linux). - runs-on: macos-14 + runs-on: macos-15 env: asana-task-url: ${{ github.event.inputs.asana-task-url || inputs.asana-task-url }} diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 611b105a5a..1de4d8bd77 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -38,12 +38,14 @@ jobs: strategy: fail-fast: false matrix: - runner: [macos-13-xlarge, macos-14-xlarge] + runner: [macos-13-xlarge, macos-14-xlarge, macos-15-xlarge] include: - xcode-version: "15.2" runner: macos-13-xlarge - xcode-version: "15.4" runner: macos-14-xlarge + - xcode-version: "16.0" + runner: macos-15-xlarge concurrency: group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.runner }} From 82b536ff83666ded28c0c78e5c6f58d4b1938864 Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Wed, 25 Sep 2024 21:40:46 +0200 Subject: [PATCH 07/90] Update BSK ref --- .../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 dbf3383ab4..f85f9a6999 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -33,7 +33,7 @@ "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { "branch" : "dominik/xcode-16", - "revision" : "927b50cbad1e296d3e57e876bf687aa8b8988e76" + "revision" : "d93ca97bec5cbfd00bf60e8b9e96737c71a4ab50" } }, { From 0d8764521f3338b04a136333fcb56d89437985b2 Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Thu, 26 Sep 2024 08:10:53 +0200 Subject: [PATCH 08/90] Don't build SPM dependencies for UI tests --- .github/workflows/sync_end_to_end.yml | 9 +++++++++ .github/workflows/ui_tests.yml | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/.github/workflows/sync_end_to_end.yml b/.github/workflows/sync_end_to_end.yml index d55dc24c8c..f78917cebb 100644 --- a/.github/workflows/sync_end_to_end.yml +++ b/.github/workflows/sync_end_to_end.yml @@ -102,6 +102,15 @@ jobs: with: debug: true + # This first bit is a hack to stop the app building package dependencies that isn't needed by the test runner + # Otherwise xcodebuild will attempt building BSK and linking GRDB framework that is incompatible with Xcode 15 + - name: Build test runner + run: | + rm -rf LocalPackages + rm -rf /Users/runner/work/macos-browser/macos-browser/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved + sed -i '' '/\/\* Begin XCSwiftPackageProductDependency section \*\//,/\/\* End XCSwiftPackageProductDependency section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj + sed -i '' '/\/\* Begin XCRemoteSwiftPackageReference section \*\//,/\/\* End XCRemoteSwiftPackageReference section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj + - name: Build Sync e2e tests run: | set -o pipefail && xcodebuild build-for-testing \ diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 1de4d8bd77..3d08c59987 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -104,6 +104,15 @@ jobs: echo "${{ matrix.xcode-version }}" > .xcode-version sudo xcode-select -s /Applications/Xcode_$(<.xcode-version).app/Contents/Developer + # This first bit is a hack to stop the app building package dependencies that isn't needed by the test runner + # Otherwise xcodebuild will attempt building BSK and linking GRDB framework that is incompatible with Xcode 15 + - name: Build test runner + run: | + rm -rf LocalPackages + rm -rf /Users/runner/work/macos-browser/macos-browser/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved + sed -i '' '/\/\* Begin XCSwiftPackageProductDependency section \*\//,/\/\* End XCSwiftPackageProductDependency section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj + sed -i '' '/\/\* Begin XCRemoteSwiftPackageReference section \*\//,/\/\* End XCRemoteSwiftPackageReference section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj + - name: Build for testing run: | set -o pipefail && xcodebuild build-for-testing \ From a5c86aca85b442dbd8e7e5015e01ea9aaba59cda Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Thu, 26 Sep 2024 08:28:09 +0200 Subject: [PATCH 09/90] Disable buildImplicitDependencies --- .../xcshareddata/xcschemes/UI Tests CI.xcscheme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/UI Tests CI.xcscheme b/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/UI Tests CI.xcscheme index 7d60143214..086fe2be55 100644 --- a/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/UI Tests CI.xcscheme +++ b/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/UI Tests CI.xcscheme @@ -4,7 +4,7 @@ version = "1.7"> + buildImplicitDependencies = "NO"> Date: Thu, 26 Sep 2024 13:39:51 +0200 Subject: [PATCH 10/90] Update ui tests workflows --- .github/workflows/sync_end_to_end.yml | 2 +- .github/workflows/ui_tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sync_end_to_end.yml b/.github/workflows/sync_end_to_end.yml index f78917cebb..695006471a 100644 --- a/.github/workflows/sync_end_to_end.yml +++ b/.github/workflows/sync_end_to_end.yml @@ -107,7 +107,7 @@ jobs: - name: Build test runner run: | rm -rf LocalPackages - rm -rf /Users/runner/work/macos-browser/macos-browser/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved + rm -rf DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved sed -i '' '/\/\* Begin XCSwiftPackageProductDependency section \*\//,/\/\* End XCSwiftPackageProductDependency section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj sed -i '' '/\/\* Begin XCRemoteSwiftPackageReference section \*\//,/\/\* End XCRemoteSwiftPackageReference section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 3d08c59987..1eda0ab110 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -109,7 +109,7 @@ jobs: - name: Build test runner run: | rm -rf LocalPackages - rm -rf /Users/runner/work/macos-browser/macos-browser/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved + rm -rf DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved sed -i '' '/\/\* Begin XCSwiftPackageProductDependency section \*\//,/\/\* End XCSwiftPackageProductDependency section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj sed -i '' '/\/\* Begin XCRemoteSwiftPackageReference section \*\//,/\/\* End XCRemoteSwiftPackageReference section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj From 3e205b64ec7a630dc1856dc81f7760e6464a206a Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Thu, 26 Sep 2024 13:59:33 +0200 Subject: [PATCH 11/90] Make TestsURLExtension.swift independent of BSK --- .../Common/TestsURLExtension.swift | 81 ++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) diff --git a/IntegrationTests/Common/TestsURLExtension.swift b/IntegrationTests/Common/TestsURLExtension.swift index b1bd1f7a8f..14976e7112 100644 --- a/IntegrationTests/Common/TestsURLExtension.swift +++ b/IntegrationTests/Common/TestsURLExtension.swift @@ -17,7 +17,6 @@ // import Foundation -import Common // Integration Tests helpers extension URL { @@ -62,4 +61,84 @@ extension URL { return url } + private func appendingParameters(_ parameters: QueryParams, allowedReservedCharacters: CharacterSet? = nil) -> URL + where QueryParams.Element == (key: String, value: String) { + + return parameters.reduce(self) { partialResult, parameter in + partialResult.appendingParameter( + name: parameter.key, + value: parameter.value, + allowedReservedCharacters: allowedReservedCharacters + ) + } + } + + private func appendingParameter(name: String, value: String, allowedReservedCharacters: CharacterSet? = nil) -> URL { + let queryItem = URLQueryItem(percentEncodingName: name, + value: value, + withAllowedCharacters: allowedReservedCharacters) + return self.appending(percentEncodedQueryItem: queryItem) + } + + private func appending(percentEncodedQueryItem: URLQueryItem) -> URL { + appending(percentEncodedQueryItems: [percentEncodedQueryItem]) + } + + private func appending(percentEncodedQueryItems: [URLQueryItem]) -> URL { + guard var components = URLComponents(url: self, resolvingAgainstBaseURL: true) else { return self } + + var existingPercentEncodedQueryItems = components.percentEncodedQueryItems ?? [URLQueryItem]() + existingPercentEncodedQueryItems.append(contentsOf: percentEncodedQueryItems) + components.percentEncodedQueryItems = existingPercentEncodedQueryItems + + return components.url ?? self + } +} + +fileprivate extension URLQueryItem { + + init(percentEncodingName name: String, value: String, withAllowedCharacters allowedReservedCharacters: CharacterSet? = nil) { + let allowedCharacters: CharacterSet = { + if let allowedReservedCharacters = allowedReservedCharacters { + return .urlQueryParameterAllowed.union(allowedReservedCharacters) + } + return .urlQueryParameterAllowed + }() + + let percentEncodedName = name.percentEncoded(withAllowedCharacters: allowedCharacters) + let percentEncodedValue = value.percentEncoded(withAllowedCharacters: allowedCharacters) + + self.init(name: percentEncodedName, value: percentEncodedValue) + } + +} + +extension StringProtocol { + + fileprivate func percentEncoded(withAllowedCharacters allowedCharacters: CharacterSet) -> String { + if let percentEncoded = self.addingPercentEncoding(withAllowedCharacters: allowedCharacters) { + return percentEncoded + } + assertionFailure("Unexpected failure") + return components(separatedBy: allowedCharacters.inverted).joined() + } + + var utf8data: Data { + data(using: .utf8)! + } +} + +public extension CharacterSet { + + /** + * As per [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986#section-2.2). + * + * This set contains all reserved characters that are otherwise + * included in `CharacterSet.urlQueryAllowed` but still need to be percent-escaped. + */ + static let urlQueryReserved = CharacterSet(charactersIn: ":/?#[]@!$&'()*+,;=") + + static let urlQueryParameterAllowed = CharacterSet.urlQueryAllowed.subtracting(Self.urlQueryReserved) + static let urlQueryStringAllowed = CharacterSet(charactersIn: "%+?").union(.urlQueryParameterAllowed) + } From bf9875e3811fd7512c746bb1380dc00c8248370f Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Thu, 26 Sep 2024 13:59:56 +0200 Subject: [PATCH 12/90] Make BookmarksBarTests.swift independent of BSK --- UITests/BookmarksBarTests.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/UITests/BookmarksBarTests.swift b/UITests/BookmarksBarTests.swift index 2d233cdfbd..db7ead8cd2 100644 --- a/UITests/BookmarksBarTests.swift +++ b/UITests/BookmarksBarTests.swift @@ -16,7 +16,6 @@ // limitations under the License. // -import Common import XCTest class BookmarksBarTests: XCTestCase { From e919ef28b36052925b387b6d025b9c8959c6ed4d Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Thu, 26 Sep 2024 14:01:05 +0200 Subject: [PATCH 13/90] Remove StringExtension from UI Tests target --- DuckDuckGo.xcodeproj/project.pbxproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index f318de1c0a..0e16c80969 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -2831,7 +2831,6 @@ EE02D41A2BB4609900DBE6B3 /* UITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D4192BB4609900DBE6B3 /* UITests.swift */; }; EE02D41C2BB460A600DBE6B3 /* BrowsingHistoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D41B2BB460A600DBE6B3 /* BrowsingHistoryTests.swift */; }; EE02D4202BB460C000DBE6B3 /* BrowserServicesKit in Frameworks */ = {isa = PBXBuildFile; productRef = EE02D41F2BB460C000DBE6B3 /* BrowserServicesKit */; }; - EE02D4212BB460FE00DBE6B3 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA8EDF2624923EC70071C2E8 /* StringExtension.swift */; }; EE02D4222BB4611A00DBE6B3 /* TestsURLExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6EC37FB29B83E99001ACE79 /* TestsURLExtension.swift */; }; EE0429E02BA31D2F009EB20F /* FindInPageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE0429DF2BA31D2F009EB20F /* FindInPageTests.swift */; }; EE098E772C8EDE2C009EBA7F /* AutofillCredentialsImportManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE098E762C8EDE2C009EBA7F /* AutofillCredentialsImportManager.swift */; }; @@ -12013,7 +12012,6 @@ EE02D41A2BB4609900DBE6B3 /* UITests.swift in Sources */, EE0429E02BA31D2F009EB20F /* FindInPageTests.swift in Sources */, BBCD467A2C8643EC004DB483 /* XCUIApplicationExtension.swift in Sources */, - EE02D4212BB460FE00DBE6B3 /* StringExtension.swift in Sources */, BBBB65402C77BB9400E69AC6 /* BookmarkSearchTests.swift in Sources */, 56A054532C2592CE007D8FAB /* OnboardingUITests.swift in Sources */, EE9D81C32BC57A3700338BE3 /* StateRestorationTests.swift in Sources */, From f2c362765892f57a62d0cdac858471ac051eaf69 Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Thu, 26 Sep 2024 14:01:54 +0200 Subject: [PATCH 14/90] Make UI Tests independent of BSK --- DuckDuckGo.xcodeproj/project.pbxproj | 2 -- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 0e16c80969..86a0a80f21 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -2830,7 +2830,6 @@ EA8AE76A279FBDB20078943E /* ClickToLoadTDSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA8AE769279FBDB20078943E /* ClickToLoadTDSTests.swift */; }; EE02D41A2BB4609900DBE6B3 /* UITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D4192BB4609900DBE6B3 /* UITests.swift */; }; EE02D41C2BB460A600DBE6B3 /* BrowsingHistoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D41B2BB460A600DBE6B3 /* BrowsingHistoryTests.swift */; }; - EE02D4202BB460C000DBE6B3 /* BrowserServicesKit in Frameworks */ = {isa = PBXBuildFile; productRef = EE02D41F2BB460C000DBE6B3 /* BrowserServicesKit */; }; EE02D4222BB4611A00DBE6B3 /* TestsURLExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6EC37FB29B83E99001ACE79 /* TestsURLExtension.swift */; }; EE0429E02BA31D2F009EB20F /* FindInPageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE0429DF2BA31D2F009EB20F /* FindInPageTests.swift */; }; EE098E772C8EDE2C009EBA7F /* AutofillCredentialsImportManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE098E762C8EDE2C009EBA7F /* AutofillCredentialsImportManager.swift */; }; @@ -4848,7 +4847,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EE02D4202BB460C000DBE6B3 /* BrowserServicesKit in Frameworks */, 9D9DE57F2C63B64F00D20B15 /* AppKitExtensions in Frameworks */, B64E42872B908501006C1346 /* SnapshotTesting in Frameworks */, ); diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index f85f9a6999..84f2822c5e 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,4 +1,5 @@ { + "originHash" : "733e03047e060ab329e517055580052eeeb8980809fdf47ad605310b5d41b279", "pins" : [ { "identity" : "apple-toolbox", @@ -190,5 +191,5 @@ } } ], - "version" : 2 + "version" : 3 } From 1552f807d6e671af2b8966b398daa8e2e103dfe3 Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Thu, 26 Sep 2024 14:05:41 +0200 Subject: [PATCH 15/90] Temporarily add dependencies.patch --- .github/workflows/sync_end_to_end.yml | 5 +- .github/workflows/ui_tests.yml | 5 +- dependencies.patch | 966 ++++++++++++++++++++++++++ 3 files changed, 972 insertions(+), 4 deletions(-) create mode 100644 dependencies.patch diff --git a/.github/workflows/sync_end_to_end.yml b/.github/workflows/sync_end_to_end.yml index 695006471a..60ead0e6e2 100644 --- a/.github/workflows/sync_end_to_end.yml +++ b/.github/workflows/sync_end_to_end.yml @@ -108,8 +108,9 @@ jobs: run: | rm -rf LocalPackages rm -rf DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved - sed -i '' '/\/\* Begin XCSwiftPackageProductDependency section \*\//,/\/\* End XCSwiftPackageProductDependency section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj - sed -i '' '/\/\* Begin XCRemoteSwiftPackageReference section \*\//,/\/\* End XCRemoteSwiftPackageReference section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj + git apply dependencies.patch + # sed -i '' '/\/\* Begin XCSwiftPackageProductDependency section \*\//,/\/\* End XCSwiftPackageProductDependency section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj + # sed -i '' '/\/\* Begin XCRemoteSwiftPackageReference section \*\//,/\/\* End XCRemoteSwiftPackageReference section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj - name: Build Sync e2e tests run: | diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 1eda0ab110..c9b47cb0b7 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -110,8 +110,9 @@ jobs: run: | rm -rf LocalPackages rm -rf DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved - sed -i '' '/\/\* Begin XCSwiftPackageProductDependency section \*\//,/\/\* End XCSwiftPackageProductDependency section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj - sed -i '' '/\/\* Begin XCRemoteSwiftPackageReference section \*\//,/\/\* End XCRemoteSwiftPackageReference section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj + git apply dependencies.patch + # sed -i '' '/\/\* Begin XCSwiftPackageProductDependency section \*\//,/\/\* End XCSwiftPackageProductDependency section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj + # sed -i '' '/\/\* Begin XCRemoteSwiftPackageReference section \*\//,/\/\* End XCRemoteSwiftPackageReference section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj - name: Build for testing run: | diff --git a/dependencies.patch b/dependencies.patch new file mode 100644 index 0000000000..07b2c3e28f --- /dev/null +++ b/dependencies.patch @@ -0,0 +1,966 @@ +diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj +index 723abdcc5..300c66c31 100644 +--- a/DuckDuckGo.xcodeproj/project.pbxproj ++++ b/DuckDuckGo.xcodeproj/project.pbxproj +@@ -14265,94 +14265,6 @@ + /* End XCConfigurationList section */ + + /* Begin XCRemoteSwiftPackageReference section */ +- 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { +- isa = XCRemoteSwiftPackageReference; +- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; +- requirement = { +- kind = revision; +- revision = 4f3695b5b598593ce3c44fe810637e3406206c19; +- }; +- }; +- 3706FDD7293F661700E42796 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */ = { +- isa = XCRemoteSwiftPackageReference; +- repositoryURL = "https://github.com/AliSoftware/OHHTTPStubs.git"; +- requirement = { +- kind = exactVersion; +- version = 9.1.0; +- }; +- }; +- 371D00DF29D8509400EC8598 /* XCRemoteSwiftPackageReference "OpenSSL-XCFramework" */ = { +- isa = XCRemoteSwiftPackageReference; +- repositoryURL = "https://github.com/duckduckgo/OpenSSL-XCFramework"; +- requirement = { +- kind = exactVersion; +- version = 3.1.5004; +- }; +- }; +- 3FFD51CF7C19ACBDB9687474 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { +- isa = XCRemoteSwiftPackageReference; +- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; +- requirement = { +- kind = revision; +- revision = a968dd3d8d5ff95b6eae65889c1a365174a53a69; +- }; +- }; +- 4311906792B7676CE9535D76 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { +- isa = XCRemoteSwiftPackageReference; +- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; +- requirement = { +- kind = revision; +- revision = c06709ba8a586f6a40190bacaaaaa96b2d55e540; +- }; +- }; +- 4B5235432C7BB14D00AFAF64 /* XCRemoteSwiftPackageReference "wireguard-apple" */ = { +- isa = XCRemoteSwiftPackageReference; +- repositoryURL = "https://github.com/duckduckgo/wireguard-apple"; +- requirement = { +- kind = exactVersion; +- version = 1.1.3; +- }; +- }; +- 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { +- isa = XCRemoteSwiftPackageReference; +- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; +- requirement = { +- branch = "dominik/xcode-16"; +- kind = branch; +- }; +- }; +- 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */ = { +- isa = XCRemoteSwiftPackageReference; +- repositoryURL = "https://github.com/airbnb/lottie-spm.git"; +- requirement = { +- kind = exactVersion; +- version = 4.4.3; +- }; +- }; +- AA06B6B52672AF8100F541C5 /* XCRemoteSwiftPackageReference "Sparkle" */ = { +- isa = XCRemoteSwiftPackageReference; +- repositoryURL = "https://github.com/sparkle-project/Sparkle.git"; +- requirement = { +- kind = exactVersion; +- version = 2.6.3; +- }; +- }; +- B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */ = { +- isa = XCRemoteSwiftPackageReference; +- repositoryURL = "https://github.com/pointfreeco/swift-snapshot-testing"; +- requirement = { +- kind = exactVersion; +- version = 1.15.4; +- }; +- }; +- B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */ = { +- isa = XCRemoteSwiftPackageReference; +- repositoryURL = "https://github.com/AliSoftware/OHHTTPStubs.git"; +- requirement = { +- kind = exactVersion; +- version = 9.1.0; +- }; +- }; + B6EC37F529B5DAAC001ACE79 /* XCRemoteSwiftPackageReference "swifter" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/httpswift/swifter.git"; +@@ -14361,866 +14273,14 @@ + version = 1.5.0; + }; + }; +- B6F997B92B8F352500476735 /* XCRemoteSwiftPackageReference "apple-toolbox" */ = { +- isa = XCRemoteSwiftPackageReference; +- repositoryURL = "https://github.com/duckduckgo/apple-toolbox.git"; +- requirement = { +- kind = exactVersion; +- version = 3.1.2; +- }; +- }; +- F1D43AF12B98E47800BAB743 /* XCRemoteSwiftPackageReference "BareBonesBrowser" */ = { +- isa = XCRemoteSwiftPackageReference; +- repositoryURL = "https://github.com/duckduckgo/BareBonesBrowser.git"; +- requirement = { +- kind = exactVersion; +- version = 0.1.0; +- }; +- }; +- FAE06B199CA1F209B55B34E9 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { +- isa = XCRemoteSwiftPackageReference; +- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; +- requirement = { +- kind = revision; +- revision = a968dd3d8d5ff95b6eae65889c1a365174a53a69; +- }; +- }; + /* End XCRemoteSwiftPackageReference section */ + + /* Begin XCSwiftPackageProductDependency section */ +- 020807B12C6CFF95006F94C4 /* Configuration */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Configuration; +- }; +- 02589D9C2C88E8210093940D /* Configuration */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Configuration; +- }; +- 02589D9E2C88E8270093940D /* Persistence */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Persistence; +- }; +- 02589DA02C88EB570093940D /* Configuration */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Configuration; +- }; +- 02589DA22C88EB5D0093940D /* Persistence */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Persistence; +- }; +- 02589DA42C88ED190093940D /* BrowserServicesKit */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = BrowserServicesKit; +- }; +- 02589DA62C88F8E90093940D /* PixelKit */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = PixelKit; +- }; +- 02589DA82C89F0420093940D /* Configuration */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Configuration; +- }; +- 02589DAA2C89F0490093940D /* Persistence */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Persistence; +- }; +- 02A15D8B2C88D763001A4237 /* Configuration */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Configuration; +- }; +- 02A15D8D2C88D76A001A4237 /* Persistence */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Persistence; +- }; +- 02A15D8F2C88D773001A4237 /* Persistence */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Persistence; +- }; +- 02A15D912C88D789001A4237 /* Configuration */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Configuration; +- }; +- 02A15D932C88D78F001A4237 /* Persistence */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Persistence; +- }; +- 02A15D952C88D797001A4237 /* Configuration */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Configuration; +- }; +- 02A15D972C88D79D001A4237 /* Persistence */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Persistence; +- }; +- 08D4923DC968236E22E373E2 /* Crashes */ = { +- isa = XCSwiftPackageProductDependency; +- package = FAE06B199CA1F209B55B34E9 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Crashes; +- }; +- 1E950E3E2912A10D0051A99B /* ContentBlocking */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = ContentBlocking; +- }; +- 1E950E402912A10D0051A99B /* PrivacyDashboard */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = PrivacyDashboard; +- }; +- 1E950E422912A10D0051A99B /* UserScript */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = UserScript; +- }; +- 1EA7B8D22B7E078C000330A4 /* SubscriptionUI */ = { +- isa = XCSwiftPackageProductDependency; +- productName = SubscriptionUI; +- }; +- 1EA7B8D42B7E078C000330A4 /* Subscription */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Subscription; +- }; +- 1EB028322C91C754005343F6 /* Common */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Common; +- }; +- 1EB028342C91C75A005343F6 /* Common */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Common; +- }; +- 312978892B64131200B67619 /* DataBrokerProtection */ = { +- isa = XCSwiftPackageProductDependency; +- productName = DataBrokerProtection; +- }; +- 315A023E2B6421AE00BFA577 /* Networking */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Networking; +- }; +- 31A3A4E22B0C115F0021063C /* DataBrokerProtection */ = { +- isa = XCSwiftPackageProductDependency; +- productName = DataBrokerProtection; +- }; +- 3706FA71293F65D500E42796 /* BrowserServicesKit */ = { +- isa = XCSwiftPackageProductDependency; +- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = BrowserServicesKit; +- }; +- 3706FA76293F65D500E42796 /* ContentBlocking */ = { +- isa = XCSwiftPackageProductDependency; +- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = ContentBlocking; +- }; +- 3706FA77293F65D500E42796 /* PrivacyDashboard */ = { +- isa = XCSwiftPackageProductDependency; +- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = PrivacyDashboard; +- }; +- 3706FA78293F65D500E42796 /* UserScript */ = { +- isa = XCSwiftPackageProductDependency; +- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = UserScript; +- }; +- 3706FDD6293F661700E42796 /* OHHTTPStubs */ = { +- isa = XCSwiftPackageProductDependency; +- package = 3706FDD7293F661700E42796 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; +- productName = OHHTTPStubs; +- }; +- 3706FDD8293F661700E42796 /* OHHTTPStubsSwift */ = { +- isa = XCSwiftPackageProductDependency; +- package = 3706FDD7293F661700E42796 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; +- productName = OHHTTPStubsSwift; +- }; +- 371209222C232E66003ADF3D /* RemoteMessaging */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = RemoteMessaging; +- }; +- 371209242C232E6C003ADF3D /* RemoteMessaging */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = RemoteMessaging; +- }; +- 371D00E029D8509400EC8598 /* OpenSSL */ = { +- isa = XCSwiftPackageProductDependency; +- package = 371D00DF29D8509400EC8598 /* XCRemoteSwiftPackageReference "OpenSSL-XCFramework" */; +- productName = OpenSSL; +- }; +- 3722177F2B3337FE00B8E9C2 /* TestUtils */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = TestUtils; +- }; +- 372217812B33380700B8E9C2 /* TestUtils */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = TestUtils; +- }; +- 37269EFA2B332F9E005E8E46 /* Common */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Common; +- }; +- 37269EFC2B332FAC005E8E46 /* Common */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Common; +- }; +- 37269EFE2B332FBB005E8E46 /* Common */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Common; +- }; +- 37269F002B332FC8005E8E46 /* Common */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Common; +- }; +- 37269F042B3332C2005E8E46 /* Common */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Common; +- }; +- 3739326429AE4B39009346AE /* DDGSync */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = DDGSync; +- }; +- 3739326629AE4B42009346AE /* DDGSync */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = DDGSync; +- }; +- 373FB4B22B4D6C4B004C88D6 /* PreferencesViews */ = { +- isa = XCSwiftPackageProductDependency; +- productName = PreferencesViews; +- }; +- 378F44E329B4BDE900899924 /* SwiftUIExtensions */ = { +- isa = XCSwiftPackageProductDependency; +- productName = SwiftUIExtensions; +- }; +- 378F44E529B4BDEE00899924 /* SwiftUIExtensions */ = { +- isa = XCSwiftPackageProductDependency; +- productName = SwiftUIExtensions; +- }; +- 37A5E2EF298AA1B20047046B /* Persistence */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Persistence; +- }; +- 37BA812C29B3CD690053F1A3 /* SyncUI */ = { +- isa = XCSwiftPackageProductDependency; +- productName = SyncUI; +- }; +- 37BA812E29B3CD6E0053F1A3 /* SyncUI */ = { +- isa = XCSwiftPackageProductDependency; +- productName = SyncUI; +- }; +- 37DB56EC2C3B314F0093D4DC /* BrowserServicesKit */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = BrowserServicesKit; +- }; +- 37DF000429F9C056002B7D3E /* SyncDataProviders */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = SyncDataProviders; +- }; +- 37DF000629F9C061002B7D3E /* SyncDataProviders */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = SyncDataProviders; +- }; +- 37F44A5E298C17830025E7FE /* Navigation */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Navigation; +- }; +- 4B2D062B2A11C0E100DE1F49 /* Networking */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Networking; +- }; +- 4B2D067E2A1334D700DE1F49 /* NetworkProtectionUI */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionUI; +- }; +- 4B41EDAA2B1544B2001EEDF4 /* LoginItems */ = { +- isa = XCSwiftPackageProductDependency; +- productName = LoginItems; +- }; +- 4B4BEC492A11B627001D9AC5 /* NetworkProtection */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtection; +- }; +- 4B4D60522A0B29CB00BCD287 /* NetworkProtection */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtection; +- }; +- 4B4D60AE2A0C837F00BCD287 /* Networking */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Networking; +- }; +- 4B4D60B02A0C83B900BCD287 /* NetworkProtectionUI */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionUI; +- }; +- 4B5235442C7BB14D00AFAF64 /* WireGuard */ = { +- isa = XCSwiftPackageProductDependency; +- package = 4B5235432C7BB14D00AFAF64 /* XCRemoteSwiftPackageReference "wireguard-apple" */; +- productName = WireGuard; +- }; +- 4B5235462C7BB15700AFAF64 /* WireGuard */ = { +- isa = XCSwiftPackageProductDependency; +- package = 4B5235432C7BB14D00AFAF64 /* XCRemoteSwiftPackageReference "wireguard-apple" */; +- productName = WireGuard; +- }; +- 4B5F14FB2A15291D0060320F /* InputFilesChecker */ = { +- isa = XCSwiftPackageProductDependency; +- productName = "plugin:InputFilesChecker"; +- }; +- 4B5F14FD2A1529230060320F /* InputFilesChecker */ = { +- isa = XCSwiftPackageProductDependency; +- productName = "plugin:InputFilesChecker"; +- }; +- 4BA7C4DC2B3F64E500AFE511 /* LoginItems */ = { +- isa = XCSwiftPackageProductDependency; +- productName = LoginItems; +- }; +- 4BCBE4572BA7E17800FC75A1 /* SubscriptionUI */ = { +- isa = XCSwiftPackageProductDependency; +- productName = SubscriptionUI; +- }; +- 4BCBE4592BA7E17800FC75A1 /* Subscription */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Subscription; +- }; +- 4BCBE45B2BA7E18500FC75A1 /* Subscription */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Subscription; +- }; +- 4BF97AD02B43C43F00EB4240 /* NetworkProtectionIPC */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionIPC; +- }; +- 4BF97AD22B43C43F00EB4240 /* NetworkProtectionUI */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionUI; +- }; +- 4BF97AD42B43C43F00EB4240 /* NetworkProtection */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = NetworkProtection; +- }; +- 537FC71EA5115A983FAF3170 /* Crashes */ = { +- isa = XCSwiftPackageProductDependency; +- package = 4311906792B7676CE9535D76 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Crashes; +- }; +- 560EB9342C7897370080DBC8 /* Onboarding */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Onboarding; +- }; +- 560EB9362C78974C0080DBC8 /* Onboarding */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Onboarding; +- }; +- 567A23C02C7F71570010F66C /* SpecialErrorPages */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = SpecialErrorPages; +- }; +- 567A23C42C7F75BB0010F66C /* SpecialErrorPages */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = SpecialErrorPages; +- }; +- 7B00997C2B6508B700FE7C31 /* NetworkProtectionProxy */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionProxy; +- }; +- 7B00997E2B6508C200FE7C31 /* NetworkProtectionProxy */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionProxy; +- }; +- 7B1459562B7D43E500047F2C /* NetworkProtectionProxy */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionProxy; +- }; +- 7B2366832C09FAC2002D393F /* VPNAppLauncher */ = { +- isa = XCSwiftPackageProductDependency; +- productName = VPNAppLauncher; +- }; +- 7B2366852C09FACD002D393F /* VPNAppLauncher */ = { +- isa = XCSwiftPackageProductDependency; +- productName = VPNAppLauncher; +- }; +- 7B2366872C09FADA002D393F /* VPNAppLauncher */ = { +- isa = XCSwiftPackageProductDependency; +- productName = VPNAppLauncher; +- }; +- 7B2366892C09FAE8002D393F /* VPNAppLauncher */ = { +- isa = XCSwiftPackageProductDependency; +- productName = VPNAppLauncher; +- }; +- 7B23668B2C09FAF1002D393F /* VPNAppLauncher */ = { +- isa = XCSwiftPackageProductDependency; +- productName = VPNAppLauncher; +- }; +- 7B23668D2C09FAFA002D393F /* VPNAppLauncher */ = { +- isa = XCSwiftPackageProductDependency; +- productName = VPNAppLauncher; +- }; +- 7B25856D2BA2F2ED00D49F79 /* NetworkProtectionUI */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionUI; +- }; +- 7B31FD8B2AD125620086AA24 /* NetworkProtectionIPC */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionIPC; +- }; +- 7B37C7A42BAA32A50062546A /* Subscription */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Subscription; +- }; +- 7B624F162BA25C1F00A6C544 /* NetworkProtectionUI */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionUI; +- }; +- 7B7DFB212B7E7473009EA1A3 /* Networking */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Networking; +- }; +- 7B8594182B5B26230007EB3E /* UDSHelper */ = { +- isa = XCSwiftPackageProductDependency; +- productName = UDSHelper; +- }; +- 7B97CD582B7E0B57004FEF43 /* NetworkProtectionProxy */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionProxy; +- }; +- 7B97CD5A2B7E0B85004FEF43 /* Common */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Common; +- }; +- 7BA076BA2B65D61400D7FB72 /* NetworkProtectionProxy */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionProxy; +- }; +- 7BA59C9A2AE18B49009A97B1 /* SystemExtensionManager */ = { +- isa = XCSwiftPackageProductDependency; +- productName = SystemExtensionManager; +- }; +- 7BA7CC5E2AD1210C0042E5CE /* Networking */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Networking; +- }; +- 7BA7CC602AD1211C0042E5CE /* Networking */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Networking; +- }; +- 7BBE2B7A2B61663C00697445 /* NetworkProtectionProxy */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionProxy; +- }; +- 7BEC182E2AD5D8DC00D30536 /* SystemExtensionManager */ = { +- isa = XCSwiftPackageProductDependency; +- productName = SystemExtensionManager; +- }; +- 7BEEA5112AD1235B00A9E72B /* NetworkProtectionIPC */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionIPC; +- }; +- 7BEEA5132AD1236300A9E72B /* NetworkProtectionIPC */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionIPC; +- }; +- 7BEEA5152AD1236E00A9E72B /* NetworkProtectionUI */ = { +- isa = XCSwiftPackageProductDependency; +- productName = NetworkProtectionUI; +- }; +- 85D44B852BA08D29001B4AB5 /* Suggestions */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Suggestions; +- }; +- 85D44B872BA08D30001B4AB5 /* Suggestions */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Suggestions; +- }; +- 85E2BBCD2B8F534000DBEC7A /* History */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = History; +- }; +- 85E2BBCF2B8F534A00DBEC7A /* History */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = History; +- }; +- 9807F644278CA16F00E1547B /* BrowserServicesKit */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = BrowserServicesKit; +- }; +- 984FD3BE299ACF35007334DD /* Bookmarks */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Bookmarks; +- }; +- 987799EC299998B1005D8EB6 /* Bookmarks */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Bookmarks; +- }; +- 98A50963294B691800D10880 /* Persistence */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Persistence; +- }; +- 9D9AE8F82AAA3AD00026E7DC /* DataBrokerProtection */ = { +- isa = XCSwiftPackageProductDependency; +- productName = DataBrokerProtection; +- }; +- 9D9AE8FA2AAA3AD90026E7DC /* DataBrokerProtection */ = { +- isa = XCSwiftPackageProductDependency; +- productName = DataBrokerProtection; +- }; +- 9D9DE5722C63AA0700D20B15 /* AppKitExtensions */ = { +- isa = XCSwiftPackageProductDependency; +- productName = AppKitExtensions; +- }; +- 9D9DE5742C63AA0C00D20B15 /* AppKitExtensions */ = { +- isa = XCSwiftPackageProductDependency; +- productName = AppKitExtensions; +- }; +- 9D9DE5762C63AA1600D20B15 /* AppKitExtensions */ = { +- isa = XCSwiftPackageProductDependency; +- productName = AppKitExtensions; +- }; +- 9D9DE5782C63AA1A00D20B15 /* AppKitExtensions */ = { +- isa = XCSwiftPackageProductDependency; +- productName = AppKitExtensions; +- }; +- 9D9DE57A2C63AA1F00D20B15 /* AppKitExtensions */ = { +- isa = XCSwiftPackageProductDependency; +- productName = AppKitExtensions; +- }; +- 9D9DE57C2C63AA2400D20B15 /* AppKitExtensions */ = { +- isa = XCSwiftPackageProductDependency; +- productName = AppKitExtensions; +- }; +- 9D9DE57E2C63B64F00D20B15 /* AppKitExtensions */ = { +- isa = XCSwiftPackageProductDependency; +- productName = AppKitExtensions; +- }; +- 9D9DE5802C63BA0B00D20B15 /* AppKitExtensions */ = { +- isa = XCSwiftPackageProductDependency; +- productName = AppKitExtensions; +- }; +- 9D9DE5822C63BE9600D20B15 /* AppKitExtensions */ = { +- isa = XCSwiftPackageProductDependency; +- productName = AppKitExtensions; +- }; +- 9DC70B192AA1FA5B005A844B /* LoginItems */ = { +- isa = XCSwiftPackageProductDependency; +- productName = LoginItems; +- }; +- 9DEF97E02B06C4EE00764F03 /* Networking */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Networking; +- }; +- 9FF521452BAA908500B9819B /* Lottie */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; +- productName = Lottie; +- }; +- 9FF521472BAA909C00B9819B /* Lottie */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; +- productName = Lottie; +- }; +- AA06B6B62672AF8100F541C5 /* Sparkle */ = { +- isa = XCSwiftPackageProductDependency; +- package = AA06B6B52672AF8100F541C5 /* XCRemoteSwiftPackageReference "Sparkle" */; +- productName = Sparkle; +- }; +- B65CD8CA2B316DF100A595BB /* SnapshotTesting */ = { +- isa = XCSwiftPackageProductDependency; +- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; +- productName = SnapshotTesting; +- }; +- B65CD8CC2B316DFC00A595BB /* SnapshotTesting */ = { +- isa = XCSwiftPackageProductDependency; +- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; +- productName = SnapshotTesting; +- }; +- B65CD8CE2B316E0200A595BB /* SnapshotTesting */ = { +- isa = XCSwiftPackageProductDependency; +- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; +- productName = SnapshotTesting; +- }; +- B65CD8D02B316E0C00A595BB /* SnapshotTesting */ = { +- isa = XCSwiftPackageProductDependency; +- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; +- productName = SnapshotTesting; +- }; +- B65CD8D22B316E1700A595BB /* SnapshotTesting */ = { +- isa = XCSwiftPackageProductDependency; +- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; +- productName = SnapshotTesting; +- }; +- B6AE39F229374AEC00C37AA4 /* OHHTTPStubs */ = { +- isa = XCSwiftPackageProductDependency; +- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; +- productName = OHHTTPStubs; +- }; +- B6AE39F429374AEC00C37AA4 /* OHHTTPStubsSwift */ = { +- isa = XCSwiftPackageProductDependency; +- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; +- productName = OHHTTPStubsSwift; +- }; +- B6B77BE7297973D4001E68A1 /* Navigation */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Navigation; +- }; +- B6DA44162616C13800DD1EC2 /* OHHTTPStubs */ = { +- isa = XCSwiftPackageProductDependency; +- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; +- productName = OHHTTPStubs; +- }; +- B6DA44182616C13800DD1EC2 /* OHHTTPStubsSwift */ = { +- isa = XCSwiftPackageProductDependency; +- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; +- productName = OHHTTPStubsSwift; +- }; +- B6E6BA072BA1FE24008AA7E1 /* Common */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Common; +- }; + B6EC37F829B5DAD7001ACE79 /* Swifter */ = { + isa = XCSwiftPackageProductDependency; + package = B6EC37F529B5DAAC001ACE79 /* XCRemoteSwiftPackageReference "swifter" */; + productName = Swifter; + }; +- B6EC37FE29B8D915001ACE79 /* Configuration */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Configuration; +- }; +- BDADBDC82BD2BC2200421B9B /* Lottie */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; +- productName = Lottie; +- }; +- BDADBDCA2BD2BC2800421B9B /* Lottie */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; +- productName = Lottie; +- }; +- C18BF9CB2C73678500ED6B8A /* Freemium */ = { +- isa = XCSwiftPackageProductDependency; +- productName = Freemium; +- }; +- C18BF9CD2C73678C00ED6B8A /* Freemium */ = { +- isa = XCSwiftPackageProductDependency; +- productName = Freemium; +- }; +- C18BF9CF2C736C9100ED6B8A /* Freemium */ = { +- isa = XCSwiftPackageProductDependency; +- productName = Freemium; +- }; +- C18BF9D12C736C9700ED6B8A /* Freemium */ = { +- isa = XCSwiftPackageProductDependency; +- productName = Freemium; +- }; +- CBC83E3529B63D380008E19C /* Configuration */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Configuration; +- }; +- CD34F0BB2C885D65006826BE /* PhishingDetection */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = PhishingDetection; +- }; +- CD34F0C32C8869FF006826BE /* PhishingDetection */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = PhishingDetection; +- }; +- D6BC8AC52C5A95AA0025375B /* DuckPlayer */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = DuckPlayer; +- }; +- D6BC8AC72C5A95B10025375B /* DuckPlayer */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = DuckPlayer; +- }; +- DC3F73D49B2D44464AFEFCD8 /* Subscription */ = { +- isa = XCSwiftPackageProductDependency; +- package = 3FFD51CF7C19ACBDB9687474 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Subscription; +- }; +- EE02D41F2BB460C000DBE6B3 /* BrowserServicesKit */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = BrowserServicesKit; +- }; +- EE2F9C5A2B90F2FF00D45FC9 /* Subscription */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Subscription; +- }; +- EE7295E22A545B9A008C0991 /* NetworkProtection */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = NetworkProtection; +- }; +- EE7295E62A545BBB008C0991 /* NetworkProtection */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = NetworkProtection; +- }; +- EE7295E82A545BC4008C0991 /* NetworkProtection */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = NetworkProtection; +- }; +- EE7295EC2A545C0A008C0991 /* NetworkProtection */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = NetworkProtection; +- }; +- EE7295EE2A545C12008C0991 /* NetworkProtection */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = NetworkProtection; +- }; +- F116A7C22BD1924B00F3FCF7 /* PixelKitTestingUtilities */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = PixelKitTestingUtilities; +- }; +- F116A7C62BD1925500F3FCF7 /* PixelKitTestingUtilities */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = PixelKitTestingUtilities; +- }; +- F116A7C82BD1929000F3FCF7 /* PixelKitTestingUtilities */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = PixelKitTestingUtilities; +- }; +- F198C7112BD18A28000BF24D /* PixelKit */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = PixelKit; +- }; +- F198C7132BD18A30000BF24D /* PixelKit */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = PixelKit; +- }; +- F198C7152BD18A44000BF24D /* PixelKit */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = PixelKit; +- }; +- F198C7172BD18A4C000BF24D /* PixelKit */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = PixelKit; +- }; +- F198C7192BD18A5B000BF24D /* PixelKit */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = PixelKit; +- }; +- F198C71B2BD18A61000BF24D /* PixelKit */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = PixelKit; +- }; +- F198C71D2BD18D88000BF24D /* SwiftLintTool */ = { +- isa = XCSwiftPackageProductDependency; +- package = B6F997B92B8F352500476735 /* XCRemoteSwiftPackageReference "apple-toolbox" */; +- productName = SwiftLintTool; +- }; +- F198C71F2BD18D92000BF24D /* SwiftLintTool */ = { +- isa = XCSwiftPackageProductDependency; +- package = B6F997B92B8F352500476735 /* XCRemoteSwiftPackageReference "apple-toolbox" */; +- productName = SwiftLintTool; +- }; +- F1D0428D2BFB9F9C00A31506 /* Subscription */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Subscription; +- }; +- F1D0428F2BFB9FA300A31506 /* Subscription */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = Subscription; +- }; +- F1D43AF22B98E47800BAB743 /* BareBonesBrowserKit */ = { +- isa = XCSwiftPackageProductDependency; +- package = F1D43AF12B98E47800BAB743 /* XCRemoteSwiftPackageReference "BareBonesBrowser" */; +- productName = BareBonesBrowserKit; +- }; +- F1D43AF42B98E48900BAB743 /* BareBonesBrowserKit */ = { +- isa = XCSwiftPackageProductDependency; +- package = F1D43AF12B98E47800BAB743 /* XCRemoteSwiftPackageReference "BareBonesBrowser" */; +- productName = BareBonesBrowserKit; +- }; +- F1DA51A42BF6114200CF29FA /* SubscriptionTestingUtilities */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = SubscriptionTestingUtilities; +- }; +- F1DA51A82BF6114C00CF29FA /* SubscriptionTestingUtilities */ = { +- isa = XCSwiftPackageProductDependency; +- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +- productName = SubscriptionTestingUtilities; +- }; +- F1DF95E62BD188B60045E591 /* LoginItems */ = { +- isa = XCSwiftPackageProductDependency; +- productName = LoginItems; +- }; + /* End XCSwiftPackageProductDependency section */ + + /* Begin XCVersionGroup section */ From dce247c8b5aac4a09a28b8414e6011693dfba82f Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Mon, 14 Oct 2024 10:23:21 +0200 Subject: [PATCH 16/90] Update BSK ref --- .../xcshareddata/swiftpm/Package.resolved | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 84f2822c5e..3f9fdd41d5 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,4 @@ { - "originHash" : "733e03047e060ab329e517055580052eeeb8980809fdf47ad605310b5d41b279", "pins" : [ { "identity" : "apple-toolbox", @@ -34,7 +33,7 @@ "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { "branch" : "dominik/xcode-16", - "revision" : "d93ca97bec5cbfd00bf60e8b9e96737c71a4ab50" + "revision" : "c4aaa669840308ecc1d73216f73a101900a73459" } }, { @@ -191,5 +190,5 @@ } } ], - "version" : 3 + "version" : 2 } From d5f6a5e1a3f1910f157c0092934db27ac59a9935 Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Mon, 14 Oct 2024 10:59:16 +0200 Subject: [PATCH 17/90] Fix BrowserTabViewControllerOnboardingTests compilation --- .../BrowserTabViewControllerOnboardingTests.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/UnitTests/Onboarding/ContextualOnboarding/BrowserTabViewControllerOnboardingTests.swift b/UnitTests/Onboarding/ContextualOnboarding/BrowserTabViewControllerOnboardingTests.swift index 2b67d2dc64..666021380b 100644 --- a/UnitTests/Onboarding/ContextualOnboarding/BrowserTabViewControllerOnboardingTests.swift +++ b/UnitTests/Onboarding/ContextualOnboarding/BrowserTabViewControllerOnboardingTests.swift @@ -16,12 +16,12 @@ // limitations under the License. // -import XCTest -import SwiftUI -import Onboarding -import Combine import BrowserServicesKit +import Combine +import Onboarding import PrivacyDashboard +import struct SwiftUI.AnyView +import XCTest @testable import DuckDuckGo_Privacy_Browser final class BrowserTabViewControllerOnboardingTests: XCTestCase { From 1ba57c0bb2df79b7df0f389390c65704ff09ae2a Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Tue, 22 Oct 2024 13:45:09 -0300 Subject: [PATCH 18/90] Fix testDragAndDropToReorderIsNotPossibleWhenInSearchOnBookmarksManager --- UITests/BookmarkSearchTests.swift | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/UITests/BookmarkSearchTests.swift b/UITests/BookmarkSearchTests.swift index ae4beb5b78..0442b5ded9 100644 --- a/UITests/BookmarkSearchTests.swift +++ b/UITests/BookmarkSearchTests.swift @@ -277,8 +277,14 @@ class BookmarkSearchTests: XCTestCase { private func dragAndDropBookmark(_ thirdBookmarkCell: XCUIElement, mode: BookmarkMode) { let startCoordinate = thirdBookmarkCell.coordinate(withNormalizedOffset: .zero) - let targetCoordinate = (mode == .panel ? app.popovers.firstMatch.outlines.firstMatch : app.tables.firstMatch).coordinate(withNormalizedOffset: .zero) - startCoordinate.press(forDuration: 0.1, thenDragTo: targetCoordinate) + + if mode == .panel { + let targetCoordinate = (app.popovers.firstMatch.outlines.firstMatch).coordinate(withNormalizedOffset: .zero) + startCoordinate.press(forDuration: 0.1, thenDragTo: targetCoordinate) + } else { + let secondBookmarkCell = app.tables.firstMatch.staticTexts["Bookmark #2"] + startCoordinate.press(forDuration: 0.1, thenDragTo: secondBookmarkCell.coordinate(withNormalizedOffset: .zero)) + } } private func clearSearchInBookmarksManager() { From 532d36436f3d34fd7566e4cdb9aa8d752c0d7dbd Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Tue, 22 Oct 2024 14:02:07 -0300 Subject: [PATCH 19/90] Fix BookmarksBarTests --- UITests/BookmarksBarTests.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/UITests/BookmarksBarTests.swift b/UITests/BookmarksBarTests.swift index db7ead8cd2..7ab3aa51ec 100644 --- a/UITests/BookmarksBarTests.swift +++ b/UITests/BookmarksBarTests.swift @@ -57,6 +57,7 @@ class BookmarksBarTests: XCTestCase { app.typeKey("n", modifierFlags: [.command]) // Guarantee a single window resetBookmarksAndAddOneBookmark() app.typeKey("w", modifierFlags: [.command, .option, .shift]) // Close windows + app.typeKey("n", modifierFlags: [.command]) openSettingsAndSetShowBookmarksBarToUnchecked() openSecondWindowAndVisitSite() siteWindow = app.windows.containing(.webView, identifier: pageTitle).firstMatch @@ -163,7 +164,7 @@ class BookmarksBarTests: XCTestCase { private extension BookmarksBarTests { func openSettingsAndSetShowBookmarksBarToUnchecked() { - app.typeKey(",", modifierFlags: [.command]) + addressBarTextField.typeURL(URL(string: "duck://settings")!) let settingsAppearanceButton = app.buttons["PreferencesSidebar.appearanceButton"] XCTAssertTrue( From f2906d529417345afb5d30226d17e1bdd99d9adc Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Tue, 22 Oct 2024 14:22:38 -0300 Subject: [PATCH 20/90] WIP: Fix BookmarksAndFavoriteTests --- UITests/BookmarksAndFavoritesTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UITests/BookmarksAndFavoritesTests.swift b/UITests/BookmarksAndFavoritesTests.swift index 7c9bb93673..cd841fa265 100644 --- a/UITests/BookmarksAndFavoritesTests.swift +++ b/UITests/BookmarksAndFavoritesTests.swift @@ -686,7 +686,7 @@ private extension BookmarksAndFavoritesTests { /// Make sure that appearance tab has been used to set "show favorites" to true func toggleBookmarksBarShowFavoritesOn() { - app.typeKey(",", modifierFlags: [.command]) // Open settings + addressBarTextField.typeURL(URL(string: "duck://settings")!) XCTAssertTrue( settingsAppearanceButton.waitForExistence(timeout: UITests.Timeouts.elementExistence), From 395bf26f43415f60396c23b7061d69ac03e19281 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 23 Oct 2024 12:14:43 -0300 Subject: [PATCH 21/90] Insert favorites when bookmark is favorite and no index (#3442) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task/Issue URL: https://app.asana.com/0/1201048563534612/1208595122638622/f Tech Design URL: CC: **Description**: It fixes new bookmarks not being added to favorites from the dialog when no favorites index is passed. **Steps to test this PR**: 1. Create new bookmark from the dialog or by going to the new tab page and tapping the add favorite cell 2. Check the ‘Add as favorite’ box 3. Add the bookmark 4. The bookmark should be part of the new tab page array of favorites (you should also check is a favorite in the panel and in the bookmarks manager) **Definition of Done**: * [x] Does this PR satisfy our [Definition of Done](https://app.asana.com/0/1202500774821704/1207634633537039/f)? — ###### Internal references: [Pull Request Review Checklist](https://app.asana.com/0/1202500774821704/1203764234894239/f) [Software Engineering Expectations](https://app.asana.com/0/59792373528535/199064865822552) [Technical Design Template](https://app.asana.com/0/59792373528535/184709971311943) [Pull Request Documentation](https://app.asana.com/0/1202500774821704/1204012835277482/f) --------- Co-authored-by: Alexey Martemyanov --- .../Services/BookmarkStoreMock.swift | 11 +-- .../Services/LocalBookmarkStore.swift | 78 ++++++++++++++++--- .../Services/LocalBookmarkStoreTests.swift | 24 +++--- 3 files changed, 81 insertions(+), 32 deletions(-) diff --git a/DuckDuckGo/Bookmarks/Services/BookmarkStoreMock.swift b/DuckDuckGo/Bookmarks/Services/BookmarkStoreMock.swift index 92844acaa5..9ce9a877af 100644 --- a/DuckDuckGo/Bookmarks/Services/BookmarkStoreMock.swift +++ b/DuckDuckGo/Bookmarks/Services/BookmarkStoreMock.swift @@ -51,16 +51,7 @@ final class BookmarkStoreMock: BookmarkStore { } } var indexInFavoritesArray = 0 - store?.save( - entitiesAtIndices: entities.map { entity in - if let bookmark = entity as? Bookmark, bookmark.isFavorite { - let result: (BaseBookmarkEntity, Int?, Int?) = (bookmark, nil, indexInFavoritesArray) - indexInFavoritesArray += 1 - return result - } - - return (entity, nil, nil) - }, completion: { _ in }) + store?.save(entitiesAtIndices: entities.map { ($0, nil, nil) }, completion: { _ in }) } } diff --git a/DuckDuckGo/Bookmarks/Services/LocalBookmarkStore.swift b/DuckDuckGo/Bookmarks/Services/LocalBookmarkStore.swift index 511b3a8f12..07af3ab838 100644 --- a/DuckDuckGo/Bookmarks/Services/LocalBookmarkStore.swift +++ b/DuckDuckGo/Bookmarks/Services/LocalBookmarkStore.swift @@ -321,7 +321,7 @@ final class LocalBookmarkStore: BookmarkStore { move(entities: managedObjects, to: insertionIndices, within: parentEntity) } - try restoreFavorites(entitiesAtIndices, entitiesByUUID: entitiesByUUID, in: context) + try handleFavorites(entitiesAtIndices, entitiesByUUID: entitiesByUUID, in: context) }, onError: { [weak self] error in self?.commonOnSaveErrorHandler(error) DispatchQueue.main.async { completion(error) } @@ -974,18 +974,41 @@ final class LocalBookmarkStore: BookmarkStore { return (entitiesByUUID, objectsToInsertIntoParent) } - /// Restores entities marked as favorites into the appropriate favorites folder. + private func handleFavorites(_ entitiesAtIndices: [BookmarkEntityAtIndex], + entitiesByUUID: [String: BookmarkEntity], + in context: NSManagedObjectContext) throws { + let displayedFavoritesFolder = try fetchDisplayedFavoritesFolder(in: context) + let favoritesFoldersWithoutDisplayed = fetchOtherFavoritesFolders(in: context) + + try restoreFavorites(entitiesAtIndices, + entitiesByUUID: entitiesByUUID, + displayedFavoritesFolder: displayedFavoritesFolder, + favoritesFoldersWithoutDisplayed: favoritesFoldersWithoutDisplayed, + in: context) + + try insertNewFavorites(entitiesAtIndices, + entitiesByUUID: entitiesByUUID, + displayedFavoritesFolder: displayedFavoritesFolder, + favoritesFoldersWithoutDisplayed: favoritesFoldersWithoutDisplayed, + in: context) + } + + /// Restores favorite bookmark entities to their correct positions within the favorites list. + /// /// - Parameters: - /// - entitiesAtIndices: An array of `BookmarkEntityAtIndex`, containing entities with their target indices. - /// - entitiesByUUID: A dictionary mapping UUID strings to corresponding `BookmarkEntity` objects. - /// - context: The managed object context for interacting with Core Data. - /// - Throws: An error if the displayed favorites folder cannot be retrieved. + /// - entitiesAtIndices: An array of `BookmarkEntityAtIndex` objects, containing bookmark entities along with their respective indices. + /// - entitiesByUUID: A dictionary mapping UUID strings to `BookmarkEntity` objects, providing quick access to entities by their unique identifiers. + /// - displayedFavoritesFolder: The `BookmarkEntity` representing the currently displayed folder of favorites. + /// - favoritesFoldersWithoutDisplayed: An array of `BookmarkEntity` objects representing all other favorites folders, excluding the currently displayed folder. + /// - context: The `NSManagedObjectContext` used to perform Core Data operations. + /// + /// - Throws: This function can throw errors if adding an entity to the favorites fails during Core Data operations. + /// private func restoreFavorites(_ entitiesAtIndices: [BookmarkEntityAtIndex], entitiesByUUID: [String: BookmarkEntity], + displayedFavoritesFolder: BookmarkEntity, + favoritesFoldersWithoutDisplayed: [BookmarkEntity], in context: NSManagedObjectContext) throws { - let displayedFavoritesFolder = try fetchDisplayedFavoritesFolder(in: context) - let favoritesFoldersWithoutDisplayed = fetchOtherFavoritesFolders(in: context) - let sortedEntitiesByFavoritesIndex = sortEntitiesByFavoritesIndex(entitiesAtIndices) let adjustedIndices = calculateAdjustedIndices(for: sortedEntitiesByFavoritesIndex, in: displayedFavoritesFolder) @@ -1003,6 +1026,41 @@ final class LocalBookmarkStore: BookmarkStore { } } + /// Inserts new favorite bookmark entities into the favorites list if they meet certain conditions. + /// + /// - Parameters: + /// - entitiesAtIndices: An array of `BookmarkEntityAtIndex` objects, which contain bookmark entities and their respective indices. + /// - entitiesByUUID: A dictionary mapping UUID strings to `BookmarkEntity` objects, providing quick access to entities by their unique identifiers. + /// - displayedFavoritesFolder: The `BookmarkEntity` representing the currently displayed folder of favorites. + /// - favoritesFoldersWithoutDisplayed: An array of `BookmarkEntity` objects representing all other favorites folders, excluding the currently displayed folder. + /// - context: The `NSManagedObjectContext` used to perform Core Data operations. + /// + /// - Throws: This function can throw errors if adding an entity to the favorites fails during the Core Data operations. + /// + /// - Discussion: + /// This function iterates through the list of entities with their respective indices (`entitiesAtIndices`). For each entity: + /// - If the entity is a `Bookmark`, is marked as a favorite (`isFavorite`), and does not have an index in the favorites array (`indexInFavoritesArray == nil`), it is considered new, so we need to insert it. + /// - The `addEntityToFavorites` function is then called to add the bookmark to the list of favorites. The entity is added without specifying an index (`at: nil`), allowing it to be inserted at a default position (last position). + /// - The function uses `entitiesByUUID` to resolve relationships between entities, as well as the `displayedFavoritesFolder` and `favoritesFoldersWithoutDisplayed` to ensure that the entity is added correctly to the appropriate folder structure. + private func insertNewFavorites(_ entitiesAtIndices: [BookmarkEntityAtIndex], + entitiesByUUID: [String: BookmarkEntity], + displayedFavoritesFolder: BookmarkEntity, + favoritesFoldersWithoutDisplayed: [BookmarkEntity], + in context: NSManagedObjectContext) throws { + try entitiesAtIndices.forEach { (entity, _, indexInFavoritesArray) in + if let bookmark = entity as? Bookmark, + bookmark.isFavorite, + indexInFavoritesArray == nil { + try addEntityToFavorites( + entity, + at: nil, + entitiesByUUID: entitiesByUUID, + displayedFavoritesFolder: displayedFavoritesFolder, + otherFavoritesFolders: favoritesFoldersWithoutDisplayed) + } + } + } + private func fetchDisplayedFavoritesFolder(in context: NSManagedObjectContext) throws -> BookmarkEntity { let displayedFavoritesFolderUUID = favoritesDisplayMode.displayedFolder.rawValue guard let displayedFavoritesFolder = BookmarkUtils.fetchFavoritesFolder(withUUID: displayedFavoritesFolderUUID, in: context) else { @@ -1034,7 +1092,7 @@ final class LocalBookmarkStore: BookmarkStore { } private func addEntityToFavorites(_ entity: BaseBookmarkEntity, - at index: Int, + at index: Int?, entitiesByUUID: [String: BookmarkEntity], displayedFavoritesFolder: BookmarkEntity, otherFavoritesFolders: [BookmarkEntity]) throws { diff --git a/UnitTests/Bookmarks/Services/LocalBookmarkStoreTests.swift b/UnitTests/Bookmarks/Services/LocalBookmarkStoreTests.swift index 5f263bd2fb..b5536d1559 100644 --- a/UnitTests/Bookmarks/Services/LocalBookmarkStoreTests.swift +++ b/UnitTests/Bookmarks/Services/LocalBookmarkStoreTests.swift @@ -60,7 +60,7 @@ final class LocalBookmarkStoreTests: XCTestCase { let bookmark = Bookmark(id: UUID().uuidString, url: URL.duckDuckGo.absoluteString, title: "DuckDuckGo", isFavorite: true, parentFolderUUID: "bookmarks_root") - bookmarkStore.save(bookmark: bookmark, index: nil, indexInFavoritesArray: 0) { error in + bookmarkStore.save(bookmark: bookmark, index: nil) { error in XCTAssertNil(error) savingExpectation.fulfill() @@ -953,9 +953,9 @@ final class LocalBookmarkStoreTests: XCTestCase { // Save the initial bookmarks state: _ = try await bookmarkStore.save(folder: folder) - _ = try await bookmarkStore.save(bookmark: bookmark1, index: nil, indexInFavoritesArray: 0) - _ = try await bookmarkStore.save(bookmark: bookmark2, index: nil, indexInFavoritesArray: 1) - _ = try await bookmarkStore.save(bookmark: bookmark3, index: nil, indexInFavoritesArray: 2) + _ = try await bookmarkStore.save(bookmark: bookmark1, index: nil) + _ = try await bookmarkStore.save(bookmark: bookmark2, index: nil) + _ = try await bookmarkStore.save(bookmark: bookmark3, index: nil) // Fetch persisted favorites back from the store: @@ -1084,9 +1084,9 @@ final class LocalBookmarkStoreTests: XCTestCase { // Save the initial bookmarks state: _ = try await bookmarkStore.save(folder: initialParentFolder) - _ = try await bookmarkStore.save(bookmark: bookmark1, index: nil, indexInFavoritesArray: 0) - _ = try await bookmarkStore.save(bookmark: bookmark2, index: nil, indexInFavoritesArray: 1) - _ = try await bookmarkStore.save(bookmark: bookmark3, index: nil, indexInFavoritesArray: 2) + _ = try await bookmarkStore.save(bookmark: bookmark1, index: nil) + _ = try await bookmarkStore.save(bookmark: bookmark2, index: nil) + _ = try await bookmarkStore.save(bookmark: bookmark3, index: nil) // Fetch persisted favorites back from the store: @@ -1127,9 +1127,9 @@ final class LocalBookmarkStoreTests: XCTestCase { // Save the initial bookmarks state: _ = try await bookmarkStore.save(folder: folder) - _ = try await bookmarkStore.save(bookmark: bookmark1, index: nil, indexInFavoritesArray: 0) - _ = try await bookmarkStore.save(bookmark: bookmark2, index: nil, indexInFavoritesArray: 1) - _ = try await bookmarkStore.save(bookmark: bookmark3, index: nil, indexInFavoritesArray: 2) + _ = try await bookmarkStore.save(bookmark: bookmark1, index: nil) + _ = try await bookmarkStore.save(bookmark: bookmark2, index: nil) + _ = try await bookmarkStore.save(bookmark: bookmark3, index: nil) // Fetch persisted favorites back from the store: @@ -1213,7 +1213,7 @@ final class LocalBookmarkStoreTests: XCTestCase { bookmarkStore.applyFavoritesDisplayMode(.displayNative(.desktop)) let bookmark = Bookmark(id: UUID().uuidString, url: "https://example1.com", title: "Example", isFavorite: true) - _ = try await bookmarkStore.save(bookmark: bookmark, index: nil, indexInFavoritesArray: 0) + _ = try await bookmarkStore.save(bookmark: bookmark, index: nil) context.performAndWait { let rootFolder = BookmarkUtils.fetchRootFolder(context)! @@ -1315,7 +1315,7 @@ final class LocalBookmarkStoreTests: XCTestCase { bookmarkStore.applyFavoritesDisplayMode(.displayUnified(native: .desktop)) let bookmark = Bookmark(id: UUID().uuidString, url: "https://example1.com", title: "Example", isFavorite: true) - _ = try await bookmarkStore.save(bookmark: bookmark, index: nil, indexInFavoritesArray: 0) + _ = try await bookmarkStore.save(bookmark: bookmark, index: nil) context.performAndWait { let rootFolder = BookmarkUtils.fetchRootFolder(context)! From dffa3ebb53598d5757df597ae252755c9af8e9ef Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 23 Oct 2024 14:13:41 -0300 Subject: [PATCH 22/90] Fix restoration and pinned tab tests --- UITests/OnboardingUITests.swift | 4 ++++ UITests/StateRestorationTests.swift | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/UITests/OnboardingUITests.swift b/UITests/OnboardingUITests.swift index d83b751520..4d2d34d79c 100644 --- a/UITests/OnboardingUITests.swift +++ b/UITests/OnboardingUITests.swift @@ -20,6 +20,10 @@ import XCTest final class OnboardingUITests: XCTestCase { + override func tearDownWithError() throws { + try resetApplicationData() + } + func testOnboardingToBrowsing() throws { try resetApplicationData() continueAfterFailure = false diff --git a/UITests/StateRestorationTests.swift b/UITests/StateRestorationTests.swift index 4d952c2d49..a2885dcd52 100644 --- a/UITests/StateRestorationTests.swift +++ b/UITests/StateRestorationTests.swift @@ -57,7 +57,7 @@ class StateRestorationTests: XCTestCase { } func test_tabStateAtRelaunch_shouldContainTwoSitesVisitedInPreviousSession_whenReopenAllWindowsFromLastSessionIsSet() { - app.typeKey(",", modifierFlags: [.command]) // Open settings + addressBarTextField.typeURL(URL(string: "duck://settings")!) // Open settings settingsGeneralButton.click(forDuration: 0.5, thenDragTo: settingsGeneralButton) reopenAllWindowsFromLastSessionPreference.clickAfterExistenceTestSucceeds() app.typeKey("w", modifierFlags: [.command, .option, .shift]) // Close windows @@ -93,7 +93,7 @@ class StateRestorationTests: XCTestCase { } func test_tabStateAtRelaunch_shouldContainNoSitesVisitedInPreviousSession_whenReopenAllWindowsFromLastSessionIsUnset() { - app.typeKey(",", modifierFlags: [.command]) // Open settings + addressBarTextField.typeURL(URL(string: "duck://settings")!) // Open settings settingsGeneralButton.click(forDuration: 0.5, thenDragTo: settingsGeneralButton) openANewWindowPreference.clickAfterExistenceTestSucceeds() app.typeKey("w", modifierFlags: [.command, .option, .shift]) // Close windows From 45b3fc7f0cead23f885532bef25e4869a412724a Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 23 Oct 2024 15:45:07 -0300 Subject: [PATCH 23/90] Point to specific commit --- DuckDuckGo.xcodeproj/project.pbxproj | 6 ++++-- .../xcshareddata/swiftpm/Package.resolved | 7 +++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index f128690b67..122ae513a8 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -2697,6 +2697,7 @@ B6F9BDE52B45CD1900677B33 /* ModalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6F9BDE32B45CD1900677B33 /* ModalView.swift */; }; B6FA893F269C424500588ECD /* PrivacyDashboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FA893E269C424500588ECD /* PrivacyDashboardViewController.swift */; }; B6FA8941269C425400588ECD /* PrivacyDashboardPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FA8940269C425400588ECD /* PrivacyDashboardPopover.swift */; }; + BB1AD7232CC94F1D00210797 /* BrowserServicesKit in Frameworks */ = {isa = PBXBuildFile; productRef = EE02D41F2BB460C000DBE6B3 /* BrowserServicesKit */; }; BB4339DB2C7F9606005D7ED7 /* PinnedTabsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB4339DA2C7F9606005D7ED7 /* PinnedTabsTests.swift */; }; BB470EBB2C5A66D6002EE91D /* BookmarkManagementDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB470EBA2C5A66D6002EE91D /* BookmarkManagementDetailViewModel.swift */; }; BB470EBC2C5A66D6002EE91D /* BookmarkManagementDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB470EBA2C5A66D6002EE91D /* BookmarkManagementDetailViewModel.swift */; }; @@ -4880,6 +4881,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + BB1AD7232CC94F1D00210797 /* BrowserServicesKit in Frameworks */, 9D9DE57F2C63B64F00D20B15 /* AppKitExtensions in Frameworks */, B64E42872B908501006C1346 /* SnapshotTesting in Frameworks */, ); @@ -14359,8 +14361,8 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; requirement = { - branch = "dominik/xcode-16"; - kind = branch; + kind = revision; + revision = 748463efbe18152dfcacba297b5b8735f37bdfc2; }; }; 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index fd0070548a..b734276a28 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -32,8 +32,7 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { - "branch" : "dominik/xcode-16", - "revision" : "c4aaa669840308ecc1d73216f73a101900a73459" + "revision" : "748463efbe18152dfcacba297b5b8735f37bdfc2" } }, { @@ -59,8 +58,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/GRDB.swift.git", "state" : { - "revision" : "5b2f6a81099d26ae0f9e38788f51490cd6a4b202", - "version" : "2.4.2" + "revision" : "4225b85c9a0c50544e413a1ea1e502c802b44b35", + "version" : "2.4.0" } }, { From 52a061739cfe68e8a266455ce916b80266d0eb6d Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Thu, 24 Oct 2024 11:17:11 -0300 Subject: [PATCH 24/90] Update dependencies.patch --- dependencies.patch | 991 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 986 insertions(+), 5 deletions(-) diff --git a/dependencies.patch b/dependencies.patch index 07b2c3e28f..dd7d3c0511 100644 --- a/dependencies.patch +++ b/dependencies.patch @@ -1,8 +1,8 @@ diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj -index 723abdcc5..300c66c31 100644 +index 122ae513a..7b0a80254 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj -@@ -14265,94 +14265,6 @@ +@@ -14309,94 +14309,6 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ @@ -58,8 +58,8 @@ index 723abdcc5..300c66c31 100644 - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; - requirement = { -- branch = "dominik/xcode-16"; -- kind = branch; +- kind = revision; +- revision = 748463efbe18152dfcacba297b5b8735f37bdfc2; - }; - }; - 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */ = { @@ -97,7 +97,7 @@ index 723abdcc5..300c66c31 100644 B6EC37F529B5DAAC001ACE79 /* XCRemoteSwiftPackageReference "swifter" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/httpswift/swifter.git"; -@@ -14361,866 +14273,14 @@ +@@ -14405,876 +14317,14 @@ version = 1.5.0; }; }; @@ -608,6 +608,16 @@ index 723abdcc5..300c66c31 100644 - isa = XCSwiftPackageProductDependency; - productName = NetworkProtectionUI; - }; +- 84B49F0C2CB10F0900FF08BB /* OHHTTPStubs */ = { +- isa = XCSwiftPackageProductDependency; +- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; +- productName = OHHTTPStubs; +- }; +- 84B49F0E2CB10F0900FF08BB /* OHHTTPStubsSwift */ = { +- isa = XCSwiftPackageProductDependency; +- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; +- productName = OHHTTPStubsSwift; +- }; - 85D44B852BA08D29001B4AB5 /* Suggestions */ = { - isa = XCSwiftPackageProductDependency; - package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; @@ -964,3 +974,974 @@ index 723abdcc5..300c66c31 100644 /* End XCSwiftPackageProductDependency section */ /* Begin XCVersionGroup section */ +diff --git a/dependencies.patch b/dependencies.patch +index 07b2c3e28..50b671cb9 100644 +--- a/dependencies.patch ++++ b/dependencies.patch +@@ -1,966 +0,0 @@ +-diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj +-index 723abdcc5..300c66c31 100644 +---- a/DuckDuckGo.xcodeproj/project.pbxproj +-+++ b/DuckDuckGo.xcodeproj/project.pbxproj +-@@ -14265,94 +14265,6 @@ +- /* End XCConfigurationList section */ +- +- /* Begin XCRemoteSwiftPackageReference section */ +-- 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { +-- isa = XCRemoteSwiftPackageReference; +-- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; +-- requirement = { +-- kind = revision; +-- revision = 4f3695b5b598593ce3c44fe810637e3406206c19; +-- }; +-- }; +-- 3706FDD7293F661700E42796 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */ = { +-- isa = XCRemoteSwiftPackageReference; +-- repositoryURL = "https://github.com/AliSoftware/OHHTTPStubs.git"; +-- requirement = { +-- kind = exactVersion; +-- version = 9.1.0; +-- }; +-- }; +-- 371D00DF29D8509400EC8598 /* XCRemoteSwiftPackageReference "OpenSSL-XCFramework" */ = { +-- isa = XCRemoteSwiftPackageReference; +-- repositoryURL = "https://github.com/duckduckgo/OpenSSL-XCFramework"; +-- requirement = { +-- kind = exactVersion; +-- version = 3.1.5004; +-- }; +-- }; +-- 3FFD51CF7C19ACBDB9687474 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { +-- isa = XCRemoteSwiftPackageReference; +-- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; +-- requirement = { +-- kind = revision; +-- revision = a968dd3d8d5ff95b6eae65889c1a365174a53a69; +-- }; +-- }; +-- 4311906792B7676CE9535D76 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { +-- isa = XCRemoteSwiftPackageReference; +-- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; +-- requirement = { +-- kind = revision; +-- revision = c06709ba8a586f6a40190bacaaaaa96b2d55e540; +-- }; +-- }; +-- 4B5235432C7BB14D00AFAF64 /* XCRemoteSwiftPackageReference "wireguard-apple" */ = { +-- isa = XCRemoteSwiftPackageReference; +-- repositoryURL = "https://github.com/duckduckgo/wireguard-apple"; +-- requirement = { +-- kind = exactVersion; +-- version = 1.1.3; +-- }; +-- }; +-- 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { +-- isa = XCRemoteSwiftPackageReference; +-- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; +-- requirement = { +-- branch = "dominik/xcode-16"; +-- kind = branch; +-- }; +-- }; +-- 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */ = { +-- isa = XCRemoteSwiftPackageReference; +-- repositoryURL = "https://github.com/airbnb/lottie-spm.git"; +-- requirement = { +-- kind = exactVersion; +-- version = 4.4.3; +-- }; +-- }; +-- AA06B6B52672AF8100F541C5 /* XCRemoteSwiftPackageReference "Sparkle" */ = { +-- isa = XCRemoteSwiftPackageReference; +-- repositoryURL = "https://github.com/sparkle-project/Sparkle.git"; +-- requirement = { +-- kind = exactVersion; +-- version = 2.6.3; +-- }; +-- }; +-- B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */ = { +-- isa = XCRemoteSwiftPackageReference; +-- repositoryURL = "https://github.com/pointfreeco/swift-snapshot-testing"; +-- requirement = { +-- kind = exactVersion; +-- version = 1.15.4; +-- }; +-- }; +-- B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */ = { +-- isa = XCRemoteSwiftPackageReference; +-- repositoryURL = "https://github.com/AliSoftware/OHHTTPStubs.git"; +-- requirement = { +-- kind = exactVersion; +-- version = 9.1.0; +-- }; +-- }; +- B6EC37F529B5DAAC001ACE79 /* XCRemoteSwiftPackageReference "swifter" */ = { +- isa = XCRemoteSwiftPackageReference; +- repositoryURL = "https://github.com/httpswift/swifter.git"; +-@@ -14361,866 +14273,14 @@ +- version = 1.5.0; +- }; +- }; +-- B6F997B92B8F352500476735 /* XCRemoteSwiftPackageReference "apple-toolbox" */ = { +-- isa = XCRemoteSwiftPackageReference; +-- repositoryURL = "https://github.com/duckduckgo/apple-toolbox.git"; +-- requirement = { +-- kind = exactVersion; +-- version = 3.1.2; +-- }; +-- }; +-- F1D43AF12B98E47800BAB743 /* XCRemoteSwiftPackageReference "BareBonesBrowser" */ = { +-- isa = XCRemoteSwiftPackageReference; +-- repositoryURL = "https://github.com/duckduckgo/BareBonesBrowser.git"; +-- requirement = { +-- kind = exactVersion; +-- version = 0.1.0; +-- }; +-- }; +-- FAE06B199CA1F209B55B34E9 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { +-- isa = XCRemoteSwiftPackageReference; +-- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; +-- requirement = { +-- kind = revision; +-- revision = a968dd3d8d5ff95b6eae65889c1a365174a53a69; +-- }; +-- }; +- /* End XCRemoteSwiftPackageReference section */ +- +- /* Begin XCSwiftPackageProductDependency section */ +-- 020807B12C6CFF95006F94C4 /* Configuration */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Configuration; +-- }; +-- 02589D9C2C88E8210093940D /* Configuration */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Configuration; +-- }; +-- 02589D9E2C88E8270093940D /* Persistence */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Persistence; +-- }; +-- 02589DA02C88EB570093940D /* Configuration */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Configuration; +-- }; +-- 02589DA22C88EB5D0093940D /* Persistence */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Persistence; +-- }; +-- 02589DA42C88ED190093940D /* BrowserServicesKit */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = BrowserServicesKit; +-- }; +-- 02589DA62C88F8E90093940D /* PixelKit */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = PixelKit; +-- }; +-- 02589DA82C89F0420093940D /* Configuration */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Configuration; +-- }; +-- 02589DAA2C89F0490093940D /* Persistence */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Persistence; +-- }; +-- 02A15D8B2C88D763001A4237 /* Configuration */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Configuration; +-- }; +-- 02A15D8D2C88D76A001A4237 /* Persistence */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Persistence; +-- }; +-- 02A15D8F2C88D773001A4237 /* Persistence */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Persistence; +-- }; +-- 02A15D912C88D789001A4237 /* Configuration */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Configuration; +-- }; +-- 02A15D932C88D78F001A4237 /* Persistence */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Persistence; +-- }; +-- 02A15D952C88D797001A4237 /* Configuration */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Configuration; +-- }; +-- 02A15D972C88D79D001A4237 /* Persistence */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Persistence; +-- }; +-- 08D4923DC968236E22E373E2 /* Crashes */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = FAE06B199CA1F209B55B34E9 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Crashes; +-- }; +-- 1E950E3E2912A10D0051A99B /* ContentBlocking */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = ContentBlocking; +-- }; +-- 1E950E402912A10D0051A99B /* PrivacyDashboard */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = PrivacyDashboard; +-- }; +-- 1E950E422912A10D0051A99B /* UserScript */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = UserScript; +-- }; +-- 1EA7B8D22B7E078C000330A4 /* SubscriptionUI */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = SubscriptionUI; +-- }; +-- 1EA7B8D42B7E078C000330A4 /* Subscription */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Subscription; +-- }; +-- 1EB028322C91C754005343F6 /* Common */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Common; +-- }; +-- 1EB028342C91C75A005343F6 /* Common */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Common; +-- }; +-- 312978892B64131200B67619 /* DataBrokerProtection */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = DataBrokerProtection; +-- }; +-- 315A023E2B6421AE00BFA577 /* Networking */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Networking; +-- }; +-- 31A3A4E22B0C115F0021063C /* DataBrokerProtection */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = DataBrokerProtection; +-- }; +-- 3706FA71293F65D500E42796 /* BrowserServicesKit */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = BrowserServicesKit; +-- }; +-- 3706FA76293F65D500E42796 /* ContentBlocking */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = ContentBlocking; +-- }; +-- 3706FA77293F65D500E42796 /* PrivacyDashboard */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = PrivacyDashboard; +-- }; +-- 3706FA78293F65D500E42796 /* UserScript */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = UserScript; +-- }; +-- 3706FDD6293F661700E42796 /* OHHTTPStubs */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 3706FDD7293F661700E42796 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; +-- productName = OHHTTPStubs; +-- }; +-- 3706FDD8293F661700E42796 /* OHHTTPStubsSwift */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 3706FDD7293F661700E42796 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; +-- productName = OHHTTPStubsSwift; +-- }; +-- 371209222C232E66003ADF3D /* RemoteMessaging */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = RemoteMessaging; +-- }; +-- 371209242C232E6C003ADF3D /* RemoteMessaging */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = RemoteMessaging; +-- }; +-- 371D00E029D8509400EC8598 /* OpenSSL */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 371D00DF29D8509400EC8598 /* XCRemoteSwiftPackageReference "OpenSSL-XCFramework" */; +-- productName = OpenSSL; +-- }; +-- 3722177F2B3337FE00B8E9C2 /* TestUtils */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = TestUtils; +-- }; +-- 372217812B33380700B8E9C2 /* TestUtils */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = TestUtils; +-- }; +-- 37269EFA2B332F9E005E8E46 /* Common */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Common; +-- }; +-- 37269EFC2B332FAC005E8E46 /* Common */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Common; +-- }; +-- 37269EFE2B332FBB005E8E46 /* Common */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Common; +-- }; +-- 37269F002B332FC8005E8E46 /* Common */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Common; +-- }; +-- 37269F042B3332C2005E8E46 /* Common */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Common; +-- }; +-- 3739326429AE4B39009346AE /* DDGSync */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = DDGSync; +-- }; +-- 3739326629AE4B42009346AE /* DDGSync */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = DDGSync; +-- }; +-- 373FB4B22B4D6C4B004C88D6 /* PreferencesViews */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = PreferencesViews; +-- }; +-- 378F44E329B4BDE900899924 /* SwiftUIExtensions */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = SwiftUIExtensions; +-- }; +-- 378F44E529B4BDEE00899924 /* SwiftUIExtensions */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = SwiftUIExtensions; +-- }; +-- 37A5E2EF298AA1B20047046B /* Persistence */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Persistence; +-- }; +-- 37BA812C29B3CD690053F1A3 /* SyncUI */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = SyncUI; +-- }; +-- 37BA812E29B3CD6E0053F1A3 /* SyncUI */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = SyncUI; +-- }; +-- 37DB56EC2C3B314F0093D4DC /* BrowserServicesKit */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = BrowserServicesKit; +-- }; +-- 37DF000429F9C056002B7D3E /* SyncDataProviders */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = SyncDataProviders; +-- }; +-- 37DF000629F9C061002B7D3E /* SyncDataProviders */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = SyncDataProviders; +-- }; +-- 37F44A5E298C17830025E7FE /* Navigation */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Navigation; +-- }; +-- 4B2D062B2A11C0E100DE1F49 /* Networking */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Networking; +-- }; +-- 4B2D067E2A1334D700DE1F49 /* NetworkProtectionUI */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionUI; +-- }; +-- 4B41EDAA2B1544B2001EEDF4 /* LoginItems */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = LoginItems; +-- }; +-- 4B4BEC492A11B627001D9AC5 /* NetworkProtection */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtection; +-- }; +-- 4B4D60522A0B29CB00BCD287 /* NetworkProtection */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtection; +-- }; +-- 4B4D60AE2A0C837F00BCD287 /* Networking */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Networking; +-- }; +-- 4B4D60B02A0C83B900BCD287 /* NetworkProtectionUI */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionUI; +-- }; +-- 4B5235442C7BB14D00AFAF64 /* WireGuard */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 4B5235432C7BB14D00AFAF64 /* XCRemoteSwiftPackageReference "wireguard-apple" */; +-- productName = WireGuard; +-- }; +-- 4B5235462C7BB15700AFAF64 /* WireGuard */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 4B5235432C7BB14D00AFAF64 /* XCRemoteSwiftPackageReference "wireguard-apple" */; +-- productName = WireGuard; +-- }; +-- 4B5F14FB2A15291D0060320F /* InputFilesChecker */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = "plugin:InputFilesChecker"; +-- }; +-- 4B5F14FD2A1529230060320F /* InputFilesChecker */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = "plugin:InputFilesChecker"; +-- }; +-- 4BA7C4DC2B3F64E500AFE511 /* LoginItems */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = LoginItems; +-- }; +-- 4BCBE4572BA7E17800FC75A1 /* SubscriptionUI */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = SubscriptionUI; +-- }; +-- 4BCBE4592BA7E17800FC75A1 /* Subscription */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Subscription; +-- }; +-- 4BCBE45B2BA7E18500FC75A1 /* Subscription */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Subscription; +-- }; +-- 4BF97AD02B43C43F00EB4240 /* NetworkProtectionIPC */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionIPC; +-- }; +-- 4BF97AD22B43C43F00EB4240 /* NetworkProtectionUI */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionUI; +-- }; +-- 4BF97AD42B43C43F00EB4240 /* NetworkProtection */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = NetworkProtection; +-- }; +-- 537FC71EA5115A983FAF3170 /* Crashes */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 4311906792B7676CE9535D76 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Crashes; +-- }; +-- 560EB9342C7897370080DBC8 /* Onboarding */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Onboarding; +-- }; +-- 560EB9362C78974C0080DBC8 /* Onboarding */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Onboarding; +-- }; +-- 567A23C02C7F71570010F66C /* SpecialErrorPages */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = SpecialErrorPages; +-- }; +-- 567A23C42C7F75BB0010F66C /* SpecialErrorPages */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = SpecialErrorPages; +-- }; +-- 7B00997C2B6508B700FE7C31 /* NetworkProtectionProxy */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionProxy; +-- }; +-- 7B00997E2B6508C200FE7C31 /* NetworkProtectionProxy */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionProxy; +-- }; +-- 7B1459562B7D43E500047F2C /* NetworkProtectionProxy */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionProxy; +-- }; +-- 7B2366832C09FAC2002D393F /* VPNAppLauncher */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = VPNAppLauncher; +-- }; +-- 7B2366852C09FACD002D393F /* VPNAppLauncher */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = VPNAppLauncher; +-- }; +-- 7B2366872C09FADA002D393F /* VPNAppLauncher */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = VPNAppLauncher; +-- }; +-- 7B2366892C09FAE8002D393F /* VPNAppLauncher */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = VPNAppLauncher; +-- }; +-- 7B23668B2C09FAF1002D393F /* VPNAppLauncher */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = VPNAppLauncher; +-- }; +-- 7B23668D2C09FAFA002D393F /* VPNAppLauncher */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = VPNAppLauncher; +-- }; +-- 7B25856D2BA2F2ED00D49F79 /* NetworkProtectionUI */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionUI; +-- }; +-- 7B31FD8B2AD125620086AA24 /* NetworkProtectionIPC */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionIPC; +-- }; +-- 7B37C7A42BAA32A50062546A /* Subscription */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Subscription; +-- }; +-- 7B624F162BA25C1F00A6C544 /* NetworkProtectionUI */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionUI; +-- }; +-- 7B7DFB212B7E7473009EA1A3 /* Networking */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Networking; +-- }; +-- 7B8594182B5B26230007EB3E /* UDSHelper */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = UDSHelper; +-- }; +-- 7B97CD582B7E0B57004FEF43 /* NetworkProtectionProxy */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionProxy; +-- }; +-- 7B97CD5A2B7E0B85004FEF43 /* Common */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Common; +-- }; +-- 7BA076BA2B65D61400D7FB72 /* NetworkProtectionProxy */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionProxy; +-- }; +-- 7BA59C9A2AE18B49009A97B1 /* SystemExtensionManager */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = SystemExtensionManager; +-- }; +-- 7BA7CC5E2AD1210C0042E5CE /* Networking */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Networking; +-- }; +-- 7BA7CC602AD1211C0042E5CE /* Networking */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Networking; +-- }; +-- 7BBE2B7A2B61663C00697445 /* NetworkProtectionProxy */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionProxy; +-- }; +-- 7BEC182E2AD5D8DC00D30536 /* SystemExtensionManager */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = SystemExtensionManager; +-- }; +-- 7BEEA5112AD1235B00A9E72B /* NetworkProtectionIPC */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionIPC; +-- }; +-- 7BEEA5132AD1236300A9E72B /* NetworkProtectionIPC */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionIPC; +-- }; +-- 7BEEA5152AD1236E00A9E72B /* NetworkProtectionUI */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = NetworkProtectionUI; +-- }; +-- 85D44B852BA08D29001B4AB5 /* Suggestions */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Suggestions; +-- }; +-- 85D44B872BA08D30001B4AB5 /* Suggestions */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Suggestions; +-- }; +-- 85E2BBCD2B8F534000DBEC7A /* History */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = History; +-- }; +-- 85E2BBCF2B8F534A00DBEC7A /* History */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = History; +-- }; +-- 9807F644278CA16F00E1547B /* BrowserServicesKit */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = BrowserServicesKit; +-- }; +-- 984FD3BE299ACF35007334DD /* Bookmarks */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Bookmarks; +-- }; +-- 987799EC299998B1005D8EB6 /* Bookmarks */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Bookmarks; +-- }; +-- 98A50963294B691800D10880 /* Persistence */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Persistence; +-- }; +-- 9D9AE8F82AAA3AD00026E7DC /* DataBrokerProtection */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = DataBrokerProtection; +-- }; +-- 9D9AE8FA2AAA3AD90026E7DC /* DataBrokerProtection */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = DataBrokerProtection; +-- }; +-- 9D9DE5722C63AA0700D20B15 /* AppKitExtensions */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = AppKitExtensions; +-- }; +-- 9D9DE5742C63AA0C00D20B15 /* AppKitExtensions */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = AppKitExtensions; +-- }; +-- 9D9DE5762C63AA1600D20B15 /* AppKitExtensions */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = AppKitExtensions; +-- }; +-- 9D9DE5782C63AA1A00D20B15 /* AppKitExtensions */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = AppKitExtensions; +-- }; +-- 9D9DE57A2C63AA1F00D20B15 /* AppKitExtensions */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = AppKitExtensions; +-- }; +-- 9D9DE57C2C63AA2400D20B15 /* AppKitExtensions */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = AppKitExtensions; +-- }; +-- 9D9DE57E2C63B64F00D20B15 /* AppKitExtensions */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = AppKitExtensions; +-- }; +-- 9D9DE5802C63BA0B00D20B15 /* AppKitExtensions */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = AppKitExtensions; +-- }; +-- 9D9DE5822C63BE9600D20B15 /* AppKitExtensions */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = AppKitExtensions; +-- }; +-- 9DC70B192AA1FA5B005A844B /* LoginItems */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = LoginItems; +-- }; +-- 9DEF97E02B06C4EE00764F03 /* Networking */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Networking; +-- }; +-- 9FF521452BAA908500B9819B /* Lottie */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; +-- productName = Lottie; +-- }; +-- 9FF521472BAA909C00B9819B /* Lottie */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; +-- productName = Lottie; +-- }; +-- AA06B6B62672AF8100F541C5 /* Sparkle */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = AA06B6B52672AF8100F541C5 /* XCRemoteSwiftPackageReference "Sparkle" */; +-- productName = Sparkle; +-- }; +-- B65CD8CA2B316DF100A595BB /* SnapshotTesting */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; +-- productName = SnapshotTesting; +-- }; +-- B65CD8CC2B316DFC00A595BB /* SnapshotTesting */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; +-- productName = SnapshotTesting; +-- }; +-- B65CD8CE2B316E0200A595BB /* SnapshotTesting */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; +-- productName = SnapshotTesting; +-- }; +-- B65CD8D02B316E0C00A595BB /* SnapshotTesting */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; +-- productName = SnapshotTesting; +-- }; +-- B65CD8D22B316E1700A595BB /* SnapshotTesting */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; +-- productName = SnapshotTesting; +-- }; +-- B6AE39F229374AEC00C37AA4 /* OHHTTPStubs */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; +-- productName = OHHTTPStubs; +-- }; +-- B6AE39F429374AEC00C37AA4 /* OHHTTPStubsSwift */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; +-- productName = OHHTTPStubsSwift; +-- }; +-- B6B77BE7297973D4001E68A1 /* Navigation */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Navigation; +-- }; +-- B6DA44162616C13800DD1EC2 /* OHHTTPStubs */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; +-- productName = OHHTTPStubs; +-- }; +-- B6DA44182616C13800DD1EC2 /* OHHTTPStubsSwift */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; +-- productName = OHHTTPStubsSwift; +-- }; +-- B6E6BA072BA1FE24008AA7E1 /* Common */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Common; +-- }; +- B6EC37F829B5DAD7001ACE79 /* Swifter */ = { +- isa = XCSwiftPackageProductDependency; +- package = B6EC37F529B5DAAC001ACE79 /* XCRemoteSwiftPackageReference "swifter" */; +- productName = Swifter; +- }; +-- B6EC37FE29B8D915001ACE79 /* Configuration */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Configuration; +-- }; +-- BDADBDC82BD2BC2200421B9B /* Lottie */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; +-- productName = Lottie; +-- }; +-- BDADBDCA2BD2BC2800421B9B /* Lottie */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; +-- productName = Lottie; +-- }; +-- C18BF9CB2C73678500ED6B8A /* Freemium */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = Freemium; +-- }; +-- C18BF9CD2C73678C00ED6B8A /* Freemium */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = Freemium; +-- }; +-- C18BF9CF2C736C9100ED6B8A /* Freemium */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = Freemium; +-- }; +-- C18BF9D12C736C9700ED6B8A /* Freemium */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = Freemium; +-- }; +-- CBC83E3529B63D380008E19C /* Configuration */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Configuration; +-- }; +-- CD34F0BB2C885D65006826BE /* PhishingDetection */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = PhishingDetection; +-- }; +-- CD34F0C32C8869FF006826BE /* PhishingDetection */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = PhishingDetection; +-- }; +-- D6BC8AC52C5A95AA0025375B /* DuckPlayer */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = DuckPlayer; +-- }; +-- D6BC8AC72C5A95B10025375B /* DuckPlayer */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = DuckPlayer; +-- }; +-- DC3F73D49B2D44464AFEFCD8 /* Subscription */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 3FFD51CF7C19ACBDB9687474 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Subscription; +-- }; +-- EE02D41F2BB460C000DBE6B3 /* BrowserServicesKit */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = BrowserServicesKit; +-- }; +-- EE2F9C5A2B90F2FF00D45FC9 /* Subscription */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Subscription; +-- }; +-- EE7295E22A545B9A008C0991 /* NetworkProtection */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = NetworkProtection; +-- }; +-- EE7295E62A545BBB008C0991 /* NetworkProtection */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = NetworkProtection; +-- }; +-- EE7295E82A545BC4008C0991 /* NetworkProtection */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = NetworkProtection; +-- }; +-- EE7295EC2A545C0A008C0991 /* NetworkProtection */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = NetworkProtection; +-- }; +-- EE7295EE2A545C12008C0991 /* NetworkProtection */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = NetworkProtection; +-- }; +-- F116A7C22BD1924B00F3FCF7 /* PixelKitTestingUtilities */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = PixelKitTestingUtilities; +-- }; +-- F116A7C62BD1925500F3FCF7 /* PixelKitTestingUtilities */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = PixelKitTestingUtilities; +-- }; +-- F116A7C82BD1929000F3FCF7 /* PixelKitTestingUtilities */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = PixelKitTestingUtilities; +-- }; +-- F198C7112BD18A28000BF24D /* PixelKit */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = PixelKit; +-- }; +-- F198C7132BD18A30000BF24D /* PixelKit */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = PixelKit; +-- }; +-- F198C7152BD18A44000BF24D /* PixelKit */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = PixelKit; +-- }; +-- F198C7172BD18A4C000BF24D /* PixelKit */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = PixelKit; +-- }; +-- F198C7192BD18A5B000BF24D /* PixelKit */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = PixelKit; +-- }; +-- F198C71B2BD18A61000BF24D /* PixelKit */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = PixelKit; +-- }; +-- F198C71D2BD18D88000BF24D /* SwiftLintTool */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = B6F997B92B8F352500476735 /* XCRemoteSwiftPackageReference "apple-toolbox" */; +-- productName = SwiftLintTool; +-- }; +-- F198C71F2BD18D92000BF24D /* SwiftLintTool */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = B6F997B92B8F352500476735 /* XCRemoteSwiftPackageReference "apple-toolbox" */; +-- productName = SwiftLintTool; +-- }; +-- F1D0428D2BFB9F9C00A31506 /* Subscription */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Subscription; +-- }; +-- F1D0428F2BFB9FA300A31506 /* Subscription */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = Subscription; +-- }; +-- F1D43AF22B98E47800BAB743 /* BareBonesBrowserKit */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = F1D43AF12B98E47800BAB743 /* XCRemoteSwiftPackageReference "BareBonesBrowser" */; +-- productName = BareBonesBrowserKit; +-- }; +-- F1D43AF42B98E48900BAB743 /* BareBonesBrowserKit */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = F1D43AF12B98E47800BAB743 /* XCRemoteSwiftPackageReference "BareBonesBrowser" */; +-- productName = BareBonesBrowserKit; +-- }; +-- F1DA51A42BF6114200CF29FA /* SubscriptionTestingUtilities */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = SubscriptionTestingUtilities; +-- }; +-- F1DA51A82BF6114C00CF29FA /* SubscriptionTestingUtilities */ = { +-- isa = XCSwiftPackageProductDependency; +-- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; +-- productName = SubscriptionTestingUtilities; +-- }; +-- F1DF95E62BD188B60045E591 /* LoginItems */ = { +-- isa = XCSwiftPackageProductDependency; +-- productName = LoginItems; +-- }; +- /* End XCSwiftPackageProductDependency section */ +- +- /* Begin XCVersionGroup section */ From 6af0614c409464f2ce2a2b4012e1261434624b6d Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Thu, 24 Oct 2024 11:31:41 -0300 Subject: [PATCH 25/90] Force apply the patch --- .github/workflows/ui_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index c9b47cb0b7..dc0d44fa15 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -110,7 +110,7 @@ jobs: run: | rm -rf LocalPackages rm -rf DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved - git apply dependencies.patch + git apply --reject dependencies.patch # sed -i '' '/\/\* Begin XCSwiftPackageProductDependency section \*\//,/\/\* End XCSwiftPackageProductDependency section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj # sed -i '' '/\/\* Begin XCRemoteSwiftPackageReference section \*\//,/\/\* End XCRemoteSwiftPackageReference section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj From 73a10716262ab119fec32ef3fce7724f1234b3c5 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Thu, 24 Oct 2024 11:48:50 -0300 Subject: [PATCH 26/90] Revert force apply patch --- .github/workflows/ui_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index dc0d44fa15..c9b47cb0b7 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -110,7 +110,7 @@ jobs: run: | rm -rf LocalPackages rm -rf DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved - git apply --reject dependencies.patch + git apply dependencies.patch # sed -i '' '/\/\* Begin XCSwiftPackageProductDependency section \*\//,/\/\* End XCSwiftPackageProductDependency section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj # sed -i '' '/\/\* Begin XCRemoteSwiftPackageReference section \*\//,/\/\* End XCRemoteSwiftPackageReference section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj From f8cfabc7ff4938c014c305e4bcd5c8f0aa9f3ba9 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Thu, 24 Oct 2024 11:53:12 -0300 Subject: [PATCH 27/90] Update dependencies patch --- dependencies.patch | 1327 ++++++++------------------------------------ 1 file changed, 241 insertions(+), 1086 deletions(-) diff --git a/dependencies.patch b/dependencies.patch index dd7d3c0511..926cb348ec 100644 --- a/dependencies.patch +++ b/dependencies.patch @@ -1,130 +1,256 @@ diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj -index 122ae513a..7b0a80254 100644 +index 122ae513a..e5ba4e3f7 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj -@@ -14309,94 +14309,6 @@ +@@ -14086,225 +14086,13 @@ + /* End XCBuildConfiguration section */ + + /* Begin XCConfigurationList section */ +- 3706FCFA293F65D500E42796 /* Build configuration list for PBXNativeTarget "DuckDuckGo Privacy Browser App Store" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- 3706FCFB293F65D500E42796 /* Debug */, +- 3706FCFE293F65D500E42796 /* CI */, +- 3706FCFF293F65D500E42796 /* Release */, +- 3706FD02293F65D500E42796 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- 3706FE92293F661700E42796 /* Build configuration list for PBXNativeTarget "Unit Tests App Store" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- 3706FE93293F661700E42796 /* Debug */, +- 3706FE94293F661700E42796 /* CI */, +- 3706FE95293F661700E42796 /* Release */, +- 3706FE97293F661700E42796 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- 3706FEAB293F662100E42796 /* Build configuration list for PBXNativeTarget "Integration Tests App Store" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- 3706FEAC293F662100E42796 /* Debug */, +- 3706FEAD293F662100E42796 /* CI */, +- 3706FEAE293F662100E42796 /* Release */, +- 3706FEB0293F662100E42796 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- 376113CF2B29CD5B00E794BB /* Build configuration list for PBXNativeTarget "SyncE2EUITests App Store" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- 376113D02B29CD5B00E794BB /* Debug */, +- 376113D12B29CD5B00E794BB /* CI */, +- 376113D22B29CD5B00E794BB /* Release */, +- 376113D32B29CD5B00E794BB /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- 4B1AD8A625FC27E200261379 /* Build configuration list for PBXNativeTarget "Integration Tests" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- 4B1AD8A425FC27E200261379 /* Debug */, +- 4B1AD8B325FC322600261379 /* CI */, +- 4B1AD8A525FC27E200261379 /* Release */, +- AAE814AE2716DFE8009D3531 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- 4B2537662A11BE7700610219 /* Build configuration list for PBXNativeTarget "NetworkProtectionSystemExtension" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- 4B2537672A11BE7700610219 /* Debug */, +- 4B2537682A11BE7700610219 /* CI */, +- 4B2537692A11BE7700610219 /* Release */, +- 4B25376A2A11BE7700610219 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- 4B2D06452A11CFBE00DE1F49 /* Build configuration list for PBXNativeTarget "DuckDuckGoVPN" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- 4B2D06462A11CFBE00DE1F49 /* Debug */, +- 4B2D06472A11CFBE00DE1F49 /* CI */, +- 4B2D06482A11CFBE00DE1F49 /* Release */, +- 4B2D06492A11CFBE00DE1F49 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- 4B2D06752A13318600DE1F49 /* Build configuration list for PBXNativeTarget "DuckDuckGoVPNAppStore" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- 4B2D06762A13318600DE1F49 /* Debug */, +- 4B2D06772A13318600DE1F49 /* CI */, +- 4B2D06782A13318600DE1F49 /* Release */, +- 4B2D06792A13318600DE1F49 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- 4B4BEC2C2A11B4E3001D9AC5 /* Build configuration list for PBXNativeTarget "DuckDuckGoNotifications" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- 4B4BEC2D2A11B4E3001D9AC5 /* Debug */, +- 4B4BEC2E2A11B4E3001D9AC5 /* CI */, +- 4B4BEC2F2A11B4E3001D9AC5 /* Release */, +- 4B4BEC302A11B4E3001D9AC5 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- 4B4D604D2A0B290300BCD287 /* Build configuration list for PBXNativeTarget "NetworkProtectionAppExtension" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- 4B4D60492A0B290300BCD287 /* Debug */, +- 4B4D604A2A0B290300BCD287 /* CI */, +- 4B4D604B2A0B290300BCD287 /* Release */, +- 4B4D604C2A0B290300BCD287 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- 565E46E52B2725DD0013AC2A /* Build configuration list for PBXNativeTarget "SyncE2EUITests" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- 565E46E62B2725DD0013AC2A /* Debug */, +- 565E46E72B2725DD0013AC2A /* CI */, +- 565E46E82B2725DD0013AC2A /* Release */, +- 565E46E92B2725DD0013AC2A /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- 7B4CE8E526F02108009134B1 /* Build configuration list for PBXNativeTarget "UI Tests" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- 7B4CE8E126F02108009134B1 /* Debug */, +- 7B4CE8E226F02108009134B1 /* CI */, +- 7B4CE8E326F02108009134B1 /* Release */, +- AAE814AF2716DFE8009D3531 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- 7BDA36F42B7E037200AD5388 /* Build configuration list for PBXNativeTarget "VPNProxyExtension" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- 7BDA36F02B7E037200AD5388 /* Debug */, +- 7BDA36F12B7E037200AD5388 /* CI */, +- 7BDA36F22B7E037200AD5388 /* Release */, +- 7BDA36F32B7E037200AD5388 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- 9D9AE8CC2AAA39A70026E7DC /* Build configuration list for PBXNativeTarget "DuckDuckGoDBPBackgroundAgent" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- 9D9AE8CD2AAA39A70026E7DC /* Debug */, +- 9D9AE8CE2AAA39A70026E7DC /* CI */, +- 9D9AE8CF2AAA39A70026E7DC /* Release */, +- 9D9AE8D02AAA39A70026E7DC /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- 9D9AE8ED2AAA39D30026E7DC /* Build configuration list for PBXNativeTarget "DuckDuckGoDBPBackgroundAgentAppStore" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- 9D9AE8EE2AAA39D30026E7DC /* Debug */, +- 9D9AE8EF2AAA39D30026E7DC /* CI */, +- 9D9AE8F02AAA39D30026E7DC /* Release */, +- 9D9AE8F12AAA39D30026E7DC /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- AA585D79248FD31100E9A3E2 /* Build configuration list for PBXProject "DuckDuckGo" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- AA585DA2248FD31500E9A3E2 /* Debug */, +- 4B1AD8B025FC322600261379 /* CI */, +- AA585DA3248FD31500E9A3E2 /* Release */, +- AAE814AB2716DFE8009D3531 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- AA585DA4248FD31500E9A3E2 /* Build configuration list for PBXNativeTarget "DuckDuckGo Privacy Browser" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- AA585DA5248FD31500E9A3E2 /* Debug */, +- 4B1AD8B125FC322600261379 /* CI */, +- AA585DA6248FD31500E9A3E2 /* Release */, +- AAE814AC2716DFE8009D3531 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- AA585DA7248FD31500E9A3E2 /* Build configuration list for PBXNativeTarget "Unit Tests" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- AA585DA8248FD31500E9A3E2 /* Debug */, +- 4B1AD8B225FC322600261379 /* CI */, +- AA585DA9248FD31500E9A3E2 /* Release */, +- AAE814AD2716DFE8009D3531 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- B6E6B9FF2BA1FD91008AA7E1 /* Build configuration list for PBXNativeTarget "sandbox-test-tool" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- B6E6BA002BA1FD91008AA7E1 /* Debug */, +- B6E6BA012BA1FD91008AA7E1 /* CI */, +- B6E6BA022BA1FD91008AA7E1 /* Release */, +- B6E6BA032BA1FD91008AA7E1 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; +- }; +- B6EC37EC29B5DA2A001ACE79 /* Build configuration list for PBXNativeTarget "tests-server" */ = { +- isa = XCConfigurationList; +- buildConfigurations = ( +- B6EC37ED29B5DA2A001ACE79 /* Debug */, +- B6EC37EE29B5DA2A001ACE79 /* CI */, +- B6EC37EF29B5DA2A001ACE79 /* Release */, +- B6EC37F029B5DA2A001ACE79 /* Review */, +- ); +- defaultConfigurationIsVisible = 0; +- defaultConfigurationName = Release; ++ B6EC37F529B5DAAC001ACE79 /* XCRemoteSwiftPackageReference "swifter" */ = { ++ isa = XCRemoteSwiftPackageReference; ++ repositoryURL = "https://github.com/httpswift/swifter.git"; ++ requirement = { ++ kind = exactVersion; ++ version = 1.5.0; ++ }; + }; /* End XCConfigurationList section */ - /* Begin XCRemoteSwiftPackageReference section */ -- 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { -- isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; -- requirement = { -- kind = revision; -- revision = 4f3695b5b598593ce3c44fe810637e3406206c19; -- }; -- }; -- 3706FDD7293F661700E42796 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */ = { -- isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/AliSoftware/OHHTTPStubs.git"; -- requirement = { -- kind = exactVersion; -- version = 9.1.0; -- }; -- }; -- 371D00DF29D8509400EC8598 /* XCRemoteSwiftPackageReference "OpenSSL-XCFramework" */ = { -- isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/duckduckgo/OpenSSL-XCFramework"; -- requirement = { -- kind = exactVersion; -- version = 3.1.5004; -- }; -- }; -- 3FFD51CF7C19ACBDB9687474 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { -- isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; -- requirement = { -- kind = revision; -- revision = a968dd3d8d5ff95b6eae65889c1a365174a53a69; -- }; -- }; -- 4311906792B7676CE9535D76 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { -- isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; -- requirement = { -- kind = revision; -- revision = c06709ba8a586f6a40190bacaaaaa96b2d55e540; -- }; -- }; -- 4B5235432C7BB14D00AFAF64 /* XCRemoteSwiftPackageReference "wireguard-apple" */ = { -- isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/duckduckgo/wireguard-apple"; -- requirement = { -- kind = exactVersion; -- version = 1.1.3; -- }; -- }; -- 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { -- isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; -- requirement = { -- kind = revision; -- revision = 748463efbe18152dfcacba297b5b8735f37bdfc2; -- }; -- }; -- 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */ = { -- isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/airbnb/lottie-spm.git"; -- requirement = { -- kind = exactVersion; -- version = 4.4.3; -- }; -- }; -- AA06B6B52672AF8100F541C5 /* XCRemoteSwiftPackageReference "Sparkle" */ = { -- isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/sparkle-project/Sparkle.git"; -- requirement = { -- kind = exactVersion; -- version = 2.6.3; -- }; -- }; -- B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */ = { -- isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/pointfreeco/swift-snapshot-testing"; -- requirement = { -- kind = exactVersion; -- version = 1.15.4; -- }; -- }; -- B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */ = { -- isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/AliSoftware/OHHTTPStubs.git"; -- requirement = { -- kind = exactVersion; -- version = 9.1.0; -- }; -- }; - B6EC37F529B5DAAC001ACE79 /* XCRemoteSwiftPackageReference "swifter" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/httpswift/swifter.git"; -@@ -14405,876 +14317,14 @@ - version = 1.5.0; +@@ -14397,14 +14185,6 @@ + version = 9.1.0; }; }; -- B6F997B92B8F352500476735 /* XCRemoteSwiftPackageReference "apple-toolbox" */ = { -- isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/duckduckgo/apple-toolbox.git"; -- requirement = { -- kind = exactVersion; -- version = 3.1.2; -- }; -- }; -- F1D43AF12B98E47800BAB743 /* XCRemoteSwiftPackageReference "BareBonesBrowser" */ = { +- B6EC37F529B5DAAC001ACE79 /* XCRemoteSwiftPackageReference "swifter" */ = { - isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/duckduckgo/BareBonesBrowser.git"; +- repositoryURL = "https://github.com/httpswift/swifter.git"; - requirement = { - kind = exactVersion; -- version = 0.1.0; -- }; -- }; -- FAE06B199CA1F209B55B34E9 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { -- isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; -- requirement = { -- kind = revision; -- revision = a968dd3d8d5ff95b6eae65889c1a365174a53a69; +- version = 1.5.0; - }; - }; + B6F997B92B8F352500476735 /* XCRemoteSwiftPackageReference "apple-toolbox" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/duckduckgo/apple-toolbox.git"; +@@ -14432,849 +14212,11 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ @@ -974,974 +1100,3 @@ index 122ae513a..7b0a80254 100644 /* End XCSwiftPackageProductDependency section */ /* Begin XCVersionGroup section */ -diff --git a/dependencies.patch b/dependencies.patch -index 07b2c3e28..50b671cb9 100644 ---- a/dependencies.patch -+++ b/dependencies.patch -@@ -1,966 +0,0 @@ --diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj --index 723abdcc5..300c66c31 100644 ----- a/DuckDuckGo.xcodeproj/project.pbxproj --+++ b/DuckDuckGo.xcodeproj/project.pbxproj --@@ -14265,94 +14265,6 @@ -- /* End XCConfigurationList section */ -- -- /* Begin XCRemoteSwiftPackageReference section */ --- 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { --- isa = XCRemoteSwiftPackageReference; --- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; --- requirement = { --- kind = revision; --- revision = 4f3695b5b598593ce3c44fe810637e3406206c19; --- }; --- }; --- 3706FDD7293F661700E42796 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */ = { --- isa = XCRemoteSwiftPackageReference; --- repositoryURL = "https://github.com/AliSoftware/OHHTTPStubs.git"; --- requirement = { --- kind = exactVersion; --- version = 9.1.0; --- }; --- }; --- 371D00DF29D8509400EC8598 /* XCRemoteSwiftPackageReference "OpenSSL-XCFramework" */ = { --- isa = XCRemoteSwiftPackageReference; --- repositoryURL = "https://github.com/duckduckgo/OpenSSL-XCFramework"; --- requirement = { --- kind = exactVersion; --- version = 3.1.5004; --- }; --- }; --- 3FFD51CF7C19ACBDB9687474 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { --- isa = XCRemoteSwiftPackageReference; --- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; --- requirement = { --- kind = revision; --- revision = a968dd3d8d5ff95b6eae65889c1a365174a53a69; --- }; --- }; --- 4311906792B7676CE9535D76 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { --- isa = XCRemoteSwiftPackageReference; --- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; --- requirement = { --- kind = revision; --- revision = c06709ba8a586f6a40190bacaaaaa96b2d55e540; --- }; --- }; --- 4B5235432C7BB14D00AFAF64 /* XCRemoteSwiftPackageReference "wireguard-apple" */ = { --- isa = XCRemoteSwiftPackageReference; --- repositoryURL = "https://github.com/duckduckgo/wireguard-apple"; --- requirement = { --- kind = exactVersion; --- version = 1.1.3; --- }; --- }; --- 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { --- isa = XCRemoteSwiftPackageReference; --- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; --- requirement = { --- branch = "dominik/xcode-16"; --- kind = branch; --- }; --- }; --- 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */ = { --- isa = XCRemoteSwiftPackageReference; --- repositoryURL = "https://github.com/airbnb/lottie-spm.git"; --- requirement = { --- kind = exactVersion; --- version = 4.4.3; --- }; --- }; --- AA06B6B52672AF8100F541C5 /* XCRemoteSwiftPackageReference "Sparkle" */ = { --- isa = XCRemoteSwiftPackageReference; --- repositoryURL = "https://github.com/sparkle-project/Sparkle.git"; --- requirement = { --- kind = exactVersion; --- version = 2.6.3; --- }; --- }; --- B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */ = { --- isa = XCRemoteSwiftPackageReference; --- repositoryURL = "https://github.com/pointfreeco/swift-snapshot-testing"; --- requirement = { --- kind = exactVersion; --- version = 1.15.4; --- }; --- }; --- B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */ = { --- isa = XCRemoteSwiftPackageReference; --- repositoryURL = "https://github.com/AliSoftware/OHHTTPStubs.git"; --- requirement = { --- kind = exactVersion; --- version = 9.1.0; --- }; --- }; -- B6EC37F529B5DAAC001ACE79 /* XCRemoteSwiftPackageReference "swifter" */ = { -- isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/httpswift/swifter.git"; --@@ -14361,866 +14273,14 @@ -- version = 1.5.0; -- }; -- }; --- B6F997B92B8F352500476735 /* XCRemoteSwiftPackageReference "apple-toolbox" */ = { --- isa = XCRemoteSwiftPackageReference; --- repositoryURL = "https://github.com/duckduckgo/apple-toolbox.git"; --- requirement = { --- kind = exactVersion; --- version = 3.1.2; --- }; --- }; --- F1D43AF12B98E47800BAB743 /* XCRemoteSwiftPackageReference "BareBonesBrowser" */ = { --- isa = XCRemoteSwiftPackageReference; --- repositoryURL = "https://github.com/duckduckgo/BareBonesBrowser.git"; --- requirement = { --- kind = exactVersion; --- version = 0.1.0; --- }; --- }; --- FAE06B199CA1F209B55B34E9 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */ = { --- isa = XCRemoteSwiftPackageReference; --- repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; --- requirement = { --- kind = revision; --- revision = a968dd3d8d5ff95b6eae65889c1a365174a53a69; --- }; --- }; -- /* End XCRemoteSwiftPackageReference section */ -- -- /* Begin XCSwiftPackageProductDependency section */ --- 020807B12C6CFF95006F94C4 /* Configuration */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Configuration; --- }; --- 02589D9C2C88E8210093940D /* Configuration */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Configuration; --- }; --- 02589D9E2C88E8270093940D /* Persistence */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Persistence; --- }; --- 02589DA02C88EB570093940D /* Configuration */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Configuration; --- }; --- 02589DA22C88EB5D0093940D /* Persistence */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Persistence; --- }; --- 02589DA42C88ED190093940D /* BrowserServicesKit */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = BrowserServicesKit; --- }; --- 02589DA62C88F8E90093940D /* PixelKit */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = PixelKit; --- }; --- 02589DA82C89F0420093940D /* Configuration */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Configuration; --- }; --- 02589DAA2C89F0490093940D /* Persistence */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Persistence; --- }; --- 02A15D8B2C88D763001A4237 /* Configuration */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Configuration; --- }; --- 02A15D8D2C88D76A001A4237 /* Persistence */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Persistence; --- }; --- 02A15D8F2C88D773001A4237 /* Persistence */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Persistence; --- }; --- 02A15D912C88D789001A4237 /* Configuration */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Configuration; --- }; --- 02A15D932C88D78F001A4237 /* Persistence */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Persistence; --- }; --- 02A15D952C88D797001A4237 /* Configuration */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Configuration; --- }; --- 02A15D972C88D79D001A4237 /* Persistence */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Persistence; --- }; --- 08D4923DC968236E22E373E2 /* Crashes */ = { --- isa = XCSwiftPackageProductDependency; --- package = FAE06B199CA1F209B55B34E9 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Crashes; --- }; --- 1E950E3E2912A10D0051A99B /* ContentBlocking */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = ContentBlocking; --- }; --- 1E950E402912A10D0051A99B /* PrivacyDashboard */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = PrivacyDashboard; --- }; --- 1E950E422912A10D0051A99B /* UserScript */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = UserScript; --- }; --- 1EA7B8D22B7E078C000330A4 /* SubscriptionUI */ = { --- isa = XCSwiftPackageProductDependency; --- productName = SubscriptionUI; --- }; --- 1EA7B8D42B7E078C000330A4 /* Subscription */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Subscription; --- }; --- 1EB028322C91C754005343F6 /* Common */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Common; --- }; --- 1EB028342C91C75A005343F6 /* Common */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Common; --- }; --- 312978892B64131200B67619 /* DataBrokerProtection */ = { --- isa = XCSwiftPackageProductDependency; --- productName = DataBrokerProtection; --- }; --- 315A023E2B6421AE00BFA577 /* Networking */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Networking; --- }; --- 31A3A4E22B0C115F0021063C /* DataBrokerProtection */ = { --- isa = XCSwiftPackageProductDependency; --- productName = DataBrokerProtection; --- }; --- 3706FA71293F65D500E42796 /* BrowserServicesKit */ = { --- isa = XCSwiftPackageProductDependency; --- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = BrowserServicesKit; --- }; --- 3706FA76293F65D500E42796 /* ContentBlocking */ = { --- isa = XCSwiftPackageProductDependency; --- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = ContentBlocking; --- }; --- 3706FA77293F65D500E42796 /* PrivacyDashboard */ = { --- isa = XCSwiftPackageProductDependency; --- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = PrivacyDashboard; --- }; --- 3706FA78293F65D500E42796 /* UserScript */ = { --- isa = XCSwiftPackageProductDependency; --- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = UserScript; --- }; --- 3706FDD6293F661700E42796 /* OHHTTPStubs */ = { --- isa = XCSwiftPackageProductDependency; --- package = 3706FDD7293F661700E42796 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; --- productName = OHHTTPStubs; --- }; --- 3706FDD8293F661700E42796 /* OHHTTPStubsSwift */ = { --- isa = XCSwiftPackageProductDependency; --- package = 3706FDD7293F661700E42796 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; --- productName = OHHTTPStubsSwift; --- }; --- 371209222C232E66003ADF3D /* RemoteMessaging */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = RemoteMessaging; --- }; --- 371209242C232E6C003ADF3D /* RemoteMessaging */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = RemoteMessaging; --- }; --- 371D00E029D8509400EC8598 /* OpenSSL */ = { --- isa = XCSwiftPackageProductDependency; --- package = 371D00DF29D8509400EC8598 /* XCRemoteSwiftPackageReference "OpenSSL-XCFramework" */; --- productName = OpenSSL; --- }; --- 3722177F2B3337FE00B8E9C2 /* TestUtils */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = TestUtils; --- }; --- 372217812B33380700B8E9C2 /* TestUtils */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = TestUtils; --- }; --- 37269EFA2B332F9E005E8E46 /* Common */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Common; --- }; --- 37269EFC2B332FAC005E8E46 /* Common */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Common; --- }; --- 37269EFE2B332FBB005E8E46 /* Common */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Common; --- }; --- 37269F002B332FC8005E8E46 /* Common */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Common; --- }; --- 37269F042B3332C2005E8E46 /* Common */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Common; --- }; --- 3739326429AE4B39009346AE /* DDGSync */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = DDGSync; --- }; --- 3739326629AE4B42009346AE /* DDGSync */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = DDGSync; --- }; --- 373FB4B22B4D6C4B004C88D6 /* PreferencesViews */ = { --- isa = XCSwiftPackageProductDependency; --- productName = PreferencesViews; --- }; --- 378F44E329B4BDE900899924 /* SwiftUIExtensions */ = { --- isa = XCSwiftPackageProductDependency; --- productName = SwiftUIExtensions; --- }; --- 378F44E529B4BDEE00899924 /* SwiftUIExtensions */ = { --- isa = XCSwiftPackageProductDependency; --- productName = SwiftUIExtensions; --- }; --- 37A5E2EF298AA1B20047046B /* Persistence */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Persistence; --- }; --- 37BA812C29B3CD690053F1A3 /* SyncUI */ = { --- isa = XCSwiftPackageProductDependency; --- productName = SyncUI; --- }; --- 37BA812E29B3CD6E0053F1A3 /* SyncUI */ = { --- isa = XCSwiftPackageProductDependency; --- productName = SyncUI; --- }; --- 37DB56EC2C3B314F0093D4DC /* BrowserServicesKit */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = BrowserServicesKit; --- }; --- 37DF000429F9C056002B7D3E /* SyncDataProviders */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = SyncDataProviders; --- }; --- 37DF000629F9C061002B7D3E /* SyncDataProviders */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = SyncDataProviders; --- }; --- 37F44A5E298C17830025E7FE /* Navigation */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Navigation; --- }; --- 4B2D062B2A11C0E100DE1F49 /* Networking */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Networking; --- }; --- 4B2D067E2A1334D700DE1F49 /* NetworkProtectionUI */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionUI; --- }; --- 4B41EDAA2B1544B2001EEDF4 /* LoginItems */ = { --- isa = XCSwiftPackageProductDependency; --- productName = LoginItems; --- }; --- 4B4BEC492A11B627001D9AC5 /* NetworkProtection */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtection; --- }; --- 4B4D60522A0B29CB00BCD287 /* NetworkProtection */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtection; --- }; --- 4B4D60AE2A0C837F00BCD287 /* Networking */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Networking; --- }; --- 4B4D60B02A0C83B900BCD287 /* NetworkProtectionUI */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionUI; --- }; --- 4B5235442C7BB14D00AFAF64 /* WireGuard */ = { --- isa = XCSwiftPackageProductDependency; --- package = 4B5235432C7BB14D00AFAF64 /* XCRemoteSwiftPackageReference "wireguard-apple" */; --- productName = WireGuard; --- }; --- 4B5235462C7BB15700AFAF64 /* WireGuard */ = { --- isa = XCSwiftPackageProductDependency; --- package = 4B5235432C7BB14D00AFAF64 /* XCRemoteSwiftPackageReference "wireguard-apple" */; --- productName = WireGuard; --- }; --- 4B5F14FB2A15291D0060320F /* InputFilesChecker */ = { --- isa = XCSwiftPackageProductDependency; --- productName = "plugin:InputFilesChecker"; --- }; --- 4B5F14FD2A1529230060320F /* InputFilesChecker */ = { --- isa = XCSwiftPackageProductDependency; --- productName = "plugin:InputFilesChecker"; --- }; --- 4BA7C4DC2B3F64E500AFE511 /* LoginItems */ = { --- isa = XCSwiftPackageProductDependency; --- productName = LoginItems; --- }; --- 4BCBE4572BA7E17800FC75A1 /* SubscriptionUI */ = { --- isa = XCSwiftPackageProductDependency; --- productName = SubscriptionUI; --- }; --- 4BCBE4592BA7E17800FC75A1 /* Subscription */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Subscription; --- }; --- 4BCBE45B2BA7E18500FC75A1 /* Subscription */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Subscription; --- }; --- 4BF97AD02B43C43F00EB4240 /* NetworkProtectionIPC */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionIPC; --- }; --- 4BF97AD22B43C43F00EB4240 /* NetworkProtectionUI */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionUI; --- }; --- 4BF97AD42B43C43F00EB4240 /* NetworkProtection */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = NetworkProtection; --- }; --- 537FC71EA5115A983FAF3170 /* Crashes */ = { --- isa = XCSwiftPackageProductDependency; --- package = 4311906792B7676CE9535D76 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Crashes; --- }; --- 560EB9342C7897370080DBC8 /* Onboarding */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Onboarding; --- }; --- 560EB9362C78974C0080DBC8 /* Onboarding */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Onboarding; --- }; --- 567A23C02C7F71570010F66C /* SpecialErrorPages */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = SpecialErrorPages; --- }; --- 567A23C42C7F75BB0010F66C /* SpecialErrorPages */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = SpecialErrorPages; --- }; --- 7B00997C2B6508B700FE7C31 /* NetworkProtectionProxy */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionProxy; --- }; --- 7B00997E2B6508C200FE7C31 /* NetworkProtectionProxy */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionProxy; --- }; --- 7B1459562B7D43E500047F2C /* NetworkProtectionProxy */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionProxy; --- }; --- 7B2366832C09FAC2002D393F /* VPNAppLauncher */ = { --- isa = XCSwiftPackageProductDependency; --- productName = VPNAppLauncher; --- }; --- 7B2366852C09FACD002D393F /* VPNAppLauncher */ = { --- isa = XCSwiftPackageProductDependency; --- productName = VPNAppLauncher; --- }; --- 7B2366872C09FADA002D393F /* VPNAppLauncher */ = { --- isa = XCSwiftPackageProductDependency; --- productName = VPNAppLauncher; --- }; --- 7B2366892C09FAE8002D393F /* VPNAppLauncher */ = { --- isa = XCSwiftPackageProductDependency; --- productName = VPNAppLauncher; --- }; --- 7B23668B2C09FAF1002D393F /* VPNAppLauncher */ = { --- isa = XCSwiftPackageProductDependency; --- productName = VPNAppLauncher; --- }; --- 7B23668D2C09FAFA002D393F /* VPNAppLauncher */ = { --- isa = XCSwiftPackageProductDependency; --- productName = VPNAppLauncher; --- }; --- 7B25856D2BA2F2ED00D49F79 /* NetworkProtectionUI */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionUI; --- }; --- 7B31FD8B2AD125620086AA24 /* NetworkProtectionIPC */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionIPC; --- }; --- 7B37C7A42BAA32A50062546A /* Subscription */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Subscription; --- }; --- 7B624F162BA25C1F00A6C544 /* NetworkProtectionUI */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionUI; --- }; --- 7B7DFB212B7E7473009EA1A3 /* Networking */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Networking; --- }; --- 7B8594182B5B26230007EB3E /* UDSHelper */ = { --- isa = XCSwiftPackageProductDependency; --- productName = UDSHelper; --- }; --- 7B97CD582B7E0B57004FEF43 /* NetworkProtectionProxy */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionProxy; --- }; --- 7B97CD5A2B7E0B85004FEF43 /* Common */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Common; --- }; --- 7BA076BA2B65D61400D7FB72 /* NetworkProtectionProxy */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionProxy; --- }; --- 7BA59C9A2AE18B49009A97B1 /* SystemExtensionManager */ = { --- isa = XCSwiftPackageProductDependency; --- productName = SystemExtensionManager; --- }; --- 7BA7CC5E2AD1210C0042E5CE /* Networking */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Networking; --- }; --- 7BA7CC602AD1211C0042E5CE /* Networking */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Networking; --- }; --- 7BBE2B7A2B61663C00697445 /* NetworkProtectionProxy */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionProxy; --- }; --- 7BEC182E2AD5D8DC00D30536 /* SystemExtensionManager */ = { --- isa = XCSwiftPackageProductDependency; --- productName = SystemExtensionManager; --- }; --- 7BEEA5112AD1235B00A9E72B /* NetworkProtectionIPC */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionIPC; --- }; --- 7BEEA5132AD1236300A9E72B /* NetworkProtectionIPC */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionIPC; --- }; --- 7BEEA5152AD1236E00A9E72B /* NetworkProtectionUI */ = { --- isa = XCSwiftPackageProductDependency; --- productName = NetworkProtectionUI; --- }; --- 85D44B852BA08D29001B4AB5 /* Suggestions */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Suggestions; --- }; --- 85D44B872BA08D30001B4AB5 /* Suggestions */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Suggestions; --- }; --- 85E2BBCD2B8F534000DBEC7A /* History */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = History; --- }; --- 85E2BBCF2B8F534A00DBEC7A /* History */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = History; --- }; --- 9807F644278CA16F00E1547B /* BrowserServicesKit */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = BrowserServicesKit; --- }; --- 984FD3BE299ACF35007334DD /* Bookmarks */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Bookmarks; --- }; --- 987799EC299998B1005D8EB6 /* Bookmarks */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Bookmarks; --- }; --- 98A50963294B691800D10880 /* Persistence */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Persistence; --- }; --- 9D9AE8F82AAA3AD00026E7DC /* DataBrokerProtection */ = { --- isa = XCSwiftPackageProductDependency; --- productName = DataBrokerProtection; --- }; --- 9D9AE8FA2AAA3AD90026E7DC /* DataBrokerProtection */ = { --- isa = XCSwiftPackageProductDependency; --- productName = DataBrokerProtection; --- }; --- 9D9DE5722C63AA0700D20B15 /* AppKitExtensions */ = { --- isa = XCSwiftPackageProductDependency; --- productName = AppKitExtensions; --- }; --- 9D9DE5742C63AA0C00D20B15 /* AppKitExtensions */ = { --- isa = XCSwiftPackageProductDependency; --- productName = AppKitExtensions; --- }; --- 9D9DE5762C63AA1600D20B15 /* AppKitExtensions */ = { --- isa = XCSwiftPackageProductDependency; --- productName = AppKitExtensions; --- }; --- 9D9DE5782C63AA1A00D20B15 /* AppKitExtensions */ = { --- isa = XCSwiftPackageProductDependency; --- productName = AppKitExtensions; --- }; --- 9D9DE57A2C63AA1F00D20B15 /* AppKitExtensions */ = { --- isa = XCSwiftPackageProductDependency; --- productName = AppKitExtensions; --- }; --- 9D9DE57C2C63AA2400D20B15 /* AppKitExtensions */ = { --- isa = XCSwiftPackageProductDependency; --- productName = AppKitExtensions; --- }; --- 9D9DE57E2C63B64F00D20B15 /* AppKitExtensions */ = { --- isa = XCSwiftPackageProductDependency; --- productName = AppKitExtensions; --- }; --- 9D9DE5802C63BA0B00D20B15 /* AppKitExtensions */ = { --- isa = XCSwiftPackageProductDependency; --- productName = AppKitExtensions; --- }; --- 9D9DE5822C63BE9600D20B15 /* AppKitExtensions */ = { --- isa = XCSwiftPackageProductDependency; --- productName = AppKitExtensions; --- }; --- 9DC70B192AA1FA5B005A844B /* LoginItems */ = { --- isa = XCSwiftPackageProductDependency; --- productName = LoginItems; --- }; --- 9DEF97E02B06C4EE00764F03 /* Networking */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Networking; --- }; --- 9FF521452BAA908500B9819B /* Lottie */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; --- productName = Lottie; --- }; --- 9FF521472BAA909C00B9819B /* Lottie */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; --- productName = Lottie; --- }; --- AA06B6B62672AF8100F541C5 /* Sparkle */ = { --- isa = XCSwiftPackageProductDependency; --- package = AA06B6B52672AF8100F541C5 /* XCRemoteSwiftPackageReference "Sparkle" */; --- productName = Sparkle; --- }; --- B65CD8CA2B316DF100A595BB /* SnapshotTesting */ = { --- isa = XCSwiftPackageProductDependency; --- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; --- productName = SnapshotTesting; --- }; --- B65CD8CC2B316DFC00A595BB /* SnapshotTesting */ = { --- isa = XCSwiftPackageProductDependency; --- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; --- productName = SnapshotTesting; --- }; --- B65CD8CE2B316E0200A595BB /* SnapshotTesting */ = { --- isa = XCSwiftPackageProductDependency; --- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; --- productName = SnapshotTesting; --- }; --- B65CD8D02B316E0C00A595BB /* SnapshotTesting */ = { --- isa = XCSwiftPackageProductDependency; --- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; --- productName = SnapshotTesting; --- }; --- B65CD8D22B316E1700A595BB /* SnapshotTesting */ = { --- isa = XCSwiftPackageProductDependency; --- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; --- productName = SnapshotTesting; --- }; --- B6AE39F229374AEC00C37AA4 /* OHHTTPStubs */ = { --- isa = XCSwiftPackageProductDependency; --- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; --- productName = OHHTTPStubs; --- }; --- B6AE39F429374AEC00C37AA4 /* OHHTTPStubsSwift */ = { --- isa = XCSwiftPackageProductDependency; --- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; --- productName = OHHTTPStubsSwift; --- }; --- B6B77BE7297973D4001E68A1 /* Navigation */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Navigation; --- }; --- B6DA44162616C13800DD1EC2 /* OHHTTPStubs */ = { --- isa = XCSwiftPackageProductDependency; --- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; --- productName = OHHTTPStubs; --- }; --- B6DA44182616C13800DD1EC2 /* OHHTTPStubsSwift */ = { --- isa = XCSwiftPackageProductDependency; --- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; --- productName = OHHTTPStubsSwift; --- }; --- B6E6BA072BA1FE24008AA7E1 /* Common */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Common; --- }; -- B6EC37F829B5DAD7001ACE79 /* Swifter */ = { -- isa = XCSwiftPackageProductDependency; -- package = B6EC37F529B5DAAC001ACE79 /* XCRemoteSwiftPackageReference "swifter" */; -- productName = Swifter; -- }; --- B6EC37FE29B8D915001ACE79 /* Configuration */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Configuration; --- }; --- BDADBDC82BD2BC2200421B9B /* Lottie */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; --- productName = Lottie; --- }; --- BDADBDCA2BD2BC2800421B9B /* Lottie */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; --- productName = Lottie; --- }; --- C18BF9CB2C73678500ED6B8A /* Freemium */ = { --- isa = XCSwiftPackageProductDependency; --- productName = Freemium; --- }; --- C18BF9CD2C73678C00ED6B8A /* Freemium */ = { --- isa = XCSwiftPackageProductDependency; --- productName = Freemium; --- }; --- C18BF9CF2C736C9100ED6B8A /* Freemium */ = { --- isa = XCSwiftPackageProductDependency; --- productName = Freemium; --- }; --- C18BF9D12C736C9700ED6B8A /* Freemium */ = { --- isa = XCSwiftPackageProductDependency; --- productName = Freemium; --- }; --- CBC83E3529B63D380008E19C /* Configuration */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Configuration; --- }; --- CD34F0BB2C885D65006826BE /* PhishingDetection */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = PhishingDetection; --- }; --- CD34F0C32C8869FF006826BE /* PhishingDetection */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = PhishingDetection; --- }; --- D6BC8AC52C5A95AA0025375B /* DuckPlayer */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = DuckPlayer; --- }; --- D6BC8AC72C5A95B10025375B /* DuckPlayer */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = DuckPlayer; --- }; --- DC3F73D49B2D44464AFEFCD8 /* Subscription */ = { --- isa = XCSwiftPackageProductDependency; --- package = 3FFD51CF7C19ACBDB9687474 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Subscription; --- }; --- EE02D41F2BB460C000DBE6B3 /* BrowserServicesKit */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = BrowserServicesKit; --- }; --- EE2F9C5A2B90F2FF00D45FC9 /* Subscription */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Subscription; --- }; --- EE7295E22A545B9A008C0991 /* NetworkProtection */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = NetworkProtection; --- }; --- EE7295E62A545BBB008C0991 /* NetworkProtection */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = NetworkProtection; --- }; --- EE7295E82A545BC4008C0991 /* NetworkProtection */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = NetworkProtection; --- }; --- EE7295EC2A545C0A008C0991 /* NetworkProtection */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = NetworkProtection; --- }; --- EE7295EE2A545C12008C0991 /* NetworkProtection */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = NetworkProtection; --- }; --- F116A7C22BD1924B00F3FCF7 /* PixelKitTestingUtilities */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = PixelKitTestingUtilities; --- }; --- F116A7C62BD1925500F3FCF7 /* PixelKitTestingUtilities */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = PixelKitTestingUtilities; --- }; --- F116A7C82BD1929000F3FCF7 /* PixelKitTestingUtilities */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = PixelKitTestingUtilities; --- }; --- F198C7112BD18A28000BF24D /* PixelKit */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = PixelKit; --- }; --- F198C7132BD18A30000BF24D /* PixelKit */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = PixelKit; --- }; --- F198C7152BD18A44000BF24D /* PixelKit */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = PixelKit; --- }; --- F198C7172BD18A4C000BF24D /* PixelKit */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = PixelKit; --- }; --- F198C7192BD18A5B000BF24D /* PixelKit */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = PixelKit; --- }; --- F198C71B2BD18A61000BF24D /* PixelKit */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = PixelKit; --- }; --- F198C71D2BD18D88000BF24D /* SwiftLintTool */ = { --- isa = XCSwiftPackageProductDependency; --- package = B6F997B92B8F352500476735 /* XCRemoteSwiftPackageReference "apple-toolbox" */; --- productName = SwiftLintTool; --- }; --- F198C71F2BD18D92000BF24D /* SwiftLintTool */ = { --- isa = XCSwiftPackageProductDependency; --- package = B6F997B92B8F352500476735 /* XCRemoteSwiftPackageReference "apple-toolbox" */; --- productName = SwiftLintTool; --- }; --- F1D0428D2BFB9F9C00A31506 /* Subscription */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Subscription; --- }; --- F1D0428F2BFB9FA300A31506 /* Subscription */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = Subscription; --- }; --- F1D43AF22B98E47800BAB743 /* BareBonesBrowserKit */ = { --- isa = XCSwiftPackageProductDependency; --- package = F1D43AF12B98E47800BAB743 /* XCRemoteSwiftPackageReference "BareBonesBrowser" */; --- productName = BareBonesBrowserKit; --- }; --- F1D43AF42B98E48900BAB743 /* BareBonesBrowserKit */ = { --- isa = XCSwiftPackageProductDependency; --- package = F1D43AF12B98E47800BAB743 /* XCRemoteSwiftPackageReference "BareBonesBrowser" */; --- productName = BareBonesBrowserKit; --- }; --- F1DA51A42BF6114200CF29FA /* SubscriptionTestingUtilities */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = SubscriptionTestingUtilities; --- }; --- F1DA51A82BF6114C00CF29FA /* SubscriptionTestingUtilities */ = { --- isa = XCSwiftPackageProductDependency; --- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; --- productName = SubscriptionTestingUtilities; --- }; --- F1DF95E62BD188B60045E591 /* LoginItems */ = { --- isa = XCSwiftPackageProductDependency; --- productName = LoginItems; --- }; -- /* End XCSwiftPackageProductDependency section */ -- -- /* Begin XCVersionGroup section */ From 22fcba4f8336b001cdf8b9527e787a06a08b740c Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Thu, 24 Oct 2024 13:07:51 -0300 Subject: [PATCH 28/90] Remove step of deleting packages --- .github/workflows/ui_tests.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index c9b47cb0b7..1de4d8bd77 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -104,16 +104,6 @@ jobs: echo "${{ matrix.xcode-version }}" > .xcode-version sudo xcode-select -s /Applications/Xcode_$(<.xcode-version).app/Contents/Developer - # This first bit is a hack to stop the app building package dependencies that isn't needed by the test runner - # Otherwise xcodebuild will attempt building BSK and linking GRDB framework that is incompatible with Xcode 15 - - name: Build test runner - run: | - rm -rf LocalPackages - rm -rf DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved - git apply dependencies.patch - # sed -i '' '/\/\* Begin XCSwiftPackageProductDependency section \*\//,/\/\* End XCSwiftPackageProductDependency section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj - # sed -i '' '/\/\* Begin XCRemoteSwiftPackageReference section \*\//,/\/\* End XCRemoteSwiftPackageReference section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj - - name: Build for testing run: | set -o pipefail && xcodebuild build-for-testing \ From 8f9bdf81eb33399d925d730c6b1b09dda8cd9927 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Thu, 24 Oct 2024 16:40:11 -0300 Subject: [PATCH 29/90] Fix opening settings page --- UITests/BookmarksAndFavoritesTests.swift | 2 +- UITests/Common/UITests.swift | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/UITests/BookmarksAndFavoritesTests.swift b/UITests/BookmarksAndFavoritesTests.swift index cd841fa265..a4fbc4e886 100644 --- a/UITests/BookmarksAndFavoritesTests.swift +++ b/UITests/BookmarksAndFavoritesTests.swift @@ -653,7 +653,7 @@ private extension BookmarksAndFavoritesTests { /// Make sure that we can reply on the bookmarks bar always appearing func toggleShowBookmarksBarAlwaysOn() { - app.typeKey(",", modifierFlags: [.command]) // Open settings + addressBarTextField.typeURL(URL("duck://settings")!) // Open settings XCTAssertTrue( settingsAppearanceButton.waitForExistence(timeout: UITests.Timeouts.elementExistence), diff --git a/UITests/Common/UITests.swift b/UITests/Common/UITests.swift index a92f64ce90..0231539a57 100644 --- a/UITests/Common/UITests.swift +++ b/UITests/Common/UITests.swift @@ -58,7 +58,13 @@ enum UITests { let app = XCUIApplication() app.launch() - app.typeKey(",", modifierFlags: [.command]) // Open settings + let settings = app.menuItems["MainMenu.preferencesMenuItem"] + XCTAssertTrue( + settings.waitForExistence(timeout: UITests.Timeouts.elementExistence), + "Reset bookmarks menu item didn't become available in a reasonable timeframe." + ) + + settings.click() let generalPreferencesButton = app.buttons["PreferencesSidebar.generalButton"] let autocompleteToggle = app.checkBoxes["PreferencesGeneralView.showAutocompleteSuggestions"] XCTAssertTrue( From e71804dc3bdd6b1b2756aec850253d517a14f0c8 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Thu, 24 Oct 2024 21:13:33 -0300 Subject: [PATCH 30/90] Fix more UI tests --- UITests/BookmarkSortTests.swift | 1 + UITests/BookmarksAndFavoritesTests.swift | 11 +++++++++-- UITests/Common/XCUIApplicationExtension.swift | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/UITests/BookmarkSortTests.swift b/UITests/BookmarkSortTests.swift index 184b0d8223..594f5769a3 100644 --- a/UITests/BookmarkSortTests.swift +++ b/UITests/BookmarkSortTests.swift @@ -61,6 +61,7 @@ class BookmarkSortTests: XCTestCase { app.dismissPopover(buttonIdentifier: "Hide") app.openBookmarksPanel() selectSortByName(mode: .panel) + app.openBookmarksPanel() // in reality, this closes the panel app.openBookmarksManager() app.buttons[AccessibilityIdentifiers.sortBookmarksButtonManager].tap() diff --git a/UITests/BookmarksAndFavoritesTests.swift b/UITests/BookmarksAndFavoritesTests.swift index a4fbc4e886..469ac95ffb 100644 --- a/UITests/BookmarksAndFavoritesTests.swift +++ b/UITests/BookmarksAndFavoritesTests.swift @@ -627,7 +627,7 @@ class BookmarksAndFavoritesTests: XCTestCase { "The bookmarks bar bookmark icon failed to become available in a reasonable timeframe." ) let bookmarkBarBookmarkIconCoordinate = bookmarkBarBookmarkIcon.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.5)) - let deleteContextMenuItemCoordinate = bookmarkBarBookmarkIcon.coordinate(withNormalizedOffset: CGVector(dx: 0.9, dy: 9.0)) + let deleteContextMenuItemCoordinate = bookmarkBarBookmarkIcon.coordinate(withNormalizedOffset: CGVector(dx: 0.9, dy: 8.0)) bookmarkBarBookmarkIconCoordinate.rightClick() deleteContextMenuItemCoordinate.click() app.typeKey("w", modifierFlags: [.command, .option, .shift]) @@ -653,7 +653,13 @@ private extension BookmarksAndFavoritesTests { /// Make sure that we can reply on the bookmarks bar always appearing func toggleShowBookmarksBarAlwaysOn() { - addressBarTextField.typeURL(URL("duck://settings")!) // Open settings + let settings = app.menuItems["MainMenu.preferencesMenuItem"] + XCTAssertTrue( + settings.waitForExistence(timeout: UITests.Timeouts.elementExistence), + "Reset bookmarks menu item didn't become available in a reasonable timeframe." + ) + + settings.click() XCTAssertTrue( settingsAppearanceButton.waitForExistence(timeout: UITests.Timeouts.elementExistence), @@ -686,6 +692,7 @@ private extension BookmarksAndFavoritesTests { /// Make sure that appearance tab has been used to set "show favorites" to true func toggleBookmarksBarShowFavoritesOn() { + app.openNewTab() addressBarTextField.typeURL(URL(string: "duck://settings")!) XCTAssertTrue( diff --git a/UITests/Common/XCUIApplicationExtension.swift b/UITests/Common/XCUIApplicationExtension.swift index e0c3b97aca..6d47988925 100644 --- a/UITests/Common/XCUIApplicationExtension.swift +++ b/UITests/Common/XCUIApplicationExtension.swift @@ -132,6 +132,7 @@ extension XCUIApplication { bookmarksPanelShortcutButton.tap() } + func verifyBookmarkOrder(expectedOrder: [String], mode: BookmarkMode) { let rowCount = (mode == .panel ? popovers.firstMatch.outlines.firstMatch : tables.firstMatch).cells.count XCTAssertEqual(rowCount, expectedOrder.count, "Row count does not match expected count.") From 38a878b24b9a8379643b6006dfc5695bb034e767 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Fri, 25 Oct 2024 09:35:11 -0300 Subject: [PATCH 31/90] Fix tests for macOS 14 and 13 --- UITests/BookmarksAndFavoritesTests.swift | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/UITests/BookmarksAndFavoritesTests.swift b/UITests/BookmarksAndFavoritesTests.swift index 469ac95ffb..e25da99686 100644 --- a/UITests/BookmarksAndFavoritesTests.swift +++ b/UITests/BookmarksAndFavoritesTests.swift @@ -627,7 +627,13 @@ class BookmarksAndFavoritesTests: XCTestCase { "The bookmarks bar bookmark icon failed to become available in a reasonable timeframe." ) let bookmarkBarBookmarkIconCoordinate = bookmarkBarBookmarkIcon.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.5)) - let deleteContextMenuItemCoordinate = bookmarkBarBookmarkIcon.coordinate(withNormalizedOffset: CGVector(dx: 0.9, dy: 8.0)) + var deleteContextMenuItemCoordinate: XCUICoordinate + if #available(macOS 15.0, *) { + deleteContextMenuItemCoordinate = bookmarkBarBookmarkIcon.coordinate(withNormalizedOffset: CGVector(dx: 0.9, dy: 8.0)) + } else { + deleteContextMenuItemCoordinate = bookmarkBarBookmarkIcon.coordinate(withNormalizedOffset: CGVector(dx: 0.9, dy: 9.0)) + } + bookmarkBarBookmarkIconCoordinate.rightClick() deleteContextMenuItemCoordinate.click() app.typeKey("w", modifierFlags: [.command, .option, .shift]) From 5eadd4a01b0fbb03cea6bbe2fa592a11a9361676 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Fri, 25 Oct 2024 15:39:28 -0300 Subject: [PATCH 32/90] Add new step to have screenshot --- .github/workflows/ui_tests.yml | 10 ++++++ .../AddressBarKeyboardShortcutsTests.swift | 4 ++- UITests/AutocompleteTests.swift | 3 +- UITests/BookmarkSearchTests.swift | 3 +- UITests/BookmarkSortTests.swift | 3 +- UITests/BookmarksAndFavoritesTests.swift | 3 +- UITests/BookmarksBarTests.swift | 3 +- UITests/BrowsingHistoryTests.swift | 3 +- UITests/Common/UITests.swift | 32 +++++++++++++++++++ UITests/FindInPageTests.swift | 4 ++- UITests/OnboardingUITests.swift | 2 +- UITests/PermissionsTests.swift | 4 ++- UITests/PinnedTabsTests.swift | 4 ++- UITests/StateRestorationTests.swift | 3 +- UITests/TabBarTests.swift | 3 +- 15 files changed, 71 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 1de4d8bd77..5e6fadd3ca 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -132,6 +132,16 @@ jobs: | tee -a xcodebuild.log \ | tee ui-tests.log + - name: Generate complete report + uses: kishikawakatsumi/xcresulttool@v1 + if: success() || failure() + with: + path: | + xcodebuild.log + DerivedData/Logs/Test/*.xcresult + ~/Library/Logs/DiagnosticReports/* + retention-days: 7 + - name: Prepare test report if: always() run: | diff --git a/UITests/AddressBarKeyboardShortcutsTests.swift b/UITests/AddressBarKeyboardShortcutsTests.swift index bf97489e5d..41f5c69826 100644 --- a/UITests/AddressBarKeyboardShortcutsTests.swift +++ b/UITests/AddressBarKeyboardShortcutsTests.swift @@ -18,13 +18,15 @@ import XCTest -class AddressBarKeyboardShortcutsTests: XCTestCase { +class AddressBarKeyboardShortcutsTests: UITestCase { private var app: XCUIApplication! private var urlStringForAddressBar: String! private var urlForAddressBar: URL! private var addressBarTextField: XCUIElement! + override class func setUp() { + super.setUp() UITests.firstRun() UITests.setAutocompleteToggleBeforeTestcaseRuns(false) // We don't want changes in the address bar that we don't create } diff --git a/UITests/AutocompleteTests.swift b/UITests/AutocompleteTests.swift index 8669db1933..906e95fac2 100644 --- a/UITests/AutocompleteTests.swift +++ b/UITests/AutocompleteTests.swift @@ -18,7 +18,7 @@ import XCTest -class AutocompleteTests: XCTestCase { +class AutocompleteTests: UITestCase { private var app: XCUIApplication! private var addBookmarkButton: XCUIElement! private var resetBookMarksMenuItem: XCUIElement! @@ -32,6 +32,7 @@ class AutocompleteTests: XCTestCase { private var siteTitleForHistorySite: String! override class func setUp() { + super.setUp() UITests.firstRun() UITests.setAutocompleteToggleBeforeTestcaseRuns(true) // These tests require autocomplete to be on } diff --git a/UITests/BookmarkSearchTests.swift b/UITests/BookmarkSearchTests.swift index 0442b5ded9..ef6021c8f2 100644 --- a/UITests/BookmarkSearchTests.swift +++ b/UITests/BookmarkSearchTests.swift @@ -18,7 +18,7 @@ import XCTest -class BookmarkSearchTests: XCTestCase { +class BookmarkSearchTests: UITestCase { private var app: XCUIApplication! private enum AccessibilityIdentifiers { @@ -39,6 +39,7 @@ class BookmarkSearchTests: XCTestCase { } override class func setUp() { + super.setUp() UITests.firstRun() } diff --git a/UITests/BookmarkSortTests.swift b/UITests/BookmarkSortTests.swift index 594f5769a3..c2ebff0a30 100644 --- a/UITests/BookmarkSortTests.swift +++ b/UITests/BookmarkSortTests.swift @@ -18,7 +18,7 @@ import XCTest -class BookmarkSortTests: XCTestCase { +class BookmarkSortTests: UITestCase { private var app: XCUIApplication! private enum AccessibilityIdentifiers { @@ -29,6 +29,7 @@ class BookmarkSortTests: XCTestCase { } override class func setUp() { + super.setUp() UITests.firstRun() } diff --git a/UITests/BookmarksAndFavoritesTests.swift b/UITests/BookmarksAndFavoritesTests.swift index e25da99686..a7ad55d948 100644 --- a/UITests/BookmarksAndFavoritesTests.swift +++ b/UITests/BookmarksAndFavoritesTests.swift @@ -18,7 +18,7 @@ import XCTest -class BookmarksAndFavoritesTests: XCTestCase { +class BookmarksAndFavoritesTests: UITestCase { private var app: XCUIApplication! private var pageTitle: String! private var urlForBookmarksBar: URL! @@ -55,6 +55,7 @@ class BookmarksAndFavoritesTests: XCTestCase { private var showFavoritesPreferenceToggle: XCUIElement! override class func setUp() { + super.setUp() UITests.firstRun() } diff --git a/UITests/BookmarksBarTests.swift b/UITests/BookmarksBarTests.swift index 7ab3aa51ec..062070b2d9 100644 --- a/UITests/BookmarksBarTests.swift +++ b/UITests/BookmarksBarTests.swift @@ -18,7 +18,7 @@ import XCTest -class BookmarksBarTests: XCTestCase { +class BookmarksBarTests: UITestCase { private var app: XCUIApplication! private var pageTitle: String! private var urlForBookmarksBar: URL! @@ -35,6 +35,7 @@ class BookmarksBarTests: XCTestCase { private let titleStringLength = 12 override class func setUp() { + super.setUp() UITests.firstRun() } diff --git a/UITests/BrowsingHistoryTests.swift b/UITests/BrowsingHistoryTests.swift index ac26e4ca7a..775a7e756c 100644 --- a/UITests/BrowsingHistoryTests.swift +++ b/UITests/BrowsingHistoryTests.swift @@ -18,7 +18,7 @@ import XCTest -class BrowsingHistoryTests: XCTestCase { +class BrowsingHistoryTests: UITestCase { private var app: XCUIApplication! private var historyMenuBarItem: XCUIElement! private var clearAllHistoryMenuItem: XCUIElement! @@ -28,6 +28,7 @@ class BrowsingHistoryTests: XCTestCase { private let lengthForRandomPageTitle = 8 override class func setUp() { + super.setUp() UITests.firstRun() } diff --git a/UITests/Common/UITests.swift b/UITests/Common/UITests.swift index 0231539a57..837ba3675c 100644 --- a/UITests/Common/UITests.swift +++ b/UITests/Common/UITests.swift @@ -108,3 +108,35 @@ enum UITests { app.terminate() } } + +class TestFailureObserver: NSObject, XCTestObservation { + func testCase(_ testCase: XCTestCase, didRecord issue: XCTIssue) { + print("Failed test with name: \(testCase.name)") + let screenshotName = "\(testCase.name)-failure" + testCase.takeScreenshot(screenshotName) + } +} + +class UITestCase: XCTestCase { + private static let failureObserver = TestFailureObserver() + + override class func setUp() { + super.setUp() + XCTestObservationCenter.shared.addTestObserver(failureObserver) + } + + override class func tearDown() { + XCTestObservationCenter.shared.removeTestObserver(failureObserver) + super.tearDown() + } +} + +extension XCTestCase { + func takeScreenshot(_ name: String) { + let fullScreenshot = XCUIScreen.main.screenshot() + let screenshot = XCTAttachment(screenshot: fullScreenshot) + screenshot.name = name + screenshot.lifetime = .keepAlways + add(screenshot) + } +} diff --git a/UITests/FindInPageTests.swift b/UITests/FindInPageTests.swift index 0f8de44641..7c2fc87dbc 100644 --- a/UITests/FindInPageTests.swift +++ b/UITests/FindInPageTests.swift @@ -18,7 +18,7 @@ import XCTest -class FindInPageTests: XCTestCase { +class FindInPageTests: UITestCase { private var app: XCUIApplication! private var addressBarTextField: XCUIElement! private var loremIpsumWebView: XCUIElement! @@ -26,11 +26,13 @@ class FindInPageTests: XCTestCase { private let minimumExpectedMatchingPixelsInFindHighlight = 150 override class func setUp() { + super.setUp() UITests.firstRun() saveLocalHTML() } override class func tearDown() { + super.tearDown() removeLocalHTML() } diff --git a/UITests/OnboardingUITests.swift b/UITests/OnboardingUITests.swift index 4d2d34d79c..60869bcf47 100644 --- a/UITests/OnboardingUITests.swift +++ b/UITests/OnboardingUITests.swift @@ -18,7 +18,7 @@ import XCTest -final class OnboardingUITests: XCTestCase { +final class OnboardingUITests: UITestCase { override func tearDownWithError() throws { try resetApplicationData() diff --git a/UITests/PermissionsTests.swift b/UITests/PermissionsTests.swift index 86a82b06f5..9bbba9b031 100644 --- a/UITests/PermissionsTests.swift +++ b/UITests/PermissionsTests.swift @@ -29,7 +29,7 @@ import XCTest /// the best way, in the event that a future macOS version stops supporting this approach, but also solves the bug with `addUIInterruptionMonitor`, /// and you want to branch the implementations per macOS version: /// https://stackoverflow.com/questions/56559269/adduiinterruptionmonitor-is-not-getting-called-on-macos -class PermissionsTests: XCTestCase { +class PermissionsTests: UITestCase { private var app: XCUIApplication! private var notificationCenter: XCUIApplication! private var addressBarTextField: XCUIElement! @@ -38,7 +38,9 @@ class PermissionsTests: XCTestCase { private var clearAllHistoryMenuItem: XCUIElement! private var clearAllHistoryAlertClearButton: XCUIElement! private var fakeFireButton: XCUIElement! + override class func setUp() { + super.setUp() UITests.firstRun() } diff --git a/UITests/PinnedTabsTests.swift b/UITests/PinnedTabsTests.swift index a3fe7297f9..a39edaa912 100644 --- a/UITests/PinnedTabsTests.swift +++ b/UITests/PinnedTabsTests.swift @@ -18,7 +18,8 @@ import XCTest -class PinnedTabsTests: XCTestCase { +class PinnedTabsTests: UITestCase { + private static let failureObserver = TestFailureObserver() private var app: XCUIApplication! override func setUpWithError() throws { @@ -31,6 +32,7 @@ class PinnedTabsTests: XCTestCase { } override class func setUp() { + super.setUp() UITests.firstRun() } diff --git a/UITests/StateRestorationTests.swift b/UITests/StateRestorationTests.swift index a2885dcd52..e25dd42620 100644 --- a/UITests/StateRestorationTests.swift +++ b/UITests/StateRestorationTests.swift @@ -18,7 +18,7 @@ import XCTest -class StateRestorationTests: XCTestCase { +class StateRestorationTests: UITestCase { private var app: XCUIApplication! private var firstPageTitle: String! private var secondPageTitle: String! @@ -31,6 +31,7 @@ class StateRestorationTests: XCTestCase { private var reopenAllWindowsFromLastSessionPreference: XCUIElement! override class func setUp() { + super.setUp() UITests.firstRun() } diff --git a/UITests/TabBarTests.swift b/UITests/TabBarTests.swift index 0c1cc4c3cc..32119356b3 100644 --- a/UITests/TabBarTests.swift +++ b/UITests/TabBarTests.swift @@ -18,7 +18,7 @@ import XCTest -class TabBarTests: XCTestCase { +class TabBarTests: UITestCase { private var app: XCUIApplication! override func setUpWithError() throws { @@ -29,6 +29,7 @@ class TabBarTests: XCTestCase { } override class func setUp() { + super.setUp() UITests.firstRun() } From 5e0f1f0cef596bfb036f028a7818ad1dacb184a4 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Fri, 25 Oct 2024 16:28:38 -0300 Subject: [PATCH 33/90] Fix report --- .github/workflows/ui_tests.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 5e6fadd3ca..bcdde74633 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -1,4 +1,5 @@ -name: UI Tests +.github/workflows/ui_tests.yml +gname: UI Tests on: workflow_dispatch: @@ -124,6 +125,7 @@ jobs: defaults write com.duckduckgo.macos.browser.review moveToApplicationsFolderAlertSuppress 1 set -o pipefail && xcodebuild test-without-building \ -scheme "UI Tests CI" \ + -resultBundlePath TestResults -derivedDataPath DerivedData \ -skipPackagePluginValidation \ -skipMacroValidation \ @@ -136,11 +138,8 @@ jobs: uses: kishikawakatsumi/xcresulttool@v1 if: success() || failure() with: - path: | - xcodebuild.log - DerivedData/Logs/Test/*.xcresult - ~/Library/Logs/DiagnosticReports/* - retention-days: 7 + path: TestResults.xcresult + show-passed-tests: false - name: Prepare test report if: always() From c54ceb30997130a8a2abb41443d50902e685fb3b Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Fri, 25 Oct 2024 16:29:55 -0300 Subject: [PATCH 34/90] Disable some UI tests for the CI to fail faster --- UITests/UI Tests.xctestplan | 62 +++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/UITests/UI Tests.xctestplan b/UITests/UI Tests.xctestplan index e1b61add22..34a8841a52 100644 --- a/UITests/UI Tests.xctestplan +++ b/UITests/UI Tests.xctestplan @@ -36,9 +36,65 @@ "testTargets" : [ { "skippedTests" : [ - "BookmarksAndFavoritesTests\/test_bookmarks_canBeAddedTo_byClickingBookmarksButtonInAddressBar()", - "BookmarksAndFavoritesTests\/test_favorites_canBeAddedTo_byClickingAddFavoriteInAddBookmarkPopover()", - "PermissionsTests" + "AddressBarKeyboardShortcutsTests", + "AddressBarKeyboardShortcutsTests\/test_addressBar_allTextToTheLeftShouldBeDeletedByCommandDelete()", + "AddressBarKeyboardShortcutsTests\/test_addressBar_allTextToTheRightShouldBeDeletedByCommandForwardDelete()", + "AddressBarKeyboardShortcutsTests\/test_addressBar_beginning_canBeNavigatedToWithCommandLeftArrow()", + "AddressBarKeyboardShortcutsTests\/test_addressBar_caret_canNavigateThroughWordBoundariesUsingOptionLeftArrow()", + "AddressBarKeyboardShortcutsTests\/test_addressBar_caret_canNavigateThroughWordBoundariesUsingOptionRightArrow()", + "AddressBarKeyboardShortcutsTests\/test_addressBar_commandZShouldUndoLastAction()", + "AddressBarKeyboardShortcutsTests\/test_addressBar_end_canBeNavigatedToWithCommandRightArrow()", + "AddressBarKeyboardShortcutsTests\/test_addressBar_nearestLeftHandCharacterShouldBeDeletedByFnDelete()", + "AddressBarKeyboardShortcutsTests\/test_addressBar_nearestLeftHandWordWithinBoundariesShouldBeDeletedByOptDelete()", + "AddressBarKeyboardShortcutsTests\/test_addressBar_nearestRightHandCharacterShouldBeDeletedByFnForwardDelete()", + "AddressBarKeyboardShortcutsTests\/test_addressBar_nearestRightHandWordWithinBoundariesShouldBeDeletedByOptForwardDelete()", + "AddressBarKeyboardShortcutsTests\/test_addressBar_shiftCommandZShouldRedoLastUndoneAction()", + "AddressBarKeyboardShortcutsTests\/test_addressBar_url_canBeSelected()", + "AddressBarKeyboardShortcutsTests\/test_addressBar_url_word_canBeSelectedByDoubleClick()", + "AutocompleteTests", + "AutocompleteTests\/test_suggestions_showsTypedTitleOfBookmarkedPageAsBookmark()", + "AutocompleteTests\/test_suggestions_showsTypedTitleOfHistoryPageAsHistory()", + "AutocompleteTests\/test_suggestions_showsTypedTitleOfWebsiteNotInBookmarksOrHistoryAsWebsite()", + "BookmarkSearchTests", + "BookmarkSearchTests\/testDragAndDropToReorderIsNotPossibleWhenInSearchOnBookmarksManager()", + "BookmarkSearchTests\/testDragAndDropToReorderIsNotPossibleWhenInSearchOnBookmarksPanel()", + "BookmarkSearchTests\/testEmptyStateWhenSearchingInManager()", + "BookmarkSearchTests\/testEmptyStateWhenSearchingInPanel()", + "BookmarkSearchTests\/testFilteredResultsInManager()", + "BookmarkSearchTests\/testFilteredResultsInPanel()", + "BookmarkSearchTests\/testSearchActionIsDisabledOnBookmarksPanelWhenUserHasNoBookmarks()", + "BookmarkSearchTests\/testShowInFolderFunctionalityOnBookmarksManager()", + "BookmarkSearchTests\/testShowInFolderFunctionalityOnBookmarksPanel()", + "BookmarksBarTests", + "BookmarksBarTests\/test_bookmarksBar_whenShowBookmarksBarAlwaysIsSelected_alwaysDynamicallyAppearsOnWindow()", + "BookmarksBarTests\/test_bookmarksBar_whenShowBookmarksBarIsUnchecked_isNeverShownInWindowsAndTabs()", + "BookmarksBarTests\/test_bookmarksBar_whenShowBookmarksNewTabOnlyIsSelected_onlyAppearsOnANewTabUntilASiteIsLoaded()", + "BrowsingHistoryTests", + "BrowsingHistoryTests\/test_history_showsVisitedSiteAfterClosingAndReopeningWindow()", + "BrowsingHistoryTests\/test_recentlyVisited_showsLastVisitedSite()", + "BrowsingHistoryTests\/test_reopenLastClosedWindowMenuItem_canReopenTabsOfLastClosedWindow()", + "FindInPageTests", + "FindInPageTests\/test_findInPage_canBeClosedWithEscape()", + "FindInPageTests\/test_findInPage_canBeClosedWithHideFindMenuItem()", + "FindInPageTests\/test_findInPage_canBeClosedWithShiftCommandF()", + "FindInPageTests\/test_findInPage_canBeOpenedWithKeyCommand()", + "FindInPageTests\/test_findInPage_canBeOpenedWithMenuBarItem()", + "FindInPageTests\/test_findInPage_canBeOpenedWithMoreOptionsMenuItem()", + "FindInPageTests\/test_findInPage_showsCorrectNumberOfOccurrences()", + "FindInPageTests\/test_findInPage_showsFocusAndOccurrenceHighlighting()", + "FindInPageTests\/test_findNext_commandGGoesToNextOccurrence()", + "FindInPageTests\/test_findNext_menuItemGoesToNextOccurrence()", + "FindInPageTests\/test_findNext_nextArrowGoesToNextOccurrence()", + "OnboardingUITests", + "OnboardingUITests\/testOnboardingToBrowsing()", + "PermissionsTests", + "PinnedTabsTests", + "PinnedTabsTests\/testPinnedTabsFunctionality()", + "StateRestorationTests", + "StateRestorationTests\/test_tabStateAtRelaunch_shouldContainNoSitesVisitedInPreviousSession_whenReopenAllWindowsFromLastSessionIsUnset()", + "StateRestorationTests\/test_tabStateAtRelaunch_shouldContainTwoSitesVisitedInPreviousSession_whenReopenAllWindowsFromLastSessionIsSet()", + "TabBarTests", + "TabBarTests\/testWhenClickingAddTab_ThenTabsOpen()" ], "target" : { "containerPath" : "container:DuckDuckGo.xcodeproj", From dab8bff1ee70a019dc1aa11cc88244a222a5f16b Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Fri, 25 Oct 2024 16:31:21 -0300 Subject: [PATCH 35/90] Fix workflow --- .github/workflows/ui_tests.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index bcdde74633..71117dd8d5 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -125,7 +125,7 @@ jobs: defaults write com.duckduckgo.macos.browser.review moveToApplicationsFolderAlertSuppress 1 set -o pipefail && xcodebuild test-without-building \ -scheme "UI Tests CI" \ - -resultBundlePath TestResults + -resultBundlePath TestResults \ -derivedDataPath DerivedData \ -skipPackagePluginValidation \ -skipMacroValidation \ @@ -138,7 +138,8 @@ jobs: uses: kishikawakatsumi/xcresulttool@v1 if: success() || failure() with: - path: TestResults.xcresult + path: | + TestResults.xcresult show-passed-tests: false - name: Prepare test report From 5e75673287a1131b740682d4f7f980bc48c69241 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Fri, 25 Oct 2024 16:35:20 -0300 Subject: [PATCH 36/90] Fix workflow --- .github/workflows/ui_tests.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 71117dd8d5..48ed00cbb3 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -1,5 +1,4 @@ -.github/workflows/ui_tests.yml -gname: UI Tests +name: UI Tests on: workflow_dispatch: From b275b905b396ec3ce703249df670cafa9b1553c8 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Fri, 25 Oct 2024 17:08:41 -0300 Subject: [PATCH 37/90] Only run on macOS 15 --- .github/workflows/ui_tests.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 48ed00cbb3..b26f32b9e2 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -38,12 +38,8 @@ jobs: strategy: fail-fast: false matrix: - runner: [macos-13-xlarge, macos-14-xlarge, macos-15-xlarge] + runner: [macos-15-xlarge] include: - - xcode-version: "15.2" - runner: macos-13-xlarge - - xcode-version: "15.4" - runner: macos-14-xlarge - xcode-version: "16.0" runner: macos-15-xlarge @@ -140,6 +136,7 @@ jobs: path: | TestResults.xcresult show-passed-tests: false + show-code-coverage: false - name: Prepare test report if: always() From f7a2e248a87d73c2402d86d43b96ad3c2d449240 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Fri, 25 Oct 2024 18:05:41 -0300 Subject: [PATCH 38/90] Used fork that works with Xcode16 --- .github/workflows/ui_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index b26f32b9e2..6ddae1c380 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -130,7 +130,7 @@ jobs: | tee ui-tests.log - name: Generate complete report - uses: kishikawakatsumi/xcresulttool@v1 + uses: gemmakbarlow/xcresulttool@main if: success() || failure() with: path: | From e0c07b460c6cce5749f02a22f2d9f72a761d68d0 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Fri, 25 Oct 2024 19:05:06 -0300 Subject: [PATCH 39/90] Update workflow --- .github/workflows/ui_tests.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 6ddae1c380..69abf19d48 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -120,7 +120,6 @@ jobs: defaults write com.duckduckgo.macos.browser.review moveToApplicationsFolderAlertSuppress 1 set -o pipefail && xcodebuild test-without-building \ -scheme "UI Tests CI" \ - -resultBundlePath TestResults \ -derivedDataPath DerivedData \ -skipPackagePluginValidation \ -skipMacroValidation \ @@ -129,15 +128,6 @@ jobs: | tee -a xcodebuild.log \ | tee ui-tests.log - - name: Generate complete report - uses: gemmakbarlow/xcresulttool@main - if: success() || failure() - with: - path: | - TestResults.xcresult - show-passed-tests: false - show-code-coverage: false - - name: Prepare test report if: always() run: | From 6f1b64137874be2400aff409b87ad1d1eb11c241 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Fri, 25 Oct 2024 20:56:35 -0300 Subject: [PATCH 40/90] Run all tests --- UITests/UI Tests.xctestplan | 60 +------------------------------------ 1 file changed, 1 insertion(+), 59 deletions(-) diff --git a/UITests/UI Tests.xctestplan b/UITests/UI Tests.xctestplan index 34a8841a52..e1394ca735 100644 --- a/UITests/UI Tests.xctestplan +++ b/UITests/UI Tests.xctestplan @@ -36,65 +36,7 @@ "testTargets" : [ { "skippedTests" : [ - "AddressBarKeyboardShortcutsTests", - "AddressBarKeyboardShortcutsTests\/test_addressBar_allTextToTheLeftShouldBeDeletedByCommandDelete()", - "AddressBarKeyboardShortcutsTests\/test_addressBar_allTextToTheRightShouldBeDeletedByCommandForwardDelete()", - "AddressBarKeyboardShortcutsTests\/test_addressBar_beginning_canBeNavigatedToWithCommandLeftArrow()", - "AddressBarKeyboardShortcutsTests\/test_addressBar_caret_canNavigateThroughWordBoundariesUsingOptionLeftArrow()", - "AddressBarKeyboardShortcutsTests\/test_addressBar_caret_canNavigateThroughWordBoundariesUsingOptionRightArrow()", - "AddressBarKeyboardShortcutsTests\/test_addressBar_commandZShouldUndoLastAction()", - "AddressBarKeyboardShortcutsTests\/test_addressBar_end_canBeNavigatedToWithCommandRightArrow()", - "AddressBarKeyboardShortcutsTests\/test_addressBar_nearestLeftHandCharacterShouldBeDeletedByFnDelete()", - "AddressBarKeyboardShortcutsTests\/test_addressBar_nearestLeftHandWordWithinBoundariesShouldBeDeletedByOptDelete()", - "AddressBarKeyboardShortcutsTests\/test_addressBar_nearestRightHandCharacterShouldBeDeletedByFnForwardDelete()", - "AddressBarKeyboardShortcutsTests\/test_addressBar_nearestRightHandWordWithinBoundariesShouldBeDeletedByOptForwardDelete()", - "AddressBarKeyboardShortcutsTests\/test_addressBar_shiftCommandZShouldRedoLastUndoneAction()", - "AddressBarKeyboardShortcutsTests\/test_addressBar_url_canBeSelected()", - "AddressBarKeyboardShortcutsTests\/test_addressBar_url_word_canBeSelectedByDoubleClick()", - "AutocompleteTests", - "AutocompleteTests\/test_suggestions_showsTypedTitleOfBookmarkedPageAsBookmark()", - "AutocompleteTests\/test_suggestions_showsTypedTitleOfHistoryPageAsHistory()", - "AutocompleteTests\/test_suggestions_showsTypedTitleOfWebsiteNotInBookmarksOrHistoryAsWebsite()", - "BookmarkSearchTests", - "BookmarkSearchTests\/testDragAndDropToReorderIsNotPossibleWhenInSearchOnBookmarksManager()", - "BookmarkSearchTests\/testDragAndDropToReorderIsNotPossibleWhenInSearchOnBookmarksPanel()", - "BookmarkSearchTests\/testEmptyStateWhenSearchingInManager()", - "BookmarkSearchTests\/testEmptyStateWhenSearchingInPanel()", - "BookmarkSearchTests\/testFilteredResultsInManager()", - "BookmarkSearchTests\/testFilteredResultsInPanel()", - "BookmarkSearchTests\/testSearchActionIsDisabledOnBookmarksPanelWhenUserHasNoBookmarks()", - "BookmarkSearchTests\/testShowInFolderFunctionalityOnBookmarksManager()", - "BookmarkSearchTests\/testShowInFolderFunctionalityOnBookmarksPanel()", - "BookmarksBarTests", - "BookmarksBarTests\/test_bookmarksBar_whenShowBookmarksBarAlwaysIsSelected_alwaysDynamicallyAppearsOnWindow()", - "BookmarksBarTests\/test_bookmarksBar_whenShowBookmarksBarIsUnchecked_isNeverShownInWindowsAndTabs()", - "BookmarksBarTests\/test_bookmarksBar_whenShowBookmarksNewTabOnlyIsSelected_onlyAppearsOnANewTabUntilASiteIsLoaded()", - "BrowsingHistoryTests", - "BrowsingHistoryTests\/test_history_showsVisitedSiteAfterClosingAndReopeningWindow()", - "BrowsingHistoryTests\/test_recentlyVisited_showsLastVisitedSite()", - "BrowsingHistoryTests\/test_reopenLastClosedWindowMenuItem_canReopenTabsOfLastClosedWindow()", - "FindInPageTests", - "FindInPageTests\/test_findInPage_canBeClosedWithEscape()", - "FindInPageTests\/test_findInPage_canBeClosedWithHideFindMenuItem()", - "FindInPageTests\/test_findInPage_canBeClosedWithShiftCommandF()", - "FindInPageTests\/test_findInPage_canBeOpenedWithKeyCommand()", - "FindInPageTests\/test_findInPage_canBeOpenedWithMenuBarItem()", - "FindInPageTests\/test_findInPage_canBeOpenedWithMoreOptionsMenuItem()", - "FindInPageTests\/test_findInPage_showsCorrectNumberOfOccurrences()", - "FindInPageTests\/test_findInPage_showsFocusAndOccurrenceHighlighting()", - "FindInPageTests\/test_findNext_commandGGoesToNextOccurrence()", - "FindInPageTests\/test_findNext_menuItemGoesToNextOccurrence()", - "FindInPageTests\/test_findNext_nextArrowGoesToNextOccurrence()", - "OnboardingUITests", - "OnboardingUITests\/testOnboardingToBrowsing()", - "PermissionsTests", - "PinnedTabsTests", - "PinnedTabsTests\/testPinnedTabsFunctionality()", - "StateRestorationTests", - "StateRestorationTests\/test_tabStateAtRelaunch_shouldContainNoSitesVisitedInPreviousSession_whenReopenAllWindowsFromLastSessionIsUnset()", - "StateRestorationTests\/test_tabStateAtRelaunch_shouldContainTwoSitesVisitedInPreviousSession_whenReopenAllWindowsFromLastSessionIsSet()", - "TabBarTests", - "TabBarTests\/testWhenClickingAddTab_ThenTabsOpen()" + "PermissionsTests" ], "target" : { "containerPath" : "container:DuckDuckGo.xcodeproj", From 648ebc67f434b7bf54bd224ddb6a11d506e3ffbf Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Sat, 26 Oct 2024 10:25:07 -0300 Subject: [PATCH 41/90] Try to dismiss system notification --- UITests/AddressBarKeyboardShortcutsTests.swift | 1 + UITests/AutocompleteTests.swift | 1 + UITests/BookmarkSearchTests.swift | 1 + UITests/BookmarkSortTests.swift | 1 + UITests/BookmarksAndFavoritesTests.swift | 1 + UITests/BookmarksBarTests.swift | 1 + UITests/BrowsingHistoryTests.swift | 1 + UITests/Common/XCUIApplicationExtension.swift | 7 +++++++ UITests/FindInPageTests.swift | 1 + UITests/OnboardingUITests.swift | 1 + UITests/PermissionsTests.swift | 1 + UITests/PinnedTabsTests.swift | 1 + UITests/StateRestorationTests.swift | 1 + 13 files changed, 19 insertions(+) diff --git a/UITests/AddressBarKeyboardShortcutsTests.swift b/UITests/AddressBarKeyboardShortcutsTests.swift index 41f5c69826..976b878d13 100644 --- a/UITests/AddressBarKeyboardShortcutsTests.swift +++ b/UITests/AddressBarKeyboardShortcutsTests.swift @@ -35,6 +35,7 @@ class AddressBarKeyboardShortcutsTests: UITestCase { continueAfterFailure = false app = XCUIApplication() app.launchEnvironment["UITEST_MODE"] = "1" + app.dismissSystemNotificationIfPresent() urlStringForAddressBar = "https://duckduckgo.com/duckduckgo-help-pages/results/translation/" urlForAddressBar = URL(string: urlStringForAddressBar) addressBarTextField = app.windows.textFields["AddressBarViewController.addressBarTextField"] diff --git a/UITests/AutocompleteTests.swift b/UITests/AutocompleteTests.swift index 906e95fac2..7f72de26ad 100644 --- a/UITests/AutocompleteTests.swift +++ b/UITests/AutocompleteTests.swift @@ -55,6 +55,7 @@ class AutocompleteTests: UITestCase { app.launch() app.typeKey("w", modifierFlags: [.command, .option, .shift]) // Enforce a single window app.typeKey("n", modifierFlags: .command) + app.dismissSystemNotificationIfPresent() try resetAndArrangeBookmarksAndHistory() // Manually reset to a clean state } diff --git a/UITests/BookmarkSearchTests.swift b/UITests/BookmarkSearchTests.swift index ef6021c8f2..d04bb59d7d 100644 --- a/UITests/BookmarkSearchTests.swift +++ b/UITests/BookmarkSearchTests.swift @@ -48,6 +48,7 @@ class BookmarkSearchTests: UITestCase { app = XCUIApplication() app.launchEnvironment["UITEST_MODE"] = "1" app.launch() + app.dismissSystemNotificationIfPresent() app.resetBookmarks() enforceSingleWindow() } diff --git a/UITests/BookmarkSortTests.swift b/UITests/BookmarkSortTests.swift index c2ebff0a30..afa10adae6 100644 --- a/UITests/BookmarkSortTests.swift +++ b/UITests/BookmarkSortTests.swift @@ -38,6 +38,7 @@ class BookmarkSortTests: UITestCase { app = XCUIApplication() app.launchEnvironment["UITEST_MODE"] = "1" app.launch() + app.dismissSystemNotificationIfPresent() app.resetBookmarks() app.enforceSingleWindow() } diff --git a/UITests/BookmarksAndFavoritesTests.swift b/UITests/BookmarksAndFavoritesTests.swift index a7ad55d948..b1bb3bf437 100644 --- a/UITests/BookmarksAndFavoritesTests.swift +++ b/UITests/BookmarksAndFavoritesTests.swift @@ -99,6 +99,7 @@ class BookmarksAndFavoritesTests: UITestCase { resetBookmarks() app.typeKey("w", modifierFlags: [.command, .option, .shift]) // Let's enforce a single window app.typeKey("n", modifierFlags: .command) + app.dismissSystemNotificationIfPresent() } func test_bookmarks_canBeAddedTo_withContextClickBookmarkThisPage() { diff --git a/UITests/BookmarksBarTests.swift b/UITests/BookmarksBarTests.swift index 062070b2d9..606ef62bcc 100644 --- a/UITests/BookmarksBarTests.swift +++ b/UITests/BookmarksBarTests.swift @@ -59,6 +59,7 @@ class BookmarksBarTests: UITestCase { resetBookmarksAndAddOneBookmark() app.typeKey("w", modifierFlags: [.command, .option, .shift]) // Close windows app.typeKey("n", modifierFlags: [.command]) + app.dismissSystemNotificationIfPresent() openSettingsAndSetShowBookmarksBarToUnchecked() openSecondWindowAndVisitSite() siteWindow = app.windows.containing(.webView, identifier: pageTitle).firstMatch diff --git a/UITests/BrowsingHistoryTests.swift b/UITests/BrowsingHistoryTests.swift index 775a7e756c..a4043dcad6 100644 --- a/UITests/BrowsingHistoryTests.swift +++ b/UITests/BrowsingHistoryTests.swift @@ -44,6 +44,7 @@ class BrowsingHistoryTests: UITestCase { app.launch() app.typeKey("w", modifierFlags: [.command, .option, .shift]) // Enforce a single window app.typeKey("n", modifierFlags: .command) + app.dismissSystemNotificationIfPresent() XCTAssertTrue( historyMenuBarItem.waitForExistence(timeout: UITests.Timeouts.elementExistence), diff --git a/UITests/Common/XCUIApplicationExtension.swift b/UITests/Common/XCUIApplicationExtension.swift index 6d47988925..f40dbad37e 100644 --- a/UITests/Common/XCUIApplicationExtension.swift +++ b/UITests/Common/XCUIApplicationExtension.swift @@ -145,4 +145,11 @@ extension XCUIApplication { XCTAssertTrue(cellLabel.exists, "Cell at index \(index) has unexpected label.") } } + + func dismissSystemNotificationIfPresent() { + let notification = XCUIApplication().alerts["Background Items Added"] + if notification.exists { + notification.buttons["Close"].tap() // Adjust if the button has a different label + } + } } diff --git a/UITests/FindInPageTests.swift b/UITests/FindInPageTests.swift index 7c2fc87dbc..57dfbbfd09 100644 --- a/UITests/FindInPageTests.swift +++ b/UITests/FindInPageTests.swift @@ -46,6 +46,7 @@ class FindInPageTests: UITestCase { app.launch() app.typeKey("w", modifierFlags: [.command, .option, .shift]) // Let's enforce a single window app.typeKey("n", modifierFlags: .command) + app.dismissSystemNotificationIfPresent() } func test_findInPage_canBeOpenedWithKeyCommand() throws { diff --git a/UITests/OnboardingUITests.swift b/UITests/OnboardingUITests.swift index 60869bcf47..574a3416d4 100644 --- a/UITests/OnboardingUITests.swift +++ b/UITests/OnboardingUITests.swift @@ -32,6 +32,7 @@ final class OnboardingUITests: UITestCase { app.launch() app.typeKey("w", modifierFlags: [.command, .option, .shift]) app.typeKey("n", modifierFlags: .command) + app.dismissSystemNotificationIfPresent() let welcomeWindow = app.windows["Welcome"] let optionsButton = welcomeWindow.buttons["NavigationBarViewController.optionsButton"] diff --git a/UITests/PermissionsTests.swift b/UITests/PermissionsTests.swift index 9bbba9b031..5badce13b2 100644 --- a/UITests/PermissionsTests.swift +++ b/UITests/PermissionsTests.swift @@ -62,6 +62,7 @@ class PermissionsTests: UITestCase { app.launch() app.activate() + app.dismissSystemNotificationIfPresent() historyMenuBarItem.clickAfterExistenceTestSucceeds() clearAllHistoryMenuItem.clickAfterExistenceTestSucceeds() clearAllHistoryAlertClearButton.clickAfterExistenceTestSucceeds() // Manually remove the history diff --git a/UITests/PinnedTabsTests.swift b/UITests/PinnedTabsTests.swift index a39edaa912..abe9ee19be 100644 --- a/UITests/PinnedTabsTests.swift +++ b/UITests/PinnedTabsTests.swift @@ -29,6 +29,7 @@ class PinnedTabsTests: UITestCase { app.launch() app.typeKey("n", modifierFlags: .command) + app.dismissSystemNotificationIfPresent() } override class func setUp() { diff --git a/UITests/StateRestorationTests.swift b/UITests/StateRestorationTests.swift index e25dd42620..93669dc2b0 100644 --- a/UITests/StateRestorationTests.swift +++ b/UITests/StateRestorationTests.swift @@ -51,6 +51,7 @@ class StateRestorationTests: UITestCase { app.launch() app.typeKey("w", modifierFlags: [.command, .option, .shift]) // Let's enforce a single window app.typeKey("n", modifierFlags: .command) + app.dismissSystemNotificationIfPresent() } override func tearDownWithError() throws { From 0d51e21f9dbaa94d82b3dc28ad1ff72663bdfaad Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Sat, 26 Oct 2024 12:43:32 -0300 Subject: [PATCH 42/90] Revert "Try to dismiss system notification" This reverts commit 648ebc67f434b7bf54bd224ddb6a11d506e3ffbf. --- UITests/AddressBarKeyboardShortcutsTests.swift | 1 - UITests/AutocompleteTests.swift | 1 - UITests/BookmarkSearchTests.swift | 1 - UITests/BookmarkSortTests.swift | 1 - UITests/BookmarksAndFavoritesTests.swift | 1 - UITests/BookmarksBarTests.swift | 1 - UITests/BrowsingHistoryTests.swift | 1 - UITests/Common/XCUIApplicationExtension.swift | 7 ------- UITests/FindInPageTests.swift | 1 - UITests/OnboardingUITests.swift | 1 - UITests/PermissionsTests.swift | 1 - UITests/PinnedTabsTests.swift | 1 - UITests/StateRestorationTests.swift | 1 - 13 files changed, 19 deletions(-) diff --git a/UITests/AddressBarKeyboardShortcutsTests.swift b/UITests/AddressBarKeyboardShortcutsTests.swift index 976b878d13..41f5c69826 100644 --- a/UITests/AddressBarKeyboardShortcutsTests.swift +++ b/UITests/AddressBarKeyboardShortcutsTests.swift @@ -35,7 +35,6 @@ class AddressBarKeyboardShortcutsTests: UITestCase { continueAfterFailure = false app = XCUIApplication() app.launchEnvironment["UITEST_MODE"] = "1" - app.dismissSystemNotificationIfPresent() urlStringForAddressBar = "https://duckduckgo.com/duckduckgo-help-pages/results/translation/" urlForAddressBar = URL(string: urlStringForAddressBar) addressBarTextField = app.windows.textFields["AddressBarViewController.addressBarTextField"] diff --git a/UITests/AutocompleteTests.swift b/UITests/AutocompleteTests.swift index 7f72de26ad..906e95fac2 100644 --- a/UITests/AutocompleteTests.swift +++ b/UITests/AutocompleteTests.swift @@ -55,7 +55,6 @@ class AutocompleteTests: UITestCase { app.launch() app.typeKey("w", modifierFlags: [.command, .option, .shift]) // Enforce a single window app.typeKey("n", modifierFlags: .command) - app.dismissSystemNotificationIfPresent() try resetAndArrangeBookmarksAndHistory() // Manually reset to a clean state } diff --git a/UITests/BookmarkSearchTests.swift b/UITests/BookmarkSearchTests.swift index d04bb59d7d..ef6021c8f2 100644 --- a/UITests/BookmarkSearchTests.swift +++ b/UITests/BookmarkSearchTests.swift @@ -48,7 +48,6 @@ class BookmarkSearchTests: UITestCase { app = XCUIApplication() app.launchEnvironment["UITEST_MODE"] = "1" app.launch() - app.dismissSystemNotificationIfPresent() app.resetBookmarks() enforceSingleWindow() } diff --git a/UITests/BookmarkSortTests.swift b/UITests/BookmarkSortTests.swift index afa10adae6..c2ebff0a30 100644 --- a/UITests/BookmarkSortTests.swift +++ b/UITests/BookmarkSortTests.swift @@ -38,7 +38,6 @@ class BookmarkSortTests: UITestCase { app = XCUIApplication() app.launchEnvironment["UITEST_MODE"] = "1" app.launch() - app.dismissSystemNotificationIfPresent() app.resetBookmarks() app.enforceSingleWindow() } diff --git a/UITests/BookmarksAndFavoritesTests.swift b/UITests/BookmarksAndFavoritesTests.swift index b1bb3bf437..a7ad55d948 100644 --- a/UITests/BookmarksAndFavoritesTests.swift +++ b/UITests/BookmarksAndFavoritesTests.swift @@ -99,7 +99,6 @@ class BookmarksAndFavoritesTests: UITestCase { resetBookmarks() app.typeKey("w", modifierFlags: [.command, .option, .shift]) // Let's enforce a single window app.typeKey("n", modifierFlags: .command) - app.dismissSystemNotificationIfPresent() } func test_bookmarks_canBeAddedTo_withContextClickBookmarkThisPage() { diff --git a/UITests/BookmarksBarTests.swift b/UITests/BookmarksBarTests.swift index 606ef62bcc..062070b2d9 100644 --- a/UITests/BookmarksBarTests.swift +++ b/UITests/BookmarksBarTests.swift @@ -59,7 +59,6 @@ class BookmarksBarTests: UITestCase { resetBookmarksAndAddOneBookmark() app.typeKey("w", modifierFlags: [.command, .option, .shift]) // Close windows app.typeKey("n", modifierFlags: [.command]) - app.dismissSystemNotificationIfPresent() openSettingsAndSetShowBookmarksBarToUnchecked() openSecondWindowAndVisitSite() siteWindow = app.windows.containing(.webView, identifier: pageTitle).firstMatch diff --git a/UITests/BrowsingHistoryTests.swift b/UITests/BrowsingHistoryTests.swift index a4043dcad6..775a7e756c 100644 --- a/UITests/BrowsingHistoryTests.swift +++ b/UITests/BrowsingHistoryTests.swift @@ -44,7 +44,6 @@ class BrowsingHistoryTests: UITestCase { app.launch() app.typeKey("w", modifierFlags: [.command, .option, .shift]) // Enforce a single window app.typeKey("n", modifierFlags: .command) - app.dismissSystemNotificationIfPresent() XCTAssertTrue( historyMenuBarItem.waitForExistence(timeout: UITests.Timeouts.elementExistence), diff --git a/UITests/Common/XCUIApplicationExtension.swift b/UITests/Common/XCUIApplicationExtension.swift index f40dbad37e..6d47988925 100644 --- a/UITests/Common/XCUIApplicationExtension.swift +++ b/UITests/Common/XCUIApplicationExtension.swift @@ -145,11 +145,4 @@ extension XCUIApplication { XCTAssertTrue(cellLabel.exists, "Cell at index \(index) has unexpected label.") } } - - func dismissSystemNotificationIfPresent() { - let notification = XCUIApplication().alerts["Background Items Added"] - if notification.exists { - notification.buttons["Close"].tap() // Adjust if the button has a different label - } - } } diff --git a/UITests/FindInPageTests.swift b/UITests/FindInPageTests.swift index 57dfbbfd09..7c2fc87dbc 100644 --- a/UITests/FindInPageTests.swift +++ b/UITests/FindInPageTests.swift @@ -46,7 +46,6 @@ class FindInPageTests: UITestCase { app.launch() app.typeKey("w", modifierFlags: [.command, .option, .shift]) // Let's enforce a single window app.typeKey("n", modifierFlags: .command) - app.dismissSystemNotificationIfPresent() } func test_findInPage_canBeOpenedWithKeyCommand() throws { diff --git a/UITests/OnboardingUITests.swift b/UITests/OnboardingUITests.swift index 574a3416d4..60869bcf47 100644 --- a/UITests/OnboardingUITests.swift +++ b/UITests/OnboardingUITests.swift @@ -32,7 +32,6 @@ final class OnboardingUITests: UITestCase { app.launch() app.typeKey("w", modifierFlags: [.command, .option, .shift]) app.typeKey("n", modifierFlags: .command) - app.dismissSystemNotificationIfPresent() let welcomeWindow = app.windows["Welcome"] let optionsButton = welcomeWindow.buttons["NavigationBarViewController.optionsButton"] diff --git a/UITests/PermissionsTests.swift b/UITests/PermissionsTests.swift index 5badce13b2..9bbba9b031 100644 --- a/UITests/PermissionsTests.swift +++ b/UITests/PermissionsTests.swift @@ -62,7 +62,6 @@ class PermissionsTests: UITestCase { app.launch() app.activate() - app.dismissSystemNotificationIfPresent() historyMenuBarItem.clickAfterExistenceTestSucceeds() clearAllHistoryMenuItem.clickAfterExistenceTestSucceeds() clearAllHistoryAlertClearButton.clickAfterExistenceTestSucceeds() // Manually remove the history diff --git a/UITests/PinnedTabsTests.swift b/UITests/PinnedTabsTests.swift index abe9ee19be..a39edaa912 100644 --- a/UITests/PinnedTabsTests.swift +++ b/UITests/PinnedTabsTests.swift @@ -29,7 +29,6 @@ class PinnedTabsTests: UITestCase { app.launch() app.typeKey("n", modifierFlags: .command) - app.dismissSystemNotificationIfPresent() } override class func setUp() { diff --git a/UITests/StateRestorationTests.swift b/UITests/StateRestorationTests.swift index 93669dc2b0..e25dd42620 100644 --- a/UITests/StateRestorationTests.swift +++ b/UITests/StateRestorationTests.swift @@ -51,7 +51,6 @@ class StateRestorationTests: UITestCase { app.launch() app.typeKey("w", modifierFlags: [.command, .option, .shift]) // Let's enforce a single window app.typeKey("n", modifierFlags: .command) - app.dismissSystemNotificationIfPresent() } override func tearDownWithError() throws { From 3974226900f8148a7fe4df7b05296ac734fd9b9f Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Tue, 29 Oct 2024 11:47:45 -0300 Subject: [PATCH 43/90] Revert screenshot --- UITests/Common/UITests.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/UITests/Common/UITests.swift b/UITests/Common/UITests.swift index 837ba3675c..609ef41958 100644 --- a/UITests/Common/UITests.swift +++ b/UITests/Common/UITests.swift @@ -118,15 +118,15 @@ class TestFailureObserver: NSObject, XCTestObservation { } class UITestCase: XCTestCase { - private static let failureObserver = TestFailureObserver() +// private static let failureObserver = TestFailureObserver() override class func setUp() { super.setUp() - XCTestObservationCenter.shared.addTestObserver(failureObserver) +// XCTestObservationCenter.shared.addTestObserver(failureObserver) } override class func tearDown() { - XCTestObservationCenter.shared.removeTestObserver(failureObserver) +// XCTestObservationCenter.shared.removeTestObserver(failureObserver) super.tearDown() } } From cf4fb30366797f1604c70f939b2c2da412ed988a Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Tue, 29 Oct 2024 14:38:28 -0300 Subject: [PATCH 44/90] Revert "Revert screenshot" This reverts commit 3974226900f8148a7fe4df7b05296ac734fd9b9f. --- UITests/Common/UITests.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/UITests/Common/UITests.swift b/UITests/Common/UITests.swift index 609ef41958..837ba3675c 100644 --- a/UITests/Common/UITests.swift +++ b/UITests/Common/UITests.swift @@ -118,15 +118,15 @@ class TestFailureObserver: NSObject, XCTestObservation { } class UITestCase: XCTestCase { -// private static let failureObserver = TestFailureObserver() + private static let failureObserver = TestFailureObserver() override class func setUp() { super.setUp() -// XCTestObservationCenter.shared.addTestObserver(failureObserver) + XCTestObservationCenter.shared.addTestObserver(failureObserver) } override class func tearDown() { -// XCTestObservationCenter.shared.removeTestObserver(failureObserver) + XCTestObservationCenter.shared.removeTestObserver(failureObserver) super.tearDown() } } From db87e70d62d372b96d939eddee08e8438fb0ee11 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Tue, 29 Oct 2024 15:30:41 -0300 Subject: [PATCH 45/90] Update screen resolution --- .github/workflows/ui_tests.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 69abf19d48..de8ebec9b6 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -115,6 +115,12 @@ jobs: cd DuckDuckGo-review-*.app && unzip DuckDuckGo-*.zip mv -f "DuckDuckGo Review.app" "../DerivedData/Build/Products/Review/DuckDuckGo Review.app" + - name: Increase screen resolution + run: | + system_profiler SPDisplaysDataType | grep Resolution + "/Library/Application Support/VMware Tools/vmware-resolutionSet" 2560 1440 + system_profiler SPDisplaysDataType | grep Resolution + - name: Run UI Tests run: | defaults write com.duckduckgo.macos.browser.review moveToApplicationsFolderAlertSuppress 1 From 2bbe27b45c5624e78f2acdce4a76a41828f5572c Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Tue, 29 Oct 2024 17:16:11 -0300 Subject: [PATCH 46/90] Set window width --- .github/workflows/ui_tests.yml | 6 ------ DuckDuckGo/Application/AppDelegate.swift | 6 ++++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index de8ebec9b6..69abf19d48 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -115,12 +115,6 @@ jobs: cd DuckDuckGo-review-*.app && unzip DuckDuckGo-*.zip mv -f "DuckDuckGo Review.app" "../DerivedData/Build/Products/Review/DuckDuckGo Review.app" - - name: Increase screen resolution - run: | - system_profiler SPDisplaysDataType | grep Resolution - "/Library/Application Support/VMware Tools/vmware-resolutionSet" 2560 1440 - system_profiler SPDisplaysDataType | grep Resolution - - name: Run UI Tests run: | defaults write com.duckduckgo.macos.browser.review moveToApplicationsFolderAlertSuppress 1 diff --git a/DuckDuckGo/Application/AppDelegate.swift b/DuckDuckGo/Application/AppDelegate.swift index b7fa9ca764..b75f75e575 100644 --- a/DuckDuckGo/Application/AppDelegate.swift +++ b/DuckDuckGo/Application/AppDelegate.swift @@ -408,6 +408,12 @@ final class AppDelegate: NSObject, NSApplicationDelegate { PixelKit.fire(GeneralPixel.crashOnCrashHandlersSetUp) didCrashDuringCrashHandlersSetUp = false } + +// if NSApp.runType == .uiTests { + if let window = WindowsManager.windows.first(where: { $0 is MainWindow }) { + window.setFrame(NSRect(x: 0, y: 0, width: 768, height: window.frame.height), display: true) + } +// } } private func fireFailedCompilationsPixelIfNeeded() { From ab1d61b8364669df91d1f2f8014a1da9993263d9 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Tue, 29 Oct 2024 18:15:56 -0300 Subject: [PATCH 47/90] Change new window size --- DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift b/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift index 0297f7330f..98950dbc7a 100644 --- a/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift +++ b/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift @@ -168,7 +168,7 @@ final class MoreOptionsMenu: NSMenu { @MainActor @objc func newWindow(_ sender: NSMenuItem) { - WindowsManager.openNewWindow() + WindowsManager.openNewWindow(contentSize: .init(width: 768, height: 1024)) } @MainActor From 7d53a9b9d7a45f96872231b7ccf4700e0e67118d Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 10:01:59 -0300 Subject: [PATCH 48/90] Try other width --- DuckDuckGo/Application/AppDelegate.swift | 2 +- DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DuckDuckGo/Application/AppDelegate.swift b/DuckDuckGo/Application/AppDelegate.swift index b75f75e575..4f03efb152 100644 --- a/DuckDuckGo/Application/AppDelegate.swift +++ b/DuckDuckGo/Application/AppDelegate.swift @@ -411,7 +411,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate { // if NSApp.runType == .uiTests { if let window = WindowsManager.windows.first(where: { $0 is MainWindow }) { - window.setFrame(NSRect(x: 0, y: 0, width: 768, height: window.frame.height), display: true) + window.setFrame(NSRect(x: 0, y: 0, width: 400, height: window.frame.height), display: true) } // } } diff --git a/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift b/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift index 98950dbc7a..1921cabc16 100644 --- a/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift +++ b/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift @@ -168,7 +168,7 @@ final class MoreOptionsMenu: NSMenu { @MainActor @objc func newWindow(_ sender: NSMenuItem) { - WindowsManager.openNewWindow(contentSize: .init(width: 768, height: 1024)) + WindowsManager.openNewWindow(contentSize: .init(width: 400, height: 1024)) } @MainActor From 37b2a59b82b4816a47b2c71ddd92c8e139619505 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 12:18:18 -0300 Subject: [PATCH 49/90] Resize window - This tries to put the origin at 0,0 and putting a lower height so it does not collapse --- DuckDuckGo/Application/AppDelegate.swift | 2 +- .../NavigationBar/View/MoreOptionsMenu.swift | 2 +- DuckDuckGo/Windows/View/WindowsManager.swift | 22 +++++++++++++------ 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/DuckDuckGo/Application/AppDelegate.swift b/DuckDuckGo/Application/AppDelegate.swift index 4f03efb152..107a08bb00 100644 --- a/DuckDuckGo/Application/AppDelegate.swift +++ b/DuckDuckGo/Application/AppDelegate.swift @@ -411,7 +411,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate { // if NSApp.runType == .uiTests { if let window = WindowsManager.windows.first(where: { $0 is MainWindow }) { - window.setFrame(NSRect(x: 0, y: 0, width: 400, height: window.frame.height), display: true) + window.setFrame(NSRect(x: 0, y: 0, width: window.frame.width, height: 600), display: true) } // } } diff --git a/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift b/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift index 1921cabc16..0297f7330f 100644 --- a/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift +++ b/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift @@ -168,7 +168,7 @@ final class MoreOptionsMenu: NSMenu { @MainActor @objc func newWindow(_ sender: NSMenuItem) { - WindowsManager.openNewWindow(contentSize: .init(width: 400, height: 1024)) + WindowsManager.openNewWindow() } @MainActor diff --git a/DuckDuckGo/Windows/View/WindowsManager.swift b/DuckDuckGo/Windows/View/WindowsManager.swift index 6dcc6ead90..71bf223d63 100644 --- a/DuckDuckGo/Windows/View/WindowsManager.swift +++ b/DuckDuckGo/Windows/View/WindowsManager.swift @@ -68,19 +68,27 @@ final class WindowsManager { burnerMode: burnerMode, autofillPopoverPresenter: autofillPopoverPresenter) - if let contentSize { - mainWindowController.window?.setContentSize(contentSize) - } +// if let contentSize { +// mainWindowController.window?.setContentSize(contentSize) +// } mainWindowController.window?.setIsMiniaturized(isMiniaturized) - if let droppingPoint { - mainWindowController.window?.setFrameOrigin(droppingPoint: droppingPoint) +// if let droppingPoint { +// mainWindowController.window?.setFrameOrigin(droppingPoint: droppingPoint) +// } else if let sourceWindow = self.findPositioningSourceWindow(for: tabCollectionViewModel?.tabs.first) { +// mainWindowController.window?.setFrameOrigin(cascadedFrom: sourceWindow) +// } - } else if let sourceWindow = self.findPositioningSourceWindow(for: tabCollectionViewModel?.tabs.first) { - mainWindowController.window?.setFrameOrigin(cascadedFrom: sourceWindow) + if let window = mainWindowController.window { + mainWindowController.window?.setContentSize(NSSize(width: window.frame.width, height: 600)) + } else { + mainWindowController.window?.setContentSize(NSSize(width: 600, height: 600)) } + mainWindowController.window?.setFrameOrigin(NSPoint(x: 0, y: 0)) + + if showWindow { mainWindowController.showWindow(self) if !NSApp.isActive { From add15a23376162f0a35ec831eb72f1759791abc6 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 13:07:19 -0300 Subject: [PATCH 50/90] Revert window sizing and use screen resolution on workflow --- .github/workflows/ui_tests.yml | 10 +++++++++ DuckDuckGo/Application/AppDelegate.swift | 6 ----- DuckDuckGo/Windows/View/WindowsManager.swift | 23 ++++++-------------- 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 69abf19d48..b5c79c9b38 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -50,6 +50,16 @@ jobs: timeout-minutes: 120 steps: + - name: default screen resolution + run: system_profiler SPDisplaysDataType | grep Resolution + + - name: change screen resolution + run: | + "/Library/Application Support/VMware Tools/vmware-resolutionSet" 2560 1600 + + - name: new screen resolution + run: system_profiler SPDisplaysDataType | grep Resolution + - name: Register SSH key for certificates repository access uses: webfactory/ssh-agent@v0.7.0 with: diff --git a/DuckDuckGo/Application/AppDelegate.swift b/DuckDuckGo/Application/AppDelegate.swift index 107a08bb00..b7fa9ca764 100644 --- a/DuckDuckGo/Application/AppDelegate.swift +++ b/DuckDuckGo/Application/AppDelegate.swift @@ -408,12 +408,6 @@ final class AppDelegate: NSObject, NSApplicationDelegate { PixelKit.fire(GeneralPixel.crashOnCrashHandlersSetUp) didCrashDuringCrashHandlersSetUp = false } - -// if NSApp.runType == .uiTests { - if let window = WindowsManager.windows.first(where: { $0 is MainWindow }) { - window.setFrame(NSRect(x: 0, y: 0, width: window.frame.width, height: 600), display: true) - } -// } } private func fireFailedCompilationsPixelIfNeeded() { diff --git a/DuckDuckGo/Windows/View/WindowsManager.swift b/DuckDuckGo/Windows/View/WindowsManager.swift index 71bf223d63..f24e936c17 100644 --- a/DuckDuckGo/Windows/View/WindowsManager.swift +++ b/DuckDuckGo/Windows/View/WindowsManager.swift @@ -68,27 +68,18 @@ final class WindowsManager { burnerMode: burnerMode, autofillPopoverPresenter: autofillPopoverPresenter) -// if let contentSize { -// mainWindowController.window?.setContentSize(contentSize) -// } + if let contentSize { + mainWindowController.window?.setContentSize(contentSize) + } mainWindowController.window?.setIsMiniaturized(isMiniaturized) -// if let droppingPoint { -// mainWindowController.window?.setFrameOrigin(droppingPoint: droppingPoint) -// } else if let sourceWindow = self.findPositioningSourceWindow(for: tabCollectionViewModel?.tabs.first) { -// mainWindowController.window?.setFrameOrigin(cascadedFrom: sourceWindow) -// } - - if let window = mainWindowController.window { - mainWindowController.window?.setContentSize(NSSize(width: window.frame.width, height: 600)) - } else { - mainWindowController.window?.setContentSize(NSSize(width: 600, height: 600)) + if let droppingPoint { + mainWindowController.window?.setFrameOrigin(droppingPoint: droppingPoint) + } else if let sourceWindow = self.findPositioningSourceWindow(for: tabCollectionViewModel?.tabs.first) { + mainWindowController.window?.setFrameOrigin(cascadedFrom: sourceWindow) } - mainWindowController.window?.setFrameOrigin(NSPoint(x: 0, y: 0)) - - if showWindow { mainWindowController.showWindow(self) if !NSApp.isActive { From 8015e37e8b578476aaaf276c6a6694982d7a26eb Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 13:29:05 -0300 Subject: [PATCH 51/90] Create test screen size workflow --- .github/workflows/screen_size.yml | 29 +++++++++++++++++++++++++++++ .github/workflows/ui_tests.yml | 9 --------- 2 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 .github/workflows/screen_size.yml diff --git a/.github/workflows/screen_size.yml b/.github/workflows/screen_size.yml new file mode 100644 index 0000000000..78103794a3 --- /dev/null +++ b/.github/workflows/screen_size.yml @@ -0,0 +1,29 @@ +# This is a basic workflow to help you get started with Actions + +name: Screen Size Tests + +# Controls when the action will run. +on: + workflow_dispatch: +jobs: + screentest: + name: UI tests + runs-on: ${{ matrix.runner }} + strategy: + fail-fast: false + matrix: + runner: [macos-15-xlarge] + include: + - xcode-version: "16.0" + runner: macos-15-xlarge + + steps: + - name: default screen resolution + run: system_profiler SPDisplaysDataType | grep Resolution + + - name: change screen resolution + run: | + "/Library/Application Support/VMware Tools/vmware-resolutionSet" 1080 2160 + + - name: new screen resolution + run: system_profiler SPDisplaysDataType | grep Resolution \ No newline at end of file diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index b5c79c9b38..cc9f2707da 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -50,15 +50,6 @@ jobs: timeout-minutes: 120 steps: - - name: default screen resolution - run: system_profiler SPDisplaysDataType | grep Resolution - - - name: change screen resolution - run: | - "/Library/Application Support/VMware Tools/vmware-resolutionSet" 2560 1600 - - - name: new screen resolution - run: system_profiler SPDisplaysDataType | grep Resolution - name: Register SSH key for certificates repository access uses: webfactory/ssh-agent@v0.7.0 From 540fcf24abdb7362c3cdf84cf26492fbab116931 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 13:31:57 -0300 Subject: [PATCH 52/90] Test Screen size --- .github/workflows/ui_tests.yml | 170 +++------------------------------ 1 file changed, 15 insertions(+), 155 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index cc9f2707da..78103794a3 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -1,39 +1,13 @@ -name: UI Tests +# This is a basic workflow to help you get started with Actions +name: Screen Size Tests + +# Controls when the action will run. on: workflow_dispatch: - schedule: - - cron: '0 3 * * 1-5' # 3AM UTC offsetted to legacy to avoid action-junit-report@v4 bug - pull_request: - branches: - - hotfix/* - - release/* - jobs: - create-notarized-app: - name: Build Notarized Review app - uses: ./.github/workflows/build_notarized.yml - with: - release-type: review - create-dmg: false - branch: ${{ github.sha }} - secrets: - APPLE_API_KEY_BASE64: ${{ secrets.APPLE_API_KEY_BASE64 }} - APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }} - APPLE_API_KEY_ISSUER: ${{ secrets.APPLE_API_KEY_ISSUER }} - ASANA_ACCESS_TOKEN: ${{ secrets.ASANA_ACCESS_TOKEN }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_ACCESS_KEY_ID_RELEASE_S3: ${{ secrets.AWS_ACCESS_KEY_ID_RELEASE_S3 }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_SECRET_ACCESS_KEY_RELEASE_S3: ${{ secrets.AWS_SECRET_ACCESS_KEY_RELEASE_S3 }} - MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} - MM_HANDLES_BASE64: ${{ secrets.MM_HANDLES_BASE64 }} - MM_WEBHOOK_URL: ${{ secrets.MM_WEBHOOK_URL }} - SSH_PRIVATE_KEY_FASTLANE_MATCH: ${{ secrets.SSH_PRIVATE_KEY_FASTLANE_MATCH }} - - ui-tests: + screentest: name: UI tests - needs: create-notarized-app runs-on: ${{ matrix.runner }} strategy: fail-fast: false @@ -42,128 +16,14 @@ jobs: include: - xcode-version: "16.0" runner: macos-15-xlarge - - concurrency: - group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.runner }} - cancel-in-progress: true - - timeout-minutes: 120 - - steps: - - - name: Register SSH key for certificates repository access - uses: webfactory/ssh-agent@v0.7.0 - with: - ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY_FASTLANE_MATCH }} - - - name: Check out the code - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Set up fastlane - run: bundle install - - - name: Sync code signing assets - env: - APPLE_API_KEY_BASE64: ${{ secrets.APPLE_API_KEY_BASE64 }} - APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }} - APPLE_API_KEY_ISSUER: ${{ secrets.APPLE_API_KEY_ISSUER }} - MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} - SSH_PRIVATE_KEY_FASTLANE_MATCH: ${{ secrets.SSH_PRIVATE_KEY_FASTLANE_MATCH }} - run: | - bundle exec fastlane sync_signing_ci - - - name: Download and unzip artifact - uses: actions/download-artifact@v4 - - - name: Set cache key hash - run: | - has_only_tags=$(jq '[ .pins[].state | has("version") ] | all' DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved) - if [[ "$has_only_tags" == "true" ]]; then - echo "cache_key_hash=${{ hashFiles('DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved') }}" >> $GITHUB_ENV - else - echo "Package.resolved contains dependencies specified by branch or commit, skipping cache." - fi - - - name: Cache SPM - if: env.cache_key_hash - uses: actions/cache@v4 - with: - path: DerivedData/SourcePackages - key: ${{ runner.os }}-spm-${{ env.cache_key_hash }} - restore-keys: | - ${{ runner.os }}-spm- - - - name: Select Xcode - run: | - # Override .xcode_version because 15.4 is not available on macos 13 - echo "${{ matrix.xcode-version }}" > .xcode-version - sudo xcode-select -s /Applications/Xcode_$(<.xcode-version).app/Contents/Developer - - - name: Build for testing - run: | - set -o pipefail && xcodebuild build-for-testing \ - -scheme "UI Tests CI" \ - -derivedDataPath DerivedData \ - -skipPackagePluginValidation \ - -skipMacroValidation \ - | tee xcodebuild.log \ - | xcbeautify - - - name: Unzip and Copy app to /DerivedData - run: | - cd DuckDuckGo-review-*.app && unzip DuckDuckGo-*.zip - mv -f "DuckDuckGo Review.app" "../DerivedData/Build/Products/Review/DuckDuckGo Review.app" - - - name: Run UI Tests - run: | - defaults write com.duckduckgo.macos.browser.review moveToApplicationsFolderAlertSuppress 1 - set -o pipefail && xcodebuild test-without-building \ - -scheme "UI Tests CI" \ - -derivedDataPath DerivedData \ - -skipPackagePluginValidation \ - -skipMacroValidation \ - -test-iterations 2 \ - -retry-tests-on-failure \ - | tee -a xcodebuild.log \ - | tee ui-tests.log - - - name: Prepare test report - if: always() - run: | - xcbeautify --report junit --report-path . --junit-report-filename ui-tests.xml < ui-tests.log - - - name: Publish tests report - uses: mikepenz/action-junit-report@v4 - if: always() - with: - check_name: "Test Report ${{ matrix.runner }}" - report_paths: ui-tests.xml - - - name: Upload logs when workflow failed - uses: actions/upload-artifact@v4 - if: failure() || cancelled() - with: - name: "BuildLogs ${{ matrix.runner }}" - path: | - xcodebuild.log - DerivedData/Logs/Test/*.xcresult - ~/Library/Logs/DiagnosticReports/* - retention-days: 7 - - notify-failure: - name: Notify on failure - if: ${{ always() && github.event_name == 'schedule' && (needs.ui-tests.result == 'failure' || needs.ui-tests.result == 'cancelled') }} - needs: [ui-tests] - runs-on: ubuntu-latest - + steps: - - name: Create Asana task when workflow failed - uses: duckduckgo/native-github-asana-sync@v1.1 - with: - action: create-asana-task - asana-pat: ${{ secrets.ASANA_ACCESS_TOKEN }} - asana-project: ${{ vars.MACOS_APP_DEVELOPMENT_ASANA_PROJECT_ID }} - asana-task-name: GH Workflow Failure - UI Tests - asana-task-description: The UI Tests workflow has failed. See https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} + - name: default screen resolution + run: system_profiler SPDisplaysDataType | grep Resolution + + - name: change screen resolution + run: | + "/Library/Application Support/VMware Tools/vmware-resolutionSet" 1080 2160 + + - name: new screen resolution + run: system_profiler SPDisplaysDataType | grep Resolution \ No newline at end of file From 0d474ee62a86510be76cc4de826ddb60b59a35aa Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 13:36:25 -0300 Subject: [PATCH 53/90] Improve log verbose --- .github/workflows/ui_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 78103794a3..ff7d811ec1 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -19,7 +19,7 @@ jobs: steps: - name: default screen resolution - run: system_profiler SPDisplaysDataType | grep Resolution + run: set -x system_profiler SPDisplaysDataType | grep Resolution 2>&1 | tee output.log || true - name: change screen resolution run: | From 779e318149ced8efa6d81c97ee5c0b392fd15553 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 13:38:40 -0300 Subject: [PATCH 54/90] Another try --- .github/workflows/ui_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index ff7d811ec1..cffa8fd9ca 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -23,7 +23,7 @@ jobs: - name: change screen resolution run: | - "/Library/Application Support/VMware Tools/vmware-resolutionSet" 1080 2160 + "/Library/Application\ Support/VMware\ Tools/vmware-resolutionSet" 1080 2160 - name: new screen resolution run: system_profiler SPDisplaysDataType | grep Resolution \ No newline at end of file From f56f30f5f0a8e82671b5d66f70018437230d28bd Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 13:40:31 -0300 Subject: [PATCH 55/90] Test on macOS 14 --- .github/workflows/ui_tests.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index cffa8fd9ca..e637363d2e 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -12,18 +12,18 @@ jobs: strategy: fail-fast: false matrix: - runner: [macos-15-xlarge] + runner: [macos-14-xlarge] include: - xcode-version: "16.0" - runner: macos-15-xlarge + runner: macos-14-xlarge steps: - name: default screen resolution - run: set -x system_profiler SPDisplaysDataType | grep Resolution 2>&1 | tee output.log || true + run: system_profiler SPDisplaysDataType | grep Resolution - name: change screen resolution run: | - "/Library/Application\ Support/VMware\ Tools/vmware-resolutionSet" 1080 2160 + "/Library/Application Support/VMware Tools/vmware-resolutionSet" 1080 2160 - name: new screen resolution run: system_profiler SPDisplaysDataType | grep Resolution \ No newline at end of file From 8961b834af2920b97803af9aedfb236c2e67f21c Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 13:44:18 -0300 Subject: [PATCH 56/90] Test on macOS 13 --- .github/workflows/ui_tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index e637363d2e..142cc449be 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -12,10 +12,10 @@ jobs: strategy: fail-fast: false matrix: - runner: [macos-14-xlarge] + runner: [macos-13-xlarge] include: - xcode-version: "16.0" - runner: macos-14-xlarge + runner: macos-13-xlarge steps: - name: default screen resolution From 874277659edc7868f634ff3426384942336c77d0 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 13:46:48 -0300 Subject: [PATCH 57/90] Test command --- .github/workflows/ui_tests.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 142cc449be..ab1b2265ad 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -12,14 +12,14 @@ jobs: strategy: fail-fast: false matrix: - runner: [macos-13-xlarge] + runner: [macos-15-xlarge] include: - xcode-version: "16.0" - runner: macos-13-xlarge + runner: macos-15-xlarge steps: - name: default screen resolution - run: system_profiler SPDisplaysDataType | grep Resolution + run: set -x DISPLAY_INFO=$(system_profiler SPDisplaysDataType || echo "Resolution data not available") echo "$DISPLAY_INFO" - name: change screen resolution run: | From 5a70f9e5e95ef290b16d6647f637c1028462b7fb Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 13:48:08 -0300 Subject: [PATCH 58/90] Another test --- .github/workflows/ui_tests.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index ab1b2265ad..e44595c73e 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -19,7 +19,9 @@ jobs: steps: - name: default screen resolution - run: set -x DISPLAY_INFO=$(system_profiler SPDisplaysDataType || echo "Resolution data not available") echo "$DISPLAY_INFO" + run: echo "Retrieving display information..." + DISPLAY_INFO=$(system_profiler SPDisplaysDataType || echo "Resolution data not available") + echo "$DISPLAY_INFO" - name: change screen resolution run: | From 8e485aec82a7f75b2ade452e56d086b1772409dd Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 13:50:15 -0300 Subject: [PATCH 59/90] Test adding logs --- .github/workflows/ui_tests.yml | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index e44595c73e..4b6eab5999 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -18,10 +18,30 @@ jobs: runner: macos-15-xlarge steps: - - name: default screen resolution - run: echo "Retrieving display information..." - DISPLAY_INFO=$(system_profiler SPDisplaysDataType || echo "Resolution data not available") + - name: Get Display Information with Diagnostics + run: | + echo "Retrieving display information with diagnostics..." + + # Run the command, capturing output and exit code + DISPLAY_INFO=$(system_profiler SPDisplaysDataType 2>&1 | tee display_info.txt) + EXIT_CODE=$? + + # Log the output and exit code + echo "Display Information Output:" echo "$DISPLAY_INFO" + echo "Exit Code: $EXIT_CODE" + + # Check if the command failed and provide an alternative message + if [ "$EXIT_CODE" -ne 0 ]; then + echo "system_profiler command failed or returned no data." + fi + continue-on-error: true + + - name: Upload Display Information (Artifact) + uses: actions/upload-artifact@v3 + with: + name: display_info + path: display_info.txt - name: change screen resolution run: | From fef8186a1dfc6f16fc6ecc575eaa2b306c486035 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 13:57:05 -0300 Subject: [PATCH 60/90] Use screen resolution --- .github/workflows/ui_tests.yml | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 4b6eab5999..34b75a804c 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -18,24 +18,12 @@ jobs: runner: macos-15-xlarge steps: - - name: Get Display Information with Diagnostics + - name: Install screenresolution + run: brew install screenresolution + + - name: Get Screen Resolution run: | - echo "Retrieving display information with diagnostics..." - - # Run the command, capturing output and exit code - DISPLAY_INFO=$(system_profiler SPDisplaysDataType 2>&1 | tee display_info.txt) - EXIT_CODE=$? - - # Log the output and exit code - echo "Display Information Output:" - echo "$DISPLAY_INFO" - echo "Exit Code: $EXIT_CODE" - - # Check if the command failed and provide an alternative message - if [ "$EXIT_CODE" -ne 0 ]; then - echo "system_profiler command failed or returned no data." - fi - continue-on-error: true + screenresolution get || echo "Screen resolution data not available" - name: Upload Display Information (Artifact) uses: actions/upload-artifact@v3 From aebcf2a3338cd49206f86263be683c0f564b3ed3 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 14:20:32 -0300 Subject: [PATCH 61/90] Test using new library to set resolution --- .github/workflows/ui_tests.yml | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 34b75a804c..15fa3a697d 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -25,15 +25,9 @@ jobs: run: | screenresolution get || echo "Screen resolution data not available" - - name: Upload Display Information (Artifact) - uses: actions/upload-artifact@v3 - with: - name: display_info - path: display_info.txt - - name: change screen resolution - run: | - "/Library/Application Support/VMware Tools/vmware-resolutionSet" 1080 2160 + run: screenresolution set 2560x1600 - - name: new screen resolution - run: system_profiler SPDisplaysDataType | grep Resolution \ No newline at end of file + - name: Get New Screen Resolution + run: | + screenresolution get || echo "Screen resolution data not available" \ No newline at end of file From ad4a6221eefca50106bde86446cec3fe5b87989c Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 14:23:19 -0300 Subject: [PATCH 62/90] Update display --- .github/workflows/ui_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 15fa3a697d..8819580a7f 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -26,7 +26,7 @@ jobs: screenresolution get || echo "Screen resolution data not available" - name: change screen resolution - run: screenresolution set 2560x1600 + run: screenresolution set 2560x1600x32 - name: Get New Screen Resolution run: | From ece0ad134e512322db3a3ac3c409be8bd10e62e8 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 14:24:53 -0300 Subject: [PATCH 63/90] List available resolutions --- .github/workflows/ui_tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 8819580a7f..070bd714c5 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -21,9 +21,9 @@ jobs: - name: Install screenresolution run: brew install screenresolution - - name: Get Screen Resolution + - name: List available resolution run: | - screenresolution get || echo "Screen resolution data not available" + screenresolution list - name: change screen resolution run: screenresolution set 2560x1600x32 From 3fedae82320f83b40710433cb8ecb6ca7e883517 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 14:25:56 -0300 Subject: [PATCH 64/90] Update resolution with available ones --- .github/workflows/ui_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 070bd714c5..3d4531916b 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -26,7 +26,7 @@ jobs: screenresolution list - name: change screen resolution - run: screenresolution set 2560x1600x32 + run: screenresolution set 1920x1080x32@60 - name: Get New Screen Resolution run: | From 7b5d657818cd31540c7c8a0effbd96473fa64471 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Wed, 30 Oct 2024 14:29:28 -0300 Subject: [PATCH 65/90] Change resolution before UI tests --- .github/workflows/ui_tests.yml | 183 ++++++++++++++++++++++++++++++--- 1 file changed, 166 insertions(+), 17 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 3d4531916b..37b440e0f5 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -1,33 +1,182 @@ -# This is a basic workflow to help you get started with Actions +name: UI Tests -name: Screen Size Tests - -# Controls when the action will run. on: workflow_dispatch: + schedule: + - cron: '0 3 * * 1-5' # 3AM UTC offsetted to legacy to avoid action-junit-report@v4 bug + pull_request: + branches: + - hotfix/* + - release/* + jobs: - screentest: + create-notarized-app: + name: Build Notarized Review app + uses: ./.github/workflows/build_notarized.yml + with: + release-type: review + create-dmg: false + branch: ${{ github.sha }} + secrets: + APPLE_API_KEY_BASE64: ${{ secrets.APPLE_API_KEY_BASE64 }} + APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }} + APPLE_API_KEY_ISSUER: ${{ secrets.APPLE_API_KEY_ISSUER }} + ASANA_ACCESS_TOKEN: ${{ secrets.ASANA_ACCESS_TOKEN }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_ACCESS_KEY_ID_RELEASE_S3: ${{ secrets.AWS_ACCESS_KEY_ID_RELEASE_S3 }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_SECRET_ACCESS_KEY_RELEASE_S3: ${{ secrets.AWS_SECRET_ACCESS_KEY_RELEASE_S3 }} + MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} + MM_HANDLES_BASE64: ${{ secrets.MM_HANDLES_BASE64 }} + MM_WEBHOOK_URL: ${{ secrets.MM_WEBHOOK_URL }} + SSH_PRIVATE_KEY_FASTLANE_MATCH: ${{ secrets.SSH_PRIVATE_KEY_FASTLANE_MATCH }} + + ui-tests: name: UI tests + needs: create-notarized-app runs-on: ${{ matrix.runner }} strategy: fail-fast: false matrix: runner: [macos-15-xlarge] include: - - xcode-version: "16.0" + - xcode-version: "16" runner: macos-15-xlarge - + + concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.runner }} + cancel-in-progress: true + + timeout-minutes: 120 + steps: - - name: Install screenresolution - run: brew install screenresolution + - name: Install screenresolution + run: brew install screenresolution - - name: List available resolution - run: | - screenresolution list + - name: List available resolution + run: | + screenresolution list - - name: change screen resolution - run: screenresolution set 1920x1080x32@60 + - name: change screen resolution + run: screenresolution set 1920x1080x32@60 - - name: Get New Screen Resolution - run: | - screenresolution get || echo "Screen resolution data not available" \ No newline at end of file + - name: Get New Screen Resolution + run: | + screenresolution get || echo "Screen resolution data not available" + + - name: Register SSH key for certificates repository access + uses: webfactory/ssh-agent@v0.7.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY_FASTLANE_MATCH }} + + - name: Check out the code + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up fastlane + run: bundle install + + - name: Sync code signing assets + env: + APPLE_API_KEY_BASE64: ${{ secrets.APPLE_API_KEY_BASE64 }} + APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }} + APPLE_API_KEY_ISSUER: ${{ secrets.APPLE_API_KEY_ISSUER }} + MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} + SSH_PRIVATE_KEY_FASTLANE_MATCH: ${{ secrets.SSH_PRIVATE_KEY_FASTLANE_MATCH }} + run: | + bundle exec fastlane sync_signing_ci + + - name: Download and unzip artifact + uses: actions/download-artifact@v4 + + - name: Set cache key hash + run: | + has_only_tags=$(jq '[ .pins[].state | has("version") ] | all' DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved) + if [[ "$has_only_tags" == "true" ]]; then + echo "cache_key_hash=${{ hashFiles('DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved') }}" >> $GITHUB_ENV + else + echo "Package.resolved contains dependencies specified by branch or commit, skipping cache." + fi + + - name: Cache SPM + if: env.cache_key_hash + uses: actions/cache@v4 + with: + path: DerivedData/SourcePackages + key: ${{ runner.os }}-spm-${{ env.cache_key_hash }} + restore-keys: | + ${{ runner.os }}-spm- + + - name: Select Xcode + run: | + # Override .xcode_version because 15.4 is not available on macos 13 + echo "${{ matrix.xcode-version }}" > .xcode-version + sudo xcode-select -s /Applications/Xcode_$(<.xcode-version).app/Contents/Developer + + - name: Build for testing + run: | + set -o pipefail && xcodebuild build-for-testing \ + -scheme "UI Tests CI" \ + -derivedDataPath DerivedData \ + -skipPackagePluginValidation \ + -skipMacroValidation \ + | tee xcodebuild.log \ + | xcbeautify + + - name: Unzip and Copy app to /DerivedData + run: | + cd DuckDuckGo-review-*.app && unzip DuckDuckGo-*.zip + mv -f "DuckDuckGo Review.app" "../DerivedData/Build/Products/Review/DuckDuckGo Review.app" + + - name: Run UI Tests + run: | + defaults write com.duckduckgo.macos.browser.review moveToApplicationsFolderAlertSuppress 1 + set -o pipefail && xcodebuild test-without-building \ + -scheme "UI Tests CI" \ + -derivedDataPath DerivedData \ + -skipPackagePluginValidation \ + -skipMacroValidation \ + -test-iterations 2 \ + -retry-tests-on-failure \ + | tee -a xcodebuild.log \ + | tee ui-tests.log + + - name: Prepare test report + if: always() + run: | + xcbeautify --report junit --report-path . --junit-report-filename ui-tests.xml < ui-tests.log + + - name: Publish tests report + uses: mikepenz/action-junit-report@v4 + if: always() + with: + check_name: "Test Report ${{ matrix.runner }}" + report_paths: ui-tests.xml + + - name: Upload logs when workflow failed + uses: actions/upload-artifact@v4 + if: failure() || cancelled() + with: + name: "BuildLogs ${{ matrix.runner }}" + path: | + xcodebuild.log + DerivedData/Logs/Test/*.xcresult + ~/Library/Logs/DiagnosticReports/* + retention-days: 7 + + notify-failure: + name: Notify on failure + if: ${{ always() && github.event_name == 'schedule' && (needs.ui-tests.result == 'failure' || needs.ui-tests.result == 'cancelled') }} + needs: [ui-tests] + runs-on: ubuntu-latest + + steps: + - name: Create Asana task when workflow failed + uses: duckduckgo/native-github-asana-sync@v1.1 + with: + action: create-asana-task + asana-pat: ${{ secrets.ASANA_ACCESS_TOKEN }} + asana-project: ${{ vars.MACOS_APP_DEVELOPMENT_ASANA_PROJECT_ID }} + asana-task-name: GH Workflow Failure - UI Tests + asana-task-description: The UI Tests workflow has failed. See https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} \ No newline at end of file From 5ebab3e66ed16c1c7e6b7913a67d141ccec256b9 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Thu, 31 Oct 2024 16:53:00 -0300 Subject: [PATCH 66/90] Add macOS 13 and macOS 14 runners --- .github/workflows/ui_tests.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 37b440e0f5..22992297a0 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -38,8 +38,12 @@ jobs: strategy: fail-fast: false matrix: - runner: [macos-15-xlarge] + runner: [macos-13-xlarge, macos-14-xlarge, macos-15-xlarge] include: + - xcode-version: "15.2" + runner: macos-13-xlarge + - xcode-version: "15.4" + runner: macos-14-xlarge - xcode-version: "16" runner: macos-15-xlarge From b47ef2495c020067a6397cec45ba96b496f92d43 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Fri, 1 Nov 2024 11:11:12 -0300 Subject: [PATCH 67/90] Fix bad merge --- DuckDuckGo.xcodeproj/project.pbxproj | 4 ++-- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 3 ++- UITests/OnboardingUITests.swift | 4 ---- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index ed815135da..0b93898037 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -14681,8 +14681,8 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; requirement = { - kind = revision; - revision = 748463efbe18152dfcacba297b5b8735f37bdfc2; + branch = "dominik/xcode-16"; + kind = branch; }; }; 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index d7115fc708..c9c5f1ff55 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -32,7 +32,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { - "revision" : "748463efbe18152dfcacba297b5b8735f37bdfc2" + "branch" : "dominik/xcode-16", + "revision" : "8fb01fbcaf16035d41f543e74c34c3df011847eb" } }, { diff --git a/UITests/OnboardingUITests.swift b/UITests/OnboardingUITests.swift index c5403a6288..79c3c8eee8 100644 --- a/UITests/OnboardingUITests.swift +++ b/UITests/OnboardingUITests.swift @@ -24,10 +24,6 @@ final class OnboardingUITests: UITestCase { try resetApplicationData() } - override func tearDownWithError() throws { - try resetApplicationData() - } - func testOnboardingToBrowsing() throws { try resetApplicationData() continueAfterFailure = false From 4194f268b3ce54a03e66f7d30c34bd4f3fe0f8b8 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Fri, 1 Nov 2024 16:57:10 -0300 Subject: [PATCH 68/90] Delete screen size test workflow --- .github/workflows/screen_size.yml | 29 ----------------------------- 1 file changed, 29 deletions(-) delete mode 100644 .github/workflows/screen_size.yml diff --git a/.github/workflows/screen_size.yml b/.github/workflows/screen_size.yml deleted file mode 100644 index 78103794a3..0000000000 --- a/.github/workflows/screen_size.yml +++ /dev/null @@ -1,29 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Screen Size Tests - -# Controls when the action will run. -on: - workflow_dispatch: -jobs: - screentest: - name: UI tests - runs-on: ${{ matrix.runner }} - strategy: - fail-fast: false - matrix: - runner: [macos-15-xlarge] - include: - - xcode-version: "16.0" - runner: macos-15-xlarge - - steps: - - name: default screen resolution - run: system_profiler SPDisplaysDataType | grep Resolution - - - name: change screen resolution - run: | - "/Library/Application Support/VMware Tools/vmware-resolutionSet" 1080 2160 - - - name: new screen resolution - run: system_profiler SPDisplaysDataType | grep Resolution \ No newline at end of file From 8183a50110f6a41bfa7721ae48e672726281b5e0 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Sun, 3 Nov 2024 22:08:23 -0300 Subject: [PATCH 69/90] Run screenresolution only for macos15 --- .github/workflows/ui_tests.yml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index 22992297a0..b289fa96cf 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -55,18 +55,12 @@ jobs: steps: - name: Install screenresolution + if: matrix.runner == 'macos-15-xlarge' run: brew install screenresolution - - name: List available resolution - run: | - screenresolution list - - - name: change screen resolution + - name: Change screen resolution + if: matrix.runner == 'macos-15-xlarge' run: screenresolution set 1920x1080x32@60 - - - name: Get New Screen Resolution - run: | - screenresolution get || echo "Screen resolution data not available" - name: Register SSH key for certificates repository access uses: webfactory/ssh-agent@v0.7.0 From 2c699960c9709e83ce1670056eda997b721854e1 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Mon, 4 Nov 2024 10:32:42 -0300 Subject: [PATCH 70/90] Delete dependencies patch --- dependencies.patch | 1102 -------------------------------------------- 1 file changed, 1102 deletions(-) delete mode 100644 dependencies.patch diff --git a/dependencies.patch b/dependencies.patch deleted file mode 100644 index 926cb348ec..0000000000 --- a/dependencies.patch +++ /dev/null @@ -1,1102 +0,0 @@ -diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj -index 122ae513a..e5ba4e3f7 100644 ---- a/DuckDuckGo.xcodeproj/project.pbxproj -+++ b/DuckDuckGo.xcodeproj/project.pbxproj -@@ -14086,225 +14086,13 @@ - /* End XCBuildConfiguration section */ - - /* Begin XCConfigurationList section */ -- 3706FCFA293F65D500E42796 /* Build configuration list for PBXNativeTarget "DuckDuckGo Privacy Browser App Store" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- 3706FCFB293F65D500E42796 /* Debug */, -- 3706FCFE293F65D500E42796 /* CI */, -- 3706FCFF293F65D500E42796 /* Release */, -- 3706FD02293F65D500E42796 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- 3706FE92293F661700E42796 /* Build configuration list for PBXNativeTarget "Unit Tests App Store" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- 3706FE93293F661700E42796 /* Debug */, -- 3706FE94293F661700E42796 /* CI */, -- 3706FE95293F661700E42796 /* Release */, -- 3706FE97293F661700E42796 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- 3706FEAB293F662100E42796 /* Build configuration list for PBXNativeTarget "Integration Tests App Store" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- 3706FEAC293F662100E42796 /* Debug */, -- 3706FEAD293F662100E42796 /* CI */, -- 3706FEAE293F662100E42796 /* Release */, -- 3706FEB0293F662100E42796 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- 376113CF2B29CD5B00E794BB /* Build configuration list for PBXNativeTarget "SyncE2EUITests App Store" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- 376113D02B29CD5B00E794BB /* Debug */, -- 376113D12B29CD5B00E794BB /* CI */, -- 376113D22B29CD5B00E794BB /* Release */, -- 376113D32B29CD5B00E794BB /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- 4B1AD8A625FC27E200261379 /* Build configuration list for PBXNativeTarget "Integration Tests" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- 4B1AD8A425FC27E200261379 /* Debug */, -- 4B1AD8B325FC322600261379 /* CI */, -- 4B1AD8A525FC27E200261379 /* Release */, -- AAE814AE2716DFE8009D3531 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- 4B2537662A11BE7700610219 /* Build configuration list for PBXNativeTarget "NetworkProtectionSystemExtension" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- 4B2537672A11BE7700610219 /* Debug */, -- 4B2537682A11BE7700610219 /* CI */, -- 4B2537692A11BE7700610219 /* Release */, -- 4B25376A2A11BE7700610219 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- 4B2D06452A11CFBE00DE1F49 /* Build configuration list for PBXNativeTarget "DuckDuckGoVPN" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- 4B2D06462A11CFBE00DE1F49 /* Debug */, -- 4B2D06472A11CFBE00DE1F49 /* CI */, -- 4B2D06482A11CFBE00DE1F49 /* Release */, -- 4B2D06492A11CFBE00DE1F49 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- 4B2D06752A13318600DE1F49 /* Build configuration list for PBXNativeTarget "DuckDuckGoVPNAppStore" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- 4B2D06762A13318600DE1F49 /* Debug */, -- 4B2D06772A13318600DE1F49 /* CI */, -- 4B2D06782A13318600DE1F49 /* Release */, -- 4B2D06792A13318600DE1F49 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- 4B4BEC2C2A11B4E3001D9AC5 /* Build configuration list for PBXNativeTarget "DuckDuckGoNotifications" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- 4B4BEC2D2A11B4E3001D9AC5 /* Debug */, -- 4B4BEC2E2A11B4E3001D9AC5 /* CI */, -- 4B4BEC2F2A11B4E3001D9AC5 /* Release */, -- 4B4BEC302A11B4E3001D9AC5 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- 4B4D604D2A0B290300BCD287 /* Build configuration list for PBXNativeTarget "NetworkProtectionAppExtension" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- 4B4D60492A0B290300BCD287 /* Debug */, -- 4B4D604A2A0B290300BCD287 /* CI */, -- 4B4D604B2A0B290300BCD287 /* Release */, -- 4B4D604C2A0B290300BCD287 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- 565E46E52B2725DD0013AC2A /* Build configuration list for PBXNativeTarget "SyncE2EUITests" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- 565E46E62B2725DD0013AC2A /* Debug */, -- 565E46E72B2725DD0013AC2A /* CI */, -- 565E46E82B2725DD0013AC2A /* Release */, -- 565E46E92B2725DD0013AC2A /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- 7B4CE8E526F02108009134B1 /* Build configuration list for PBXNativeTarget "UI Tests" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- 7B4CE8E126F02108009134B1 /* Debug */, -- 7B4CE8E226F02108009134B1 /* CI */, -- 7B4CE8E326F02108009134B1 /* Release */, -- AAE814AF2716DFE8009D3531 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- 7BDA36F42B7E037200AD5388 /* Build configuration list for PBXNativeTarget "VPNProxyExtension" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- 7BDA36F02B7E037200AD5388 /* Debug */, -- 7BDA36F12B7E037200AD5388 /* CI */, -- 7BDA36F22B7E037200AD5388 /* Release */, -- 7BDA36F32B7E037200AD5388 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- 9D9AE8CC2AAA39A70026E7DC /* Build configuration list for PBXNativeTarget "DuckDuckGoDBPBackgroundAgent" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- 9D9AE8CD2AAA39A70026E7DC /* Debug */, -- 9D9AE8CE2AAA39A70026E7DC /* CI */, -- 9D9AE8CF2AAA39A70026E7DC /* Release */, -- 9D9AE8D02AAA39A70026E7DC /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- 9D9AE8ED2AAA39D30026E7DC /* Build configuration list for PBXNativeTarget "DuckDuckGoDBPBackgroundAgentAppStore" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- 9D9AE8EE2AAA39D30026E7DC /* Debug */, -- 9D9AE8EF2AAA39D30026E7DC /* CI */, -- 9D9AE8F02AAA39D30026E7DC /* Release */, -- 9D9AE8F12AAA39D30026E7DC /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- AA585D79248FD31100E9A3E2 /* Build configuration list for PBXProject "DuckDuckGo" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- AA585DA2248FD31500E9A3E2 /* Debug */, -- 4B1AD8B025FC322600261379 /* CI */, -- AA585DA3248FD31500E9A3E2 /* Release */, -- AAE814AB2716DFE8009D3531 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- AA585DA4248FD31500E9A3E2 /* Build configuration list for PBXNativeTarget "DuckDuckGo Privacy Browser" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- AA585DA5248FD31500E9A3E2 /* Debug */, -- 4B1AD8B125FC322600261379 /* CI */, -- AA585DA6248FD31500E9A3E2 /* Release */, -- AAE814AC2716DFE8009D3531 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- AA585DA7248FD31500E9A3E2 /* Build configuration list for PBXNativeTarget "Unit Tests" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- AA585DA8248FD31500E9A3E2 /* Debug */, -- 4B1AD8B225FC322600261379 /* CI */, -- AA585DA9248FD31500E9A3E2 /* Release */, -- AAE814AD2716DFE8009D3531 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- B6E6B9FF2BA1FD91008AA7E1 /* Build configuration list for PBXNativeTarget "sandbox-test-tool" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- B6E6BA002BA1FD91008AA7E1 /* Debug */, -- B6E6BA012BA1FD91008AA7E1 /* CI */, -- B6E6BA022BA1FD91008AA7E1 /* Release */, -- B6E6BA032BA1FD91008AA7E1 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -- }; -- B6EC37EC29B5DA2A001ACE79 /* Build configuration list for PBXNativeTarget "tests-server" */ = { -- isa = XCConfigurationList; -- buildConfigurations = ( -- B6EC37ED29B5DA2A001ACE79 /* Debug */, -- B6EC37EE29B5DA2A001ACE79 /* CI */, -- B6EC37EF29B5DA2A001ACE79 /* Release */, -- B6EC37F029B5DA2A001ACE79 /* Review */, -- ); -- defaultConfigurationIsVisible = 0; -- defaultConfigurationName = Release; -+ B6EC37F529B5DAAC001ACE79 /* XCRemoteSwiftPackageReference "swifter" */ = { -+ isa = XCRemoteSwiftPackageReference; -+ repositoryURL = "https://github.com/httpswift/swifter.git"; -+ requirement = { -+ kind = exactVersion; -+ version = 1.5.0; -+ }; - }; - /* End XCConfigurationList section */ - -@@ -14397,14 +14185,6 @@ - version = 9.1.0; - }; - }; -- B6EC37F529B5DAAC001ACE79 /* XCRemoteSwiftPackageReference "swifter" */ = { -- isa = XCRemoteSwiftPackageReference; -- repositoryURL = "https://github.com/httpswift/swifter.git"; -- requirement = { -- kind = exactVersion; -- version = 1.5.0; -- }; -- }; - B6F997B92B8F352500476735 /* XCRemoteSwiftPackageReference "apple-toolbox" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/duckduckgo/apple-toolbox.git"; -@@ -14432,849 +14212,11 @@ - /* End XCRemoteSwiftPackageReference section */ - - /* Begin XCSwiftPackageProductDependency section */ -- 020807B12C6CFF95006F94C4 /* Configuration */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Configuration; -- }; -- 02589D9C2C88E8210093940D /* Configuration */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Configuration; -- }; -- 02589D9E2C88E8270093940D /* Persistence */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Persistence; -- }; -- 02589DA02C88EB570093940D /* Configuration */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Configuration; -- }; -- 02589DA22C88EB5D0093940D /* Persistence */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Persistence; -- }; -- 02589DA42C88ED190093940D /* BrowserServicesKit */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = BrowserServicesKit; -- }; -- 02589DA62C88F8E90093940D /* PixelKit */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = PixelKit; -- }; -- 02589DA82C89F0420093940D /* Configuration */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Configuration; -- }; -- 02589DAA2C89F0490093940D /* Persistence */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Persistence; -- }; -- 02A15D8B2C88D763001A4237 /* Configuration */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Configuration; -- }; -- 02A15D8D2C88D76A001A4237 /* Persistence */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Persistence; -- }; -- 02A15D8F2C88D773001A4237 /* Persistence */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Persistence; -- }; -- 02A15D912C88D789001A4237 /* Configuration */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Configuration; -- }; -- 02A15D932C88D78F001A4237 /* Persistence */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Persistence; -- }; -- 02A15D952C88D797001A4237 /* Configuration */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Configuration; -- }; -- 02A15D972C88D79D001A4237 /* Persistence */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Persistence; -- }; -- 08D4923DC968236E22E373E2 /* Crashes */ = { -- isa = XCSwiftPackageProductDependency; -- package = FAE06B199CA1F209B55B34E9 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Crashes; -- }; -- 1E950E3E2912A10D0051A99B /* ContentBlocking */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = ContentBlocking; -- }; -- 1E950E402912A10D0051A99B /* PrivacyDashboard */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = PrivacyDashboard; -- }; -- 1E950E422912A10D0051A99B /* UserScript */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = UserScript; -- }; -- 1EA7B8D22B7E078C000330A4 /* SubscriptionUI */ = { -- isa = XCSwiftPackageProductDependency; -- productName = SubscriptionUI; -- }; -- 1EA7B8D42B7E078C000330A4 /* Subscription */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Subscription; -- }; -- 1EB028322C91C754005343F6 /* Common */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Common; -- }; -- 1EB028342C91C75A005343F6 /* Common */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Common; -- }; -- 312978892B64131200B67619 /* DataBrokerProtection */ = { -- isa = XCSwiftPackageProductDependency; -- productName = DataBrokerProtection; -- }; -- 315A023E2B6421AE00BFA577 /* Networking */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Networking; -- }; -- 31A3A4E22B0C115F0021063C /* DataBrokerProtection */ = { -- isa = XCSwiftPackageProductDependency; -- productName = DataBrokerProtection; -- }; -- 3706FA71293F65D500E42796 /* BrowserServicesKit */ = { -- isa = XCSwiftPackageProductDependency; -- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = BrowserServicesKit; -- }; -- 3706FA76293F65D500E42796 /* ContentBlocking */ = { -- isa = XCSwiftPackageProductDependency; -- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = ContentBlocking; -- }; -- 3706FA77293F65D500E42796 /* PrivacyDashboard */ = { -- isa = XCSwiftPackageProductDependency; -- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = PrivacyDashboard; -- }; -- 3706FA78293F65D500E42796 /* UserScript */ = { -- isa = XCSwiftPackageProductDependency; -- package = 3706FA72293F65D500E42796 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = UserScript; -- }; -- 3706FDD6293F661700E42796 /* OHHTTPStubs */ = { -- isa = XCSwiftPackageProductDependency; -- package = 3706FDD7293F661700E42796 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; -- productName = OHHTTPStubs; -- }; -- 3706FDD8293F661700E42796 /* OHHTTPStubsSwift */ = { -- isa = XCSwiftPackageProductDependency; -- package = 3706FDD7293F661700E42796 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; -- productName = OHHTTPStubsSwift; -- }; -- 371209222C232E66003ADF3D /* RemoteMessaging */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = RemoteMessaging; -- }; -- 371209242C232E6C003ADF3D /* RemoteMessaging */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = RemoteMessaging; -- }; -- 371D00E029D8509400EC8598 /* OpenSSL */ = { -- isa = XCSwiftPackageProductDependency; -- package = 371D00DF29D8509400EC8598 /* XCRemoteSwiftPackageReference "OpenSSL-XCFramework" */; -- productName = OpenSSL; -- }; -- 3722177F2B3337FE00B8E9C2 /* TestUtils */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = TestUtils; -- }; -- 372217812B33380700B8E9C2 /* TestUtils */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = TestUtils; -- }; -- 37269EFA2B332F9E005E8E46 /* Common */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Common; -- }; -- 37269EFC2B332FAC005E8E46 /* Common */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Common; -- }; -- 37269EFE2B332FBB005E8E46 /* Common */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Common; -- }; -- 37269F002B332FC8005E8E46 /* Common */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Common; -- }; -- 37269F042B3332C2005E8E46 /* Common */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Common; -- }; -- 3739326429AE4B39009346AE /* DDGSync */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = DDGSync; -- }; -- 3739326629AE4B42009346AE /* DDGSync */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = DDGSync; -- }; -- 373FB4B22B4D6C4B004C88D6 /* PreferencesViews */ = { -- isa = XCSwiftPackageProductDependency; -- productName = PreferencesViews; -- }; -- 378F44E329B4BDE900899924 /* SwiftUIExtensions */ = { -- isa = XCSwiftPackageProductDependency; -- productName = SwiftUIExtensions; -- }; -- 378F44E529B4BDEE00899924 /* SwiftUIExtensions */ = { -- isa = XCSwiftPackageProductDependency; -- productName = SwiftUIExtensions; -- }; -- 37A5E2EF298AA1B20047046B /* Persistence */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Persistence; -- }; -- 37BA812C29B3CD690053F1A3 /* SyncUI */ = { -- isa = XCSwiftPackageProductDependency; -- productName = SyncUI; -- }; -- 37BA812E29B3CD6E0053F1A3 /* SyncUI */ = { -- isa = XCSwiftPackageProductDependency; -- productName = SyncUI; -- }; -- 37DB56EC2C3B314F0093D4DC /* BrowserServicesKit */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = BrowserServicesKit; -- }; -- 37DF000429F9C056002B7D3E /* SyncDataProviders */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = SyncDataProviders; -- }; -- 37DF000629F9C061002B7D3E /* SyncDataProviders */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = SyncDataProviders; -- }; -- 37F44A5E298C17830025E7FE /* Navigation */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Navigation; -- }; -- 4B2D062B2A11C0E100DE1F49 /* Networking */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Networking; -- }; -- 4B2D067E2A1334D700DE1F49 /* NetworkProtectionUI */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionUI; -- }; -- 4B41EDAA2B1544B2001EEDF4 /* LoginItems */ = { -- isa = XCSwiftPackageProductDependency; -- productName = LoginItems; -- }; -- 4B4BEC492A11B627001D9AC5 /* NetworkProtection */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtection; -- }; -- 4B4D60522A0B29CB00BCD287 /* NetworkProtection */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtection; -- }; -- 4B4D60AE2A0C837F00BCD287 /* Networking */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Networking; -- }; -- 4B4D60B02A0C83B900BCD287 /* NetworkProtectionUI */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionUI; -- }; -- 4B5235442C7BB14D00AFAF64 /* WireGuard */ = { -- isa = XCSwiftPackageProductDependency; -- package = 4B5235432C7BB14D00AFAF64 /* XCRemoteSwiftPackageReference "wireguard-apple" */; -- productName = WireGuard; -- }; -- 4B5235462C7BB15700AFAF64 /* WireGuard */ = { -- isa = XCSwiftPackageProductDependency; -- package = 4B5235432C7BB14D00AFAF64 /* XCRemoteSwiftPackageReference "wireguard-apple" */; -- productName = WireGuard; -- }; -- 4B5F14FB2A15291D0060320F /* InputFilesChecker */ = { -- isa = XCSwiftPackageProductDependency; -- productName = "plugin:InputFilesChecker"; -- }; -- 4B5F14FD2A1529230060320F /* InputFilesChecker */ = { -- isa = XCSwiftPackageProductDependency; -- productName = "plugin:InputFilesChecker"; -- }; -- 4BA7C4DC2B3F64E500AFE511 /* LoginItems */ = { -- isa = XCSwiftPackageProductDependency; -- productName = LoginItems; -- }; -- 4BCBE4572BA7E17800FC75A1 /* SubscriptionUI */ = { -- isa = XCSwiftPackageProductDependency; -- productName = SubscriptionUI; -- }; -- 4BCBE4592BA7E17800FC75A1 /* Subscription */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Subscription; -- }; -- 4BCBE45B2BA7E18500FC75A1 /* Subscription */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Subscription; -- }; -- 4BF97AD02B43C43F00EB4240 /* NetworkProtectionIPC */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionIPC; -- }; -- 4BF97AD22B43C43F00EB4240 /* NetworkProtectionUI */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionUI; -- }; -- 4BF97AD42B43C43F00EB4240 /* NetworkProtection */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = NetworkProtection; -- }; -- 537FC71EA5115A983FAF3170 /* Crashes */ = { -- isa = XCSwiftPackageProductDependency; -- package = 4311906792B7676CE9535D76 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Crashes; -- }; -- 560EB9342C7897370080DBC8 /* Onboarding */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Onboarding; -- }; -- 560EB9362C78974C0080DBC8 /* Onboarding */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Onboarding; -- }; -- 567A23C02C7F71570010F66C /* SpecialErrorPages */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = SpecialErrorPages; -- }; -- 567A23C42C7F75BB0010F66C /* SpecialErrorPages */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = SpecialErrorPages; -- }; -- 7B00997C2B6508B700FE7C31 /* NetworkProtectionProxy */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionProxy; -- }; -- 7B00997E2B6508C200FE7C31 /* NetworkProtectionProxy */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionProxy; -- }; -- 7B1459562B7D43E500047F2C /* NetworkProtectionProxy */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionProxy; -- }; -- 7B2366832C09FAC2002D393F /* VPNAppLauncher */ = { -- isa = XCSwiftPackageProductDependency; -- productName = VPNAppLauncher; -- }; -- 7B2366852C09FACD002D393F /* VPNAppLauncher */ = { -- isa = XCSwiftPackageProductDependency; -- productName = VPNAppLauncher; -- }; -- 7B2366872C09FADA002D393F /* VPNAppLauncher */ = { -- isa = XCSwiftPackageProductDependency; -- productName = VPNAppLauncher; -- }; -- 7B2366892C09FAE8002D393F /* VPNAppLauncher */ = { -- isa = XCSwiftPackageProductDependency; -- productName = VPNAppLauncher; -- }; -- 7B23668B2C09FAF1002D393F /* VPNAppLauncher */ = { -- isa = XCSwiftPackageProductDependency; -- productName = VPNAppLauncher; -- }; -- 7B23668D2C09FAFA002D393F /* VPNAppLauncher */ = { -- isa = XCSwiftPackageProductDependency; -- productName = VPNAppLauncher; -- }; -- 7B25856D2BA2F2ED00D49F79 /* NetworkProtectionUI */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionUI; -- }; -- 7B31FD8B2AD125620086AA24 /* NetworkProtectionIPC */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionIPC; -- }; -- 7B37C7A42BAA32A50062546A /* Subscription */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Subscription; -- }; -- 7B624F162BA25C1F00A6C544 /* NetworkProtectionUI */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionUI; -- }; -- 7B7DFB212B7E7473009EA1A3 /* Networking */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Networking; -- }; -- 7B8594182B5B26230007EB3E /* UDSHelper */ = { -- isa = XCSwiftPackageProductDependency; -- productName = UDSHelper; -- }; -- 7B97CD582B7E0B57004FEF43 /* NetworkProtectionProxy */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionProxy; -- }; -- 7B97CD5A2B7E0B85004FEF43 /* Common */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Common; -- }; -- 7BA076BA2B65D61400D7FB72 /* NetworkProtectionProxy */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionProxy; -- }; -- 7BA59C9A2AE18B49009A97B1 /* SystemExtensionManager */ = { -- isa = XCSwiftPackageProductDependency; -- productName = SystemExtensionManager; -- }; -- 7BA7CC5E2AD1210C0042E5CE /* Networking */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Networking; -- }; -- 7BA7CC602AD1211C0042E5CE /* Networking */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Networking; -- }; -- 7BBE2B7A2B61663C00697445 /* NetworkProtectionProxy */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionProxy; -- }; -- 7BEC182E2AD5D8DC00D30536 /* SystemExtensionManager */ = { -- isa = XCSwiftPackageProductDependency; -- productName = SystemExtensionManager; -- }; -- 7BEEA5112AD1235B00A9E72B /* NetworkProtectionIPC */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionIPC; -- }; -- 7BEEA5132AD1236300A9E72B /* NetworkProtectionIPC */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionIPC; -- }; -- 7BEEA5152AD1236E00A9E72B /* NetworkProtectionUI */ = { -- isa = XCSwiftPackageProductDependency; -- productName = NetworkProtectionUI; -- }; -- 84B49F0C2CB10F0900FF08BB /* OHHTTPStubs */ = { -- isa = XCSwiftPackageProductDependency; -- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; -- productName = OHHTTPStubs; -- }; -- 84B49F0E2CB10F0900FF08BB /* OHHTTPStubsSwift */ = { -- isa = XCSwiftPackageProductDependency; -- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; -- productName = OHHTTPStubsSwift; -- }; -- 85D44B852BA08D29001B4AB5 /* Suggestions */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Suggestions; -- }; -- 85D44B872BA08D30001B4AB5 /* Suggestions */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Suggestions; -- }; -- 85E2BBCD2B8F534000DBEC7A /* History */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = History; -- }; -- 85E2BBCF2B8F534A00DBEC7A /* History */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = History; -- }; -- 9807F644278CA16F00E1547B /* BrowserServicesKit */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = BrowserServicesKit; -- }; -- 984FD3BE299ACF35007334DD /* Bookmarks */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Bookmarks; -- }; -- 987799EC299998B1005D8EB6 /* Bookmarks */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Bookmarks; -- }; -- 98A50963294B691800D10880 /* Persistence */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Persistence; -- }; -- 9D9AE8F82AAA3AD00026E7DC /* DataBrokerProtection */ = { -- isa = XCSwiftPackageProductDependency; -- productName = DataBrokerProtection; -- }; -- 9D9AE8FA2AAA3AD90026E7DC /* DataBrokerProtection */ = { -- isa = XCSwiftPackageProductDependency; -- productName = DataBrokerProtection; -- }; -- 9D9DE5722C63AA0700D20B15 /* AppKitExtensions */ = { -- isa = XCSwiftPackageProductDependency; -- productName = AppKitExtensions; -- }; -- 9D9DE5742C63AA0C00D20B15 /* AppKitExtensions */ = { -- isa = XCSwiftPackageProductDependency; -- productName = AppKitExtensions; -- }; -- 9D9DE5762C63AA1600D20B15 /* AppKitExtensions */ = { -- isa = XCSwiftPackageProductDependency; -- productName = AppKitExtensions; -- }; -- 9D9DE5782C63AA1A00D20B15 /* AppKitExtensions */ = { -- isa = XCSwiftPackageProductDependency; -- productName = AppKitExtensions; -- }; -- 9D9DE57A2C63AA1F00D20B15 /* AppKitExtensions */ = { -- isa = XCSwiftPackageProductDependency; -- productName = AppKitExtensions; -- }; -- 9D9DE57C2C63AA2400D20B15 /* AppKitExtensions */ = { -- isa = XCSwiftPackageProductDependency; -- productName = AppKitExtensions; -- }; -- 9D9DE57E2C63B64F00D20B15 /* AppKitExtensions */ = { -- isa = XCSwiftPackageProductDependency; -- productName = AppKitExtensions; -- }; -- 9D9DE5802C63BA0B00D20B15 /* AppKitExtensions */ = { -- isa = XCSwiftPackageProductDependency; -- productName = AppKitExtensions; -- }; -- 9D9DE5822C63BE9600D20B15 /* AppKitExtensions */ = { -- isa = XCSwiftPackageProductDependency; -- productName = AppKitExtensions; -- }; -- 9DC70B192AA1FA5B005A844B /* LoginItems */ = { -- isa = XCSwiftPackageProductDependency; -- productName = LoginItems; -- }; -- 9DEF97E02B06C4EE00764F03 /* Networking */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Networking; -- }; -- 9FF521452BAA908500B9819B /* Lottie */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; -- productName = Lottie; -- }; -- 9FF521472BAA909C00B9819B /* Lottie */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; -- productName = Lottie; -- }; -- AA06B6B62672AF8100F541C5 /* Sparkle */ = { -- isa = XCSwiftPackageProductDependency; -- package = AA06B6B52672AF8100F541C5 /* XCRemoteSwiftPackageReference "Sparkle" */; -- productName = Sparkle; -- }; -- B65CD8CA2B316DF100A595BB /* SnapshotTesting */ = { -- isa = XCSwiftPackageProductDependency; -- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; -- productName = SnapshotTesting; -- }; -- B65CD8CC2B316DFC00A595BB /* SnapshotTesting */ = { -- isa = XCSwiftPackageProductDependency; -- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; -- productName = SnapshotTesting; -- }; -- B65CD8CE2B316E0200A595BB /* SnapshotTesting */ = { -- isa = XCSwiftPackageProductDependency; -- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; -- productName = SnapshotTesting; -- }; -- B65CD8D02B316E0C00A595BB /* SnapshotTesting */ = { -- isa = XCSwiftPackageProductDependency; -- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; -- productName = SnapshotTesting; -- }; -- B65CD8D22B316E1700A595BB /* SnapshotTesting */ = { -- isa = XCSwiftPackageProductDependency; -- package = B65CD8C92B316DF100A595BB /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */; -- productName = SnapshotTesting; -- }; -- B6AE39F229374AEC00C37AA4 /* OHHTTPStubs */ = { -- isa = XCSwiftPackageProductDependency; -- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; -- productName = OHHTTPStubs; -- }; -- B6AE39F429374AEC00C37AA4 /* OHHTTPStubsSwift */ = { -- isa = XCSwiftPackageProductDependency; -- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; -- productName = OHHTTPStubsSwift; -- }; -- B6B77BE7297973D4001E68A1 /* Navigation */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Navigation; -- }; -- B6DA44162616C13800DD1EC2 /* OHHTTPStubs */ = { -- isa = XCSwiftPackageProductDependency; -- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; -- productName = OHHTTPStubs; -- }; -- B6DA44182616C13800DD1EC2 /* OHHTTPStubsSwift */ = { -- isa = XCSwiftPackageProductDependency; -- package = B6DA44152616C13800DD1EC2 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */; -- productName = OHHTTPStubsSwift; -- }; -- B6E6BA072BA1FE24008AA7E1 /* Common */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Common; -- }; - B6EC37F829B5DAD7001ACE79 /* Swifter */ = { - isa = XCSwiftPackageProductDependency; - package = B6EC37F529B5DAAC001ACE79 /* XCRemoteSwiftPackageReference "swifter" */; - productName = Swifter; - }; -- B6EC37FE29B8D915001ACE79 /* Configuration */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Configuration; -- }; -- BDADBDC82BD2BC2200421B9B /* Lottie */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; -- productName = Lottie; -- }; -- BDADBDCA2BD2BC2800421B9B /* Lottie */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */; -- productName = Lottie; -- }; -- C18BF9CB2C73678500ED6B8A /* Freemium */ = { -- isa = XCSwiftPackageProductDependency; -- productName = Freemium; -- }; -- C18BF9CD2C73678C00ED6B8A /* Freemium */ = { -- isa = XCSwiftPackageProductDependency; -- productName = Freemium; -- }; -- C18BF9CF2C736C9100ED6B8A /* Freemium */ = { -- isa = XCSwiftPackageProductDependency; -- productName = Freemium; -- }; -- C18BF9D12C736C9700ED6B8A /* Freemium */ = { -- isa = XCSwiftPackageProductDependency; -- productName = Freemium; -- }; -- CBC83E3529B63D380008E19C /* Configuration */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Configuration; -- }; -- CD34F0BB2C885D65006826BE /* PhishingDetection */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = PhishingDetection; -- }; -- CD34F0C32C8869FF006826BE /* PhishingDetection */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = PhishingDetection; -- }; -- D6BC8AC52C5A95AA0025375B /* DuckPlayer */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = DuckPlayer; -- }; -- D6BC8AC72C5A95B10025375B /* DuckPlayer */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = DuckPlayer; -- }; -- DC3F73D49B2D44464AFEFCD8 /* Subscription */ = { -- isa = XCSwiftPackageProductDependency; -- package = 3FFD51CF7C19ACBDB9687474 /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Subscription; -- }; -- EE02D41F2BB460C000DBE6B3 /* BrowserServicesKit */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = BrowserServicesKit; -- }; -- EE2F9C5A2B90F2FF00D45FC9 /* Subscription */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Subscription; -- }; -- EE7295E22A545B9A008C0991 /* NetworkProtection */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = NetworkProtection; -- }; -- EE7295E62A545BBB008C0991 /* NetworkProtection */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = NetworkProtection; -- }; -- EE7295E82A545BC4008C0991 /* NetworkProtection */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = NetworkProtection; -- }; -- EE7295EC2A545C0A008C0991 /* NetworkProtection */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = NetworkProtection; -- }; -- EE7295EE2A545C12008C0991 /* NetworkProtection */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = NetworkProtection; -- }; -- F116A7C22BD1924B00F3FCF7 /* PixelKitTestingUtilities */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = PixelKitTestingUtilities; -- }; -- F116A7C62BD1925500F3FCF7 /* PixelKitTestingUtilities */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = PixelKitTestingUtilities; -- }; -- F116A7C82BD1929000F3FCF7 /* PixelKitTestingUtilities */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = PixelKitTestingUtilities; -- }; -- F198C7112BD18A28000BF24D /* PixelKit */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = PixelKit; -- }; -- F198C7132BD18A30000BF24D /* PixelKit */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = PixelKit; -- }; -- F198C7152BD18A44000BF24D /* PixelKit */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = PixelKit; -- }; -- F198C7172BD18A4C000BF24D /* PixelKit */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = PixelKit; -- }; -- F198C7192BD18A5B000BF24D /* PixelKit */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = PixelKit; -- }; -- F198C71B2BD18A61000BF24D /* PixelKit */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = PixelKit; -- }; -- F198C71D2BD18D88000BF24D /* SwiftLintTool */ = { -- isa = XCSwiftPackageProductDependency; -- package = B6F997B92B8F352500476735 /* XCRemoteSwiftPackageReference "apple-toolbox" */; -- productName = SwiftLintTool; -- }; -- F198C71F2BD18D92000BF24D /* SwiftLintTool */ = { -- isa = XCSwiftPackageProductDependency; -- package = B6F997B92B8F352500476735 /* XCRemoteSwiftPackageReference "apple-toolbox" */; -- productName = SwiftLintTool; -- }; -- F1D0428D2BFB9F9C00A31506 /* Subscription */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Subscription; -- }; -- F1D0428F2BFB9FA300A31506 /* Subscription */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = Subscription; -- }; -- F1D43AF22B98E47800BAB743 /* BareBonesBrowserKit */ = { -- isa = XCSwiftPackageProductDependency; -- package = F1D43AF12B98E47800BAB743 /* XCRemoteSwiftPackageReference "BareBonesBrowser" */; -- productName = BareBonesBrowserKit; -- }; -- F1D43AF42B98E48900BAB743 /* BareBonesBrowserKit */ = { -- isa = XCSwiftPackageProductDependency; -- package = F1D43AF12B98E47800BAB743 /* XCRemoteSwiftPackageReference "BareBonesBrowser" */; -- productName = BareBonesBrowserKit; -- }; -- F1DA51A42BF6114200CF29FA /* SubscriptionTestingUtilities */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = SubscriptionTestingUtilities; -- }; -- F1DA51A82BF6114C00CF29FA /* SubscriptionTestingUtilities */ = { -- isa = XCSwiftPackageProductDependency; -- package = 9807F643278CA16F00E1547B /* XCRemoteSwiftPackageReference "BrowserServicesKit" */; -- productName = SubscriptionTestingUtilities; -- }; -- F1DF95E62BD188B60045E591 /* LoginItems */ = { -- isa = XCSwiftPackageProductDependency; -- productName = LoginItems; -- }; - /* End XCSwiftPackageProductDependency section */ - - /* Begin XCVersionGroup section */ From 8c67c25dbeeb7de385af8110f7bc563a9aaf63a2 Mon Sep 17 00:00:00 2001 From: Juan Manuel Pereira Date: Mon, 4 Nov 2024 10:46:44 -0300 Subject: [PATCH 71/90] Disable two tests that were disabled on main --- UITests/UI Tests.xctestplan | 2 ++ 1 file changed, 2 insertions(+) diff --git a/UITests/UI Tests.xctestplan b/UITests/UI Tests.xctestplan index e1394ca735..e1b61add22 100644 --- a/UITests/UI Tests.xctestplan +++ b/UITests/UI Tests.xctestplan @@ -36,6 +36,8 @@ "testTargets" : [ { "skippedTests" : [ + "BookmarksAndFavoritesTests\/test_bookmarks_canBeAddedTo_byClickingBookmarksButtonInAddressBar()", + "BookmarksAndFavoritesTests\/test_favorites_canBeAddedTo_byClickingAddFavoriteInAddBookmarkPopover()", "PermissionsTests" ], "target" : { From 1357eb6c07719d18fe9c906fab68df5abc6ad5f2 Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Mon, 4 Nov 2024 15:26:17 +0100 Subject: [PATCH 72/90] Update sync E2E tests workflow --- .github/workflows/sync_end_to_end.yml | 18 ++++++++---------- .../Sync End-to-End UI Tests CI.xcscheme | 2 +- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/.github/workflows/sync_end_to_end.yml b/.github/workflows/sync_end_to_end.yml index 60ead0e6e2..b8a010a00d 100644 --- a/.github/workflows/sync_end_to_end.yml +++ b/.github/workflows/sync_end_to_end.yml @@ -46,6 +46,14 @@ jobs: timeout-minutes: 60 steps: + - name: Install screenresolution + if: matrix.runner == 'macos-15-xlarge' + run: brew install screenresolution + + - name: Change screen resolution + if: matrix.runner == 'macos-15-xlarge' + run: screenresolution set 1920x1080x32@60 + - name: Register SSH key for certificates repository access uses: webfactory/ssh-agent@v0.7.0 with: @@ -102,16 +110,6 @@ jobs: with: debug: true - # This first bit is a hack to stop the app building package dependencies that isn't needed by the test runner - # Otherwise xcodebuild will attempt building BSK and linking GRDB framework that is incompatible with Xcode 15 - - name: Build test runner - run: | - rm -rf LocalPackages - rm -rf DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved - git apply dependencies.patch - # sed -i '' '/\/\* Begin XCSwiftPackageProductDependency section \*\//,/\/\* End XCSwiftPackageProductDependency section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj - # sed -i '' '/\/\* Begin XCRemoteSwiftPackageReference section \*\//,/\/\* End XCRemoteSwiftPackageReference section \*\//d' DuckDuckGo.xcodeproj/project.pbxproj - - name: Build Sync e2e tests run: | set -o pipefail && xcodebuild build-for-testing \ diff --git a/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/Sync End-to-End UI Tests CI.xcscheme b/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/Sync End-to-End UI Tests CI.xcscheme index 68dbe3d4f5..cb1ad3c06b 100644 --- a/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/Sync End-to-End UI Tests CI.xcscheme +++ b/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/Sync End-to-End UI Tests CI.xcscheme @@ -4,7 +4,7 @@ version = "1.7"> + buildImplicitDependencies = "NO"> Date: Tue, 5 Nov 2024 08:37:19 +0100 Subject: [PATCH 73/90] Fix SwiftLint violation --- UITests/Common/XCUIApplicationExtension.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/UITests/Common/XCUIApplicationExtension.swift b/UITests/Common/XCUIApplicationExtension.swift index 6d47988925..e0c3b97aca 100644 --- a/UITests/Common/XCUIApplicationExtension.swift +++ b/UITests/Common/XCUIApplicationExtension.swift @@ -132,7 +132,6 @@ extension XCUIApplication { bookmarksPanelShortcutButton.tap() } - func verifyBookmarkOrder(expectedOrder: [String], mode: BookmarkMode) { let rowCount = (mode == .panel ? popovers.firstMatch.outlines.firstMatch : tables.firstMatch).cells.count XCTAssertEqual(rowCount, expectedOrder.count, "Row count does not match expected count.") From 8b4e1e062dd731af8e0856f162f2fa8ede84ad42 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Wed, 6 Nov 2024 16:27:04 -0800 Subject: [PATCH 74/90] Update BSK reference. --- .../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 698b045987..eb28fe9007 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -33,7 +33,7 @@ "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { "branch" : "dominik/xcode-16", - "revision" : "3160ecfd7a302956dc7fe6a5880758a25be95632" + "revision" : "0e44c2731cc48949860bd8d4338d57b5db7ec32a" } }, { From 99baf37ce092cd019c53f7a058391aca2b2e5dfe Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 7 Nov 2024 21:33:35 -0800 Subject: [PATCH 75/90] Fix merge conflict. --- DuckDuckGo.xcodeproj/project.pbxproj | 10 ++++++---- .../xcshareddata/swiftpm/Package.resolved | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index b1b98157a4..4cac80fc29 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -2792,7 +2792,6 @@ B6F9BDE52B45CD1900677B33 /* ModalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6F9BDE32B45CD1900677B33 /* ModalView.swift */; }; B6FA893F269C424500588ECD /* PrivacyDashboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FA893E269C424500588ECD /* PrivacyDashboardViewController.swift */; }; B6FA8941269C425400588ECD /* PrivacyDashboardPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FA8940269C425400588ECD /* PrivacyDashboardPopover.swift */; }; - BB1AD7232CC94F1D00210797 /* BrowserServicesKit in Frameworks */ = {isa = PBXBuildFile; productRef = EE02D41F2BB460C000DBE6B3 /* BrowserServicesKit */; }; BB4339DB2C7F9606005D7ED7 /* PinnedTabsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB4339DA2C7F9606005D7ED7 /* PinnedTabsTests.swift */; }; BB470EBB2C5A66D6002EE91D /* BookmarkManagementDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB470EBA2C5A66D6002EE91D /* BookmarkManagementDetailViewModel.swift */; }; BB470EBC2C5A66D6002EE91D /* BookmarkManagementDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB470EBA2C5A66D6002EE91D /* BookmarkManagementDetailViewModel.swift */; }; @@ -2982,6 +2981,8 @@ EA8AE76A279FBDB20078943E /* ClickToLoadTDSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA8AE769279FBDB20078943E /* ClickToLoadTDSTests.swift */; }; EE02D41A2BB4609900DBE6B3 /* UITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D4192BB4609900DBE6B3 /* UITests.swift */; }; EE02D41C2BB460A600DBE6B3 /* BrowsingHistoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D41B2BB460A600DBE6B3 /* BrowsingHistoryTests.swift */; }; + EE02D4202BB460C000DBE6B3 /* BrowserServicesKit in Frameworks */ = {isa = PBXBuildFile; productRef = EE02D41F2BB460C000DBE6B3 /* BrowserServicesKit */; }; + EE02D4212BB460FE00DBE6B3 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA8EDF2624923EC70071C2E8 /* StringExtension.swift */; }; EE02D4222BB4611A00DBE6B3 /* TestsURLExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6EC37FB29B83E99001ACE79 /* TestsURLExtension.swift */; }; EE0429E02BA31D2F009EB20F /* FindInPageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE0429DF2BA31D2F009EB20F /* FindInPageTests.swift */; }; EE098E772C8EDE2C009EBA7F /* AutofillCredentialsImportManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE098E762C8EDE2C009EBA7F /* AutofillCredentialsImportManager.swift */; }; @@ -5087,7 +5088,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BB1AD7232CC94F1D00210797 /* BrowserServicesKit in Frameworks */, + EE02D4202BB460C000DBE6B3 /* BrowserServicesKit in Frameworks */, 9D9DE57F2C63B64F00D20B15 /* AppKitExtensions in Frameworks */, B64E42872B908501006C1346 /* SnapshotTesting in Frameworks */, ); @@ -12548,6 +12549,7 @@ EE02D41A2BB4609900DBE6B3 /* UITests.swift in Sources */, EE0429E02BA31D2F009EB20F /* FindInPageTests.swift in Sources */, BBCD467A2C8643EC004DB483 /* XCUIApplicationExtension.swift in Sources */, + EE02D4212BB460FE00DBE6B3 /* StringExtension.swift in Sources */, BBBB65402C77BB9400E69AC6 /* BookmarkSearchTests.swift in Sources */, 56A054532C2592CE007D8FAB /* OnboardingUITests.swift in Sources */, EE9D81C32BC57A3700338BE3 /* StateRestorationTests.swift in Sources */, @@ -14970,7 +14972,7 @@ repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; requirement = { branch = "dominik/xcode-16"; - version = 207.0.0; + kind = branch; }; }; 9D84E4002CD4E66F0046CD8B /* XCRemoteSwiftPackageReference "OHHTTPStubs" */ = { @@ -14993,7 +14995,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; requirement = { - kind = branch; + kind = exactVersion; version = 200.3.0; }; }; diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index df48d91a91..f8bf36c5bb 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -33,7 +33,7 @@ "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { "branch" : "dominik/xcode-16", - "revision" : "0e44c2731cc48949860bd8d4338d57b5db7ec32a" + "revision" : "2d608234e6de619dfe4bceab2a35faf6b57bd259" } }, { From 6d8375005fb8a19b82a1ce93e8d2c9c1a072aa9e Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 7 Nov 2024 21:35:04 -0800 Subject: [PATCH 76/90] Restore file change. --- DuckDuckGo.xcodeproj/project.pbxproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 4cac80fc29..f1a8c2c9dc 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -2982,7 +2982,6 @@ EE02D41A2BB4609900DBE6B3 /* UITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D4192BB4609900DBE6B3 /* UITests.swift */; }; EE02D41C2BB460A600DBE6B3 /* BrowsingHistoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D41B2BB460A600DBE6B3 /* BrowsingHistoryTests.swift */; }; EE02D4202BB460C000DBE6B3 /* BrowserServicesKit in Frameworks */ = {isa = PBXBuildFile; productRef = EE02D41F2BB460C000DBE6B3 /* BrowserServicesKit */; }; - EE02D4212BB460FE00DBE6B3 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA8EDF2624923EC70071C2E8 /* StringExtension.swift */; }; EE02D4222BB4611A00DBE6B3 /* TestsURLExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6EC37FB29B83E99001ACE79 /* TestsURLExtension.swift */; }; EE0429E02BA31D2F009EB20F /* FindInPageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE0429DF2BA31D2F009EB20F /* FindInPageTests.swift */; }; EE098E772C8EDE2C009EBA7F /* AutofillCredentialsImportManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE098E762C8EDE2C009EBA7F /* AutofillCredentialsImportManager.swift */; }; @@ -12549,7 +12548,6 @@ EE02D41A2BB4609900DBE6B3 /* UITests.swift in Sources */, EE0429E02BA31D2F009EB20F /* FindInPageTests.swift in Sources */, BBCD467A2C8643EC004DB483 /* XCUIApplicationExtension.swift in Sources */, - EE02D4212BB460FE00DBE6B3 /* StringExtension.swift in Sources */, BBBB65402C77BB9400E69AC6 /* BookmarkSearchTests.swift in Sources */, 56A054532C2592CE007D8FAB /* OnboardingUITests.swift in Sources */, EE9D81C32BC57A3700338BE3 /* StateRestorationTests.swift in Sources */, From c2909d88570c7cf0b1dfda399d69eb60e49dac9c Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 7 Nov 2024 21:38:53 -0800 Subject: [PATCH 77/90] Use Xcode 16.1. --- .github/workflows/sync_end_to_end.yml | 2 +- .github/workflows/ui_tests.yml | 2 +- .xcode-version | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/sync_end_to_end.yml b/.github/workflows/sync_end_to_end.yml index b8a010a00d..071266b8c2 100644 --- a/.github/workflows/sync_end_to_end.yml +++ b/.github/workflows/sync_end_to_end.yml @@ -40,7 +40,7 @@ jobs: runner: macos-13-xlarge - xcode-version: "15.4" runner: macos-14-xlarge - - xcode-version: "16.0" + - xcode-version: "16.1" runner: macos-15-xlarge timeout-minutes: 60 diff --git a/.github/workflows/ui_tests.yml b/.github/workflows/ui_tests.yml index b289fa96cf..5f63530e45 100644 --- a/.github/workflows/ui_tests.yml +++ b/.github/workflows/ui_tests.yml @@ -44,7 +44,7 @@ jobs: runner: macos-13-xlarge - xcode-version: "15.4" runner: macos-14-xlarge - - xcode-version: "16" + - xcode-version: "16.1" runner: macos-15-xlarge concurrency: diff --git a/.xcode-version b/.xcode-version index 0d68f8a0eb..c32b0ec5ab 100644 --- a/.xcode-version +++ b/.xcode-version @@ -1 +1 @@ -16.0 +16.1 From 253d6584fcb1cf02bf03533064141db4ddbe2de1 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Fri, 8 Nov 2024 08:53:20 -0800 Subject: [PATCH 78/90] Remove entitlement from App Store review build. --- Configuration/App/DuckDuckGoAppStore.xcconfig | 1 + DuckDuckGo.xcodeproj/project.pbxproj | 2 + .../DuckDuckGoAppStoreReview.entitlements | 62 +++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 DuckDuckGo/DuckDuckGoAppStoreReview.entitlements diff --git a/Configuration/App/DuckDuckGoAppStore.xcconfig b/Configuration/App/DuckDuckGoAppStore.xcconfig index 6845ef0afe..c4ed245f5b 100644 --- a/Configuration/App/DuckDuckGoAppStore.xcconfig +++ b/Configuration/App/DuckDuckGoAppStore.xcconfig @@ -22,6 +22,7 @@ PRODUCT_BUNDLE_IDENTIFIER = $(MAIN_BUNDLE_IDENTIFIER) CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGoAppStore.entitlements CODE_SIGN_ENTITLEMENTS[config=Debug][arch=*][sdk=*] = DuckDuckGo/DuckDuckGoAppStoreDebug.entitlements CODE_SIGN_ENTITLEMENTS[config=CI][arch=*][sdk=*] = DuckDuckGo/DuckDuckGoAppStoreCI.entitlements +CODE_SIGN_ENTITLEMENTS[config=Review][arch=*][sdk=*] = DuckDuckGo/DuckDuckGoAppStoreCI.entitlements CODE_SIGN_IDENTITY[sdk=macosx*] = 3rd Party Mac Developer Application CODE_SIGN_IDENTITY[config=Debug][sdk=macosx*] = Apple Development diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index f1a8c2c9dc..c2ce8775bf 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -3870,6 +3870,7 @@ 4BA1A6F5258C4F9600F6F690 /* EncryptionMocks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionMocks.swift; sourceTree = ""; }; 4BA1A6FD258C5C1300F6F690 /* EncryptedValueTransformerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptedValueTransformerTests.swift; sourceTree = ""; }; 4BA71ED92B4B81E80002EBCE /* AppVersionExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppVersionExtension.swift; sourceTree = ""; }; + 4BA808FF2CDE78F600338EE4 /* DuckDuckGoAppStoreReview.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DuckDuckGoAppStoreReview.entitlements; sourceTree = ""; }; 4BB6CE5E26B77ED000EC5860 /* Cryptography.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cryptography.swift; sourceTree = ""; }; 4BB88B4425B7B55C006F6B06 /* DebugUserScript.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebugUserScript.swift; sourceTree = ""; }; 4BB88B4925B7B690006F6B06 /* SequenceExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SequenceExtensions.swift; sourceTree = ""; }; @@ -7742,6 +7743,7 @@ 37D9BBA329376EE8000B99F9 /* DuckDuckGoAppStore.entitlements */, 377E54382937B7C400780A0A /* DuckDuckGoAppStoreCI.entitlements */, 37E1116C2C578F1B00583C19 /* DuckDuckGoAppStoreDebug.entitlements */, + 4BA808FF2CDE78F600338EE4 /* DuckDuckGoAppStoreReview.entitlements */, 4B5F15032A1570F10060320F /* DuckDuckGoDebug.entitlements */, 4B65143C26392483005B46EB /* Email */, B68412192B6A16030092F66A /* ErrorPage */, diff --git a/DuckDuckGo/DuckDuckGoAppStoreReview.entitlements b/DuckDuckGo/DuckDuckGoAppStoreReview.entitlements new file mode 100644 index 0000000000..7502df54c6 --- /dev/null +++ b/DuckDuckGo/DuckDuckGoAppStoreReview.entitlements @@ -0,0 +1,62 @@ + + + + + com.apple.developer.networking.networkextension + + packet-tunnel-provider + app-proxy-provider + + com.apple.security.app-sandbox + + com.apple.security.application-groups + + $(IPC_APP_GROUP) + $(DBP_APP_GROUP) + $(NETP_APP_GROUP) + $(SUBSCRIPTION_APP_GROUP) + $(APP_CONFIGURATION_APP_GROUP) + + com.apple.security.device.audio-input + + com.apple.security.device.camera + + com.apple.security.files.downloads.read-write + + com.apple.security.files.user-selected.read-write + + com.apple.security.network.client + + com.apple.security.personal-information.location + + com.apple.security.print + + com.apple.security.temporary-exception.files.home-relative-path.read-only + + /Library/Application Support/Google/Chrome/ + /Library/Application Support/BraveSoftware/Brave-Browser/ + /Library/Application Support/Firefox/ + /Library/Application Support/Microsoft Edge/ + /Library/Application Support/Vivaldi/ + /Library/Application Support/com.operasoftware.Opera/ + /Library/Application Support/com.operasoftware.OperaGX/ + /Library/Application Support/Yandex/YandexBrowser/ + /Library/Application Support/Chromium/ + /Library/Application Support/Coccoc/ + /Library/Application Support/TorBrowser-Data/Browser/ + /Library/Application Support/Arc/User Data/ + + com.apple.security.temporary-exception.mach-lookup.global-name + + $(DBP_BACKGROUND_AGENT_BUNDLE_ID) + $(AGENT_BUNDLE_ID) + + keychain-access-groups + + $(DBP_APP_GROUP) + $(AppIdentifierPrefix)com.duckduckgo.mobile.ios + $(NETP_APP_GROUP) + $(SUBSCRIPTION_APP_GROUP) + + + From 082fb657f429fa130ddef018aae7f533d501bb22 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Fri, 8 Nov 2024 10:20:03 -0800 Subject: [PATCH 79/90] Check for the review app path. --- .github/workflows/build_appstore.yml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_appstore.yml b/.github/workflows/build_appstore.yml index af342181f9..a1ea7a269c 100644 --- a/.github/workflows/build_appstore.yml +++ b/.github/workflows/build_appstore.yml @@ -111,9 +111,17 @@ jobs: APPLE_API_KEY_ISSUER: ${{ secrets.APPLE_API_KEY_ISSUER }} MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} run: | + if [ "${{ env.destination }}" == "testflight_review" ]; then + app_bundle_name="DuckDuckGo App Store Review" + app_dsym_name="DuckDuckGo-AppStore-Review" + else + app_bundle_name="DuckDuckGo App Store" + app_dsym_name="DuckDuckGo-AppStore" + fi + bundle exec fastlane release_${{ env.destination }} - dsym_path="${{ github.workspace }}/DuckDuckGo-AppStore.app.dSYM.zip" - mv -f "${{ github.workspace }}/DuckDuckGo App Store.app.dSYM.zip" "${dsym_path}" + dsym_path="${{ github.workspace }}/${app_dsym_name}.app.dSYM.zip" + mv -f "${{ github.workspace }}/${app_bundle_name}.app.dSYM.zip" "${dsym_path}" version="$(cut -d ' ' -f 3 < Configuration/Version.xcconfig)" build_number="$(cut -d ' ' -f 3 < Configuration/BuildNumber.xcconfig)" echo "dsym-path=${dsym_path}" >> $GITHUB_ENV From b020042e6411f7d07c994f1d3e980c67ae00cc16 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Fri, 8 Nov 2024 10:38:36 -0800 Subject: [PATCH 80/90] Add temporary build number bump. --- Configuration/BuildNumber.xcconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Configuration/BuildNumber.xcconfig b/Configuration/BuildNumber.xcconfig index 891529153c..a518b11358 100644 --- a/Configuration/BuildNumber.xcconfig +++ b/Configuration/BuildNumber.xcconfig @@ -1 +1 @@ -CURRENT_PROJECT_VERSION = 301 +CURRENT_PROJECT_VERSION = 302 From 643f3ed738900facb4e62f6a592fbfdc853689e2 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Fri, 8 Nov 2024 11:08:19 -0800 Subject: [PATCH 81/90] Revert "Add temporary build number bump." This reverts commit b020042e6411f7d07c994f1d3e980c67ae00cc16. --- Configuration/BuildNumber.xcconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Configuration/BuildNumber.xcconfig b/Configuration/BuildNumber.xcconfig index a518b11358..891529153c 100644 --- a/Configuration/BuildNumber.xcconfig +++ b/Configuration/BuildNumber.xcconfig @@ -1 +1 @@ -CURRENT_PROJECT_VERSION = 302 +CURRENT_PROJECT_VERSION = 301 From 449f1247a50615e6a9a8a68d83a00f20ec5613b4 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Mon, 11 Nov 2024 19:20:30 -0800 Subject: [PATCH 82/90] Update BSK reference. --- .../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 6c3a74cda7..17985029a0 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -33,7 +33,7 @@ "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { "branch" : "dominik/xcode-16", - "revision" : "2d608234e6de619dfe4bceab2a35faf6b57bd259" + "revision" : "3ac3fbfd059b4dd3d17811159e661a3262e9d34f" } }, { From 0406ecdc9ef824dd709b2e40c0bc024b8263cb1d Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Tue, 12 Nov 2024 18:03:20 -0800 Subject: [PATCH 83/90] Update BSK reference. --- .../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 17985029a0..782c3fbb73 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -33,7 +33,7 @@ "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { "branch" : "dominik/xcode-16", - "revision" : "3ac3fbfd059b4dd3d17811159e661a3262e9d34f" + "revision" : "722c0b352c957e81c555d45a6fe1b8941aaf99a8" } }, { From 43fd6fd8a420f122871d758214be1be87773babe Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Wed, 13 Nov 2024 12:11:15 -0800 Subject: [PATCH 84/90] Update BSK reference --- .../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 782c3fbb73..10a8ff4368 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -33,7 +33,7 @@ "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { "branch" : "dominik/xcode-16", - "revision" : "722c0b352c957e81c555d45a6fe1b8941aaf99a8" + "revision" : "4998cc95a4a725e383c8d146392a33772a8a5635" } }, { From 95256959f72c5718ae88ff8a32311319b316f014 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Wed, 13 Nov 2024 13:52:11 -0800 Subject: [PATCH 85/90] Check which versions of Xcode are available. --- .github/workflows/pr.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index e7f7b35a89..4ef265d874 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -176,7 +176,9 @@ jobs: ${{ runner.os }}-spm-${{ matrix.cache-key }} - name: Select Xcode - run: sudo xcode-select -s /Applications/Xcode_$(<.xcode-version).app/Contents/Developer + run: | + ls -n /Applications | grep Xcode + sudo xcode-select -s /Applications/Xcode_$(<.xcode-version).app/Contents/Developer - name: Build and run unit tests run: | From db93ad98f9dfea2065179c7dd83fa463f5af482f Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Wed, 13 Nov 2024 13:57:39 -0800 Subject: [PATCH 86/90] Fix macOS runner version. --- .github/workflows/pr.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 4ef265d874..a7892b608b 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -68,7 +68,7 @@ jobs: name: Test Shell Scripts - runs-on: macos-14 + runs-on: macos-15 steps: - name: Check out the code @@ -119,7 +119,7 @@ jobs: - cache-key: sandbox- flavor: Sandbox - runs-on: macos-14-xlarge + runs-on: macos-15-xlarge timeout-minutes: 30 outputs: @@ -176,9 +176,7 @@ jobs: ${{ runner.os }}-spm-${{ matrix.cache-key }} - name: Select Xcode - run: | - ls -n /Applications | grep Xcode - sudo xcode-select -s /Applications/Xcode_$(<.xcode-version).app/Contents/Developer + run: sudo xcode-select -s /Applications/Xcode_$(<.xcode-version).app/Contents/Developer - name: Build and run unit tests run: | @@ -319,7 +317,7 @@ jobs: # workflow_call is used by bump_internal_release and is followed by a proper release job if: github.actor != 'dependabot[bot]' && (github.event_name == 'push' || github.event_name == 'pull_request') - runs-on: macos-14-xlarge + runs-on: macos-15-xlarge timeout-minutes: 30 steps: From cbc3223bef0acdd0e203df5f69cd435c5905ab58 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 14 Nov 2024 14:51:12 -0800 Subject: [PATCH 87/90] Remove strange merge artifact. --- DuckDuckGo.xcodeproj/project.pbxproj | 8 -------- 1 file changed, 8 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 95b2ee5ebc..a1d345e7b6 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -15075,14 +15075,6 @@ kind = branch; }; }; - 9D84E4002CD4E66F0046CD8B /* XCRemoteSwiftPackageReference "OHHTTPStubs" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/AliSoftware/OHHTTPStubs.git"; - requirement = { - kind = exactVersion; - version = 210.0.1; - }; - }; 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/airbnb/lottie-spm.git"; From 13a9c86703573e6fa698f4adad500d2320246ab2 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 14 Nov 2024 14:55:28 -0800 Subject: [PATCH 88/90] Fix entitlements file reference. --- Configuration/App/DuckDuckGoAppStore.xcconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Configuration/App/DuckDuckGoAppStore.xcconfig b/Configuration/App/DuckDuckGoAppStore.xcconfig index c4ed245f5b..2f8b968f22 100644 --- a/Configuration/App/DuckDuckGoAppStore.xcconfig +++ b/Configuration/App/DuckDuckGoAppStore.xcconfig @@ -22,7 +22,7 @@ PRODUCT_BUNDLE_IDENTIFIER = $(MAIN_BUNDLE_IDENTIFIER) CODE_SIGN_ENTITLEMENTS = DuckDuckGo/DuckDuckGoAppStore.entitlements CODE_SIGN_ENTITLEMENTS[config=Debug][arch=*][sdk=*] = DuckDuckGo/DuckDuckGoAppStoreDebug.entitlements CODE_SIGN_ENTITLEMENTS[config=CI][arch=*][sdk=*] = DuckDuckGo/DuckDuckGoAppStoreCI.entitlements -CODE_SIGN_ENTITLEMENTS[config=Review][arch=*][sdk=*] = DuckDuckGo/DuckDuckGoAppStoreCI.entitlements +CODE_SIGN_ENTITLEMENTS[config=Review][arch=*][sdk=*] = DuckDuckGo/DuckDuckGoAppStoreReview.entitlements CODE_SIGN_IDENTITY[sdk=macosx*] = 3rd Party Mac Developer Application CODE_SIGN_IDENTITY[config=Debug][sdk=macosx*] = Apple Development From 79c33408218d41a6c0960d565c88b11a64133018 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 14 Nov 2024 15:10:04 -0800 Subject: [PATCH 89/90] Update BSK reference. --- .../xcshareddata/swiftpm/Package.resolved | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 5f1caf816e..064ebc9254 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -33,7 +33,7 @@ "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { "branch" : "dominik/xcode-16", - "revision" : "4998cc95a4a725e383c8d146392a33772a8a5635" + "revision" : "303fb2d0bcb32e08fbaa5ecd7a437064f68bc931" } }, { @@ -59,8 +59,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/GRDB.swift.git", "state" : { - "revision" : "4225b85c9a0c50544e413a1ea1e502c802b44b35", - "version" : "2.4.0" + "revision" : "5b2f6a81099d26ae0f9e38788f51490cd6a4b202", + "version" : "2.4.2" } }, { From 2738006372e11b63f73b31e099abe0115e963918 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 14 Nov 2024 18:35:04 -0800 Subject: [PATCH 90/90] Set BSK to 210.0.2 --- DuckDuckGo.xcodeproj/project.pbxproj | 4 ++-- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 4 ++-- LocalPackages/DataBrokerProtection/Package.swift | 2 +- LocalPackages/FeatureFlags/Package.swift | 2 +- LocalPackages/NetworkProtectionMac/Package.swift | 2 +- LocalPackages/SubscriptionUI/Package.swift | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index a1d345e7b6..743c7d2377 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -15071,8 +15071,8 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; requirement = { - branch = "dominik/xcode-16"; - kind = branch; + kind = exactVersion; + version = 210.0.2; }; }; 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 064ebc9254..f5feb11db7 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" : { - "branch" : "dominik/xcode-16", - "revision" : "303fb2d0bcb32e08fbaa5ecd7a437064f68bc931" + "revision" : "07af4d672e003cc247e28a01b9fe3e77abaf49f9", + "version" : "210.0.2" } }, { diff --git a/LocalPackages/DataBrokerProtection/Package.swift b/LocalPackages/DataBrokerProtection/Package.swift index ba3685c716..b4cbbb80d3 100644 --- a/LocalPackages/DataBrokerProtection/Package.swift +++ b/LocalPackages/DataBrokerProtection/Package.swift @@ -29,7 +29,7 @@ let package = Package( targets: ["DataBrokerProtection"]) ], dependencies: [ - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "210.0.1"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "210.0.2"), .package(path: "../SwiftUIExtensions"), .package(path: "../AppKitExtensions"), .package(path: "../XPCHelper"), diff --git a/LocalPackages/FeatureFlags/Package.swift b/LocalPackages/FeatureFlags/Package.swift index 673391b842..9dfada92aa 100644 --- a/LocalPackages/FeatureFlags/Package.swift +++ b/LocalPackages/FeatureFlags/Package.swift @@ -32,7 +32,7 @@ let package = Package( targets: ["FeatureFlags"]), ], dependencies: [ - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "210.0.1"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "210.0.2"), ], targets: [ // Targets are the basic building blocks of a package, defining a module or a test suite. diff --git a/LocalPackages/NetworkProtectionMac/Package.swift b/LocalPackages/NetworkProtectionMac/Package.swift index e0e7b63e3a..4289525b39 100644 --- a/LocalPackages/NetworkProtectionMac/Package.swift +++ b/LocalPackages/NetworkProtectionMac/Package.swift @@ -32,7 +32,7 @@ let package = Package( .library(name: "VPNAppLauncher", targets: ["VPNAppLauncher"]), ], dependencies: [ - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "210.0.1"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "210.0.2"), .package(url: "https://github.com/airbnb/lottie-spm", exact: "4.4.3"), .package(path: "../AppLauncher"), .package(path: "../UDSHelper"), diff --git a/LocalPackages/SubscriptionUI/Package.swift b/LocalPackages/SubscriptionUI/Package.swift index fadd3544e4..bfbec76e9e 100644 --- a/LocalPackages/SubscriptionUI/Package.swift +++ b/LocalPackages/SubscriptionUI/Package.swift @@ -12,7 +12,7 @@ let package = Package( targets: ["SubscriptionUI"]), ], dependencies: [ - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "210.0.1"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "210.0.2"), .package(path: "../SwiftUIExtensions") ], targets: [