From 4241dd78cd82173977c6113a7ebedad050b2e072 Mon Sep 17 00:00:00 2001 From: Philippe Weidmann Date: Fri, 7 Feb 2025 09:30:13 +0100 Subject: [PATCH 1/6] chore: Upgrade tuist + Explicitly declare dependencies Signed-off-by: Philippe Weidmann --- .github/workflows/ci.yml | 4 +- .mise.toml | 2 +- Project.swift | 60 +++++++++++++------ Tuist/Package.swift | 18 ++++-- .../ExtensionTarget.swift | 6 +- kDriveCore/VideoPlayer/VideoPlayer.swift | 1 - 6 files changed, 65 insertions(+), 26 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 830e5f2dc..5976cb1a0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,6 +30,6 @@ jobs: touch $ENV_PATH echo -e "enum Env {\n static let token = \"$ACCESS_TOKEN\"\n\n static let driveId = 420132\n\n static let userId = $USER_ID\n\n static let inviteUserId = $INVITE_USER_ID\n\n static let inviteMail = \"$INVITE_EMAIL\"\n\n static let inviteTeam = 0\n\n static let commonDocumentsId = 3\n}" > $ENV_PATH - name: Build - run: tuist install && tuist build --generate kDrive + run: tuist install && tuist generate && tuist build --clean kDrive - name: Test - run: tuist test kDrive --test-targets kDriveTests/DriveApiTests + run: tuist test kDrive-Workspace --test-targets kDriveTests/DriveApiTests diff --git a/.mise.toml b/.mise.toml index 1b1ca60cd..670fa8f30 100644 --- a/.mise.toml +++ b/.mise.toml @@ -1,5 +1,5 @@ [tools] -tuist = '4.12.1' +tuist = '4.41.0' periphery = '2.21.1' swiftformat = '0.54.5' swiftlint = '0.57.0' diff --git a/Project.swift b/Project.swift index 5036116a1..6eb3937b7 100644 --- a/Project.swift +++ b/Project.swift @@ -48,13 +48,17 @@ let project = Project(name: "kDrive", .target(name: "kDriveCore"), .target(name: "kDriveShareExtension"), .target(name: "kDriveActionExtension"), - .external(name: "FloatingPanel"), - .external(name: "Lottie"), + .external(name: "CocoaLumberjackSwift"), + .external(name: "CocoaLumberjack"), .external(name: "DropDown"), + .external(name: "FloatingPanel"), + .external(name: "Highlightr"), .external(name: "HorizonCalendar"), .external(name: "Kvitto"), - .external(name: "Highlightr"), + .external(name: "Lottie"), .external(name: "MarkdownKit"), + .external(name: "RealmSwift"), + .external(name: "Realm"), .sdk(name: "StoreKit", type: .framework, status: .required) ], settings: .settings(base: Constants.baseSettings), @@ -76,7 +80,16 @@ let project = Project(name: "kDrive", "kDriveTests/**/*.json" ], dependencies: [ - .target(name: "kDrive") + .target(name: "kDrive"), + .target(name: "kDriveCore"), + .external(name: "Alamofire"), + .external(name: "InfomaniakCoreCommonUI"), + .external(name: "InfomaniakCoreUIKit"), + .external(name: "InfomaniakCore"), + .external(name: "InfomaniakDI"), + .external(name: "InfomaniakLogin"), + .external(name: "RealmSwift"), + .external(name: "Realm") ], settings: .settings(base: Constants.testSettings)), .target(name: "kDriveAPITests", @@ -90,7 +103,13 @@ let project = Project(name: "kDrive", "kDriveTestShared/**" ], dependencies: [ - .target(name: "kDrive") + .target(name: "kDrive"), + .target(name: "kDriveCore"), + .external(name: "InfomaniakCore"), + .external(name: "InfomaniakDI"), + .external(name: "InfomaniakLogin"), + .external(name: "RealmSwift"), + .external(name: "Realm") ], settings: .settings(base: Constants.testSettings)), .target(name: "kDriveUITests", @@ -133,24 +152,25 @@ let project = Project(name: "kDrive", .external(name: "Alamofire"), .external(name: "Algorithms"), .external(name: "Atlantis"), - .external(name: "MQTTNIO"), - .external(name: "InfomaniakCore"), - .external(name: "InfomaniakCoreDB"), + .external(name: "CocoaLumberjackSwift"), + .external(name: "CocoaLumberjack"), + .external(name: "DifferenceKit"), + .external(name: "InfomaniakConcurrency"), .external(name: "InfomaniakCoreCommonUI"), + .external(name: "InfomaniakCoreDB"), .external(name: "InfomaniakCoreSwiftUI"), .external(name: "InfomaniakCoreUIKit"), - .external(name: "InfomaniakLogin"), + .external(name: "InfomaniakCore"), .external(name: "InfomaniakDI"), - .external(name: "InfomaniakConcurrency"), - .external(name: "RealmSwift"), + .external(name: "InfomaniakLogin"), .external(name: "Kingfisher"), - .external(name: "DifferenceKit"), - .external(name: "CocoaLumberjackSwift"), + .external(name: "LocalizeKit"), .external(name: "MaterialOutlinedTextField"), - .external(name: "SwiftRegex"), + .external(name: "MQTTNIO"), + .external(name: "RealmSwift"), .external(name: "Sentry-Dynamic"), - .external(name: "VersionChecker"), - .external(name: "LocalizeKit") + .external(name: "SwiftRegex"), + .external(name: "VersionChecker") ]), .target(name: "kDriveFileProvider", destinations: Constants.destinations, @@ -170,7 +190,13 @@ let project = Project(name: "kDrive", headers: .headers(project: "kDriveFileProvider/**"), entitlements: "kDriveFileProvider/FileProvider.entitlements", dependencies: [ - .target(name: "kDriveCore") + .target(name: "kDriveCore"), + .external(name: "CocoaLumberjackSwift"), + .external(name: "CocoaLumberjack"), + .external(name: "InfomaniakCore"), + .external(name: "InfomaniakDI"), + .external(name: "InfomaniakLogin"), + .external(name: "RealmSwift") ], settings: .settings( base: Constants.fileProviderSettings, diff --git a/Tuist/Package.swift b/Tuist/Package.swift index be1b55181..9c98e60d0 100644 --- a/Tuist/Package.swift +++ b/Tuist/Package.swift @@ -1,5 +1,5 @@ -// swift-tools-version: 5.9 -import PackageDescription +// swift-tools-version: 5.10 +@preconcurrency import PackageDescription #if TUIST import ProjectDescription @@ -7,8 +7,18 @@ import ProjectDescriptionHelpers let packageSettings = PackageSettings( productTypes: [ - "RealmSwift": .staticLibrary, - "Realm": .staticLibrary + "Alamofire": .framework, + "Atlantis": .staticFramework, + "CocoaLumberjackSwift": .framework, + "CocoaLumberjack": .framework, + "InfomaniakDI": .framework, + "InfomaniakLogin": .framework, + "InfomaniakCore": .framework, + "InfomaniakCoreCommonUI": .framework, + "InfomaniakCoreUIKit": .framework, + "Kingfisher": .framework, + "RealmSwift": .framework, + "Realm": .framework ] ) diff --git a/Tuist/ProjectDescriptionHelpers/ExtensionTarget.swift b/Tuist/ProjectDescriptionHelpers/ExtensionTarget.swift index 29445bbf3..20c693a22 100644 --- a/Tuist/ProjectDescriptionHelpers/ExtensionTarget.swift +++ b/Tuist/ProjectDescriptionHelpers/ExtensionTarget.swift @@ -109,7 +109,11 @@ public extension Target { .external(name: "FloatingPanel"), .external(name: "Lottie"), .external(name: "DropDown"), - .external(name: "HorizonCalendar") + .external(name: "HorizonCalendar"), + .external(name: "Realm"), + .external(name: "RealmSwift"), + .external(name: "CocoaLumberjack"), + .external(name: "CocoaLumberjackSwift") ], settings: settings) } diff --git a/kDriveCore/VideoPlayer/VideoPlayer.swift b/kDriveCore/VideoPlayer/VideoPlayer.swift index 215f6beaa..fffd882b0 100644 --- a/kDriveCore/VideoPlayer/VideoPlayer.swift +++ b/kDriveCore/VideoPlayer/VideoPlayer.swift @@ -18,7 +18,6 @@ import AVKit import Combine -import FloatingPanel import InfomaniakCore import InfomaniakDI import kDriveResources From 9b80a95253ffa77722ffa5556c1d35b4153d09ed Mon Sep 17 00:00:00 2001 From: Philippe Weidmann Date: Fri, 7 Feb 2025 10:35:34 +0100 Subject: [PATCH 2/6] fix: Remove target grouping Signed-off-by: Philippe Weidmann --- .github/workflows/ci.yml | 4 ++-- Project.swift | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5976cb1a0..40cb1ad42 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,5 +31,5 @@ jobs: echo -e "enum Env {\n static let token = \"$ACCESS_TOKEN\"\n\n static let driveId = 420132\n\n static let userId = $USER_ID\n\n static let inviteUserId = $INVITE_USER_ID\n\n static let inviteMail = \"$INVITE_EMAIL\"\n\n static let inviteTeam = 0\n\n static let commonDocumentsId = 3\n}" > $ENV_PATH - name: Build run: tuist install && tuist generate && tuist build --clean kDrive - - name: Test - run: tuist test kDrive-Workspace --test-targets kDriveTests/DriveApiTests + - name: Test API + run: tuist test kDriveAPITests --test-targets kDriveAPITests diff --git a/Project.swift b/Project.swift index 6eb3937b7..7ac81dae1 100644 --- a/Project.swift +++ b/Project.swift @@ -21,7 +21,11 @@ import ProjectDescription import ProjectDescriptionHelpers let project = Project(name: "kDrive", - packages: [], + options: .options( + automaticSchemesOptions: .enabled( + targetSchemesGrouping: .notGrouped + ) + ), targets: [ .target(name: "kDrive", destinations: Constants.destinations, From 59c0bda68e56d2e1ab73b2f7e6c5b7612d011e1b Mon Sep 17 00:00:00 2001 From: Philippe Weidmann Date: Fri, 7 Feb 2025 10:56:32 +0100 Subject: [PATCH 3/6] test: Shared Env Signed-off-by: Philippe Weidmann --- .github/workflows/ci.yml | 2 +- .gitignore | 1 + .../Env.sample.swift | 0 kDriveTests/Env.sample.swift | 40 ------------------- 4 files changed, 2 insertions(+), 41 deletions(-) rename {kDriveAPITests => kDriveTestShared}/Env.sample.swift (100%) delete mode 100644 kDriveTests/Env.sample.swift diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 40cb1ad42..b001741f0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@v2 - name: Create test env env: - ENV_PATH: "kDriveTests/Env.swift" + ENV_PATH: "kDriveTestShared/Env.swift" ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} USER_ID: ${{ secrets.USER_ID }} INVITE_USER_ID: ${{ secrets.INVITE_USER_ID }} diff --git a/.gitignore b/.gitignore index 7fd4b0278..ca6d36877 100644 --- a/.gitignore +++ b/.gitignore @@ -71,3 +71,4 @@ release/ kDriveTests/Env.swift kDriveAPITests/Env.swift kDriveUITests/Env.swift +kDriveTestShared/Env.swift diff --git a/kDriveAPITests/Env.sample.swift b/kDriveTestShared/Env.sample.swift similarity index 100% rename from kDriveAPITests/Env.sample.swift rename to kDriveTestShared/Env.sample.swift diff --git a/kDriveTests/Env.sample.swift b/kDriveTests/Env.sample.swift deleted file mode 100644 index 33ce6855b..000000000 --- a/kDriveTests/Env.sample.swift +++ /dev/null @@ -1,40 +0,0 @@ -/* - Infomaniak kDrive - iOS App - Copyright (C) 2021 Infomaniak Network SA - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -// Use this template to create your `Env` file. You will need to remove "_Sample" from the name. -enum Env_Sample { - // Set your token here - static let token = "" - - // Drive de test dev infomaniak - static let driveId = 140_946 - - // Set your user ID here - static let userId = 0 - - // Set the user ID to invite - static let inviteUserId = 0 - - // Set the email to invite - static let inviteMail = "email@example.com" - - // Set the team to invite - static let inviteTeam = 0 - - static let commonDocumentsId = 3 -} From f63deeaf64b6b83e73746e988e7b317c1d24212a Mon Sep 17 00:00:00 2001 From: Philippe Weidmann Date: Fri, 7 Feb 2025 11:25:13 +0100 Subject: [PATCH 4/6] fix: Lottie needs to be dynamic Signed-off-by: Philippe Weidmann --- Tuist/Package.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Tuist/Package.swift b/Tuist/Package.swift index 9c98e60d0..b01b5762b 100644 --- a/Tuist/Package.swift +++ b/Tuist/Package.swift @@ -17,6 +17,7 @@ let packageSettings = PackageSettings( "InfomaniakCoreCommonUI": .framework, "InfomaniakCoreUIKit": .framework, "Kingfisher": .framework, + "Lottie": .framework, "RealmSwift": .framework, "Realm": .framework ] From 26f39da58253576cde087c341e1ecd1241d1982c Mon Sep 17 00:00:00 2001 From: Philippe Weidmann Date: Fri, 7 Feb 2025 11:48:04 +0100 Subject: [PATCH 5/6] test: Remove old test + Stop testing DriveFileManager Signed-off-by: Philippe Weidmann --- .github/workflows/ci.yml | 2 +- kDriveAPITests/kDriveCore/DriveApiTests.swift | 15 --------------- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b001741f0..ee76e1954 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,4 +32,4 @@ jobs: - name: Build run: tuist install && tuist generate && tuist build --clean kDrive - name: Test API - run: tuist test kDriveAPITests --test-targets kDriveAPITests + run: tuist test kDriveAPITests --test-targets kDriveAPITests/DriveApiTests diff --git a/kDriveAPITests/kDriveCore/DriveApiTests.swift b/kDriveAPITests/kDriveCore/DriveApiTests.swift index 35299af7a..5d4a5745d 100644 --- a/kDriveAPITests/kDriveCore/DriveApiTests.swift +++ b/kDriveAPITests/kDriveCore/DriveApiTests.swift @@ -640,21 +640,6 @@ final class DriveApiTests: XCTestCase { // MARK: Miscellaneous - func testSearchFiles() async throws { - let (testDirectory, file) = try await initOfficeFile(testName: "Search files") - let files = try await currentApiFetcher.searchFiles( - drive: proxyDrive, - query: "officeFile", - fileExtensions: [], - categories: [], - belongToAllCategories: true, - sortType: .newer - ).validApiResponse.data - let fileFound = files.contains { $0.id == file.id } - XCTAssertTrue(fileFound, "File created should be in response") - tearDownTest(directory: testDirectory) - } - func testUndoAction() async throws { let (testDirectory, file) = try await initOfficeFile(testName: "Undo action") let directory = try await createTestDirectory(name: "test", parentDirectory: testDirectory) From 55b068550ec9e0403fa5c860bb8144ed32ee731c Mon Sep 17 00:00:00 2001 From: Philippe Weidmann Date: Fri, 7 Feb 2025 12:37:13 +0100 Subject: [PATCH 6/6] test: Update some old tests Signed-off-by: Philippe Weidmann --- .github/workflows/ci.yml | 4 +++- kDriveTests/StateRestoration/UTSceneRestorationMetadata.swift | 2 +- kDriveTests/kDriveCore/Drive/ITDrive.swift | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ee76e1954..70957ff41 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,5 +31,7 @@ jobs: echo -e "enum Env {\n static let token = \"$ACCESS_TOKEN\"\n\n static let driveId = 420132\n\n static let userId = $USER_ID\n\n static let inviteUserId = $INVITE_USER_ID\n\n static let inviteMail = \"$INVITE_EMAIL\"\n\n static let inviteTeam = 0\n\n static let commonDocumentsId = 3\n}" > $ENV_PATH - name: Build run: tuist install && tuist generate && tuist build --clean kDrive + - name: Test Local + run: tuist generate && tuist test kDriveTests - name: Test API - run: tuist test kDriveAPITests --test-targets kDriveAPITests/DriveApiTests + run: tuist generate && tuist test kDriveAPITests --test-targets kDriveAPITests/DriveApiTests diff --git a/kDriveTests/StateRestoration/UTSceneRestorationMetadata.swift b/kDriveTests/StateRestoration/UTSceneRestorationMetadata.swift index deec6a26f..8651e8c54 100644 --- a/kDriveTests/StateRestoration/UTSceneRestorationMetadata.swift +++ b/kDriveTests/StateRestoration/UTSceneRestorationMetadata.swift @@ -90,7 +90,7 @@ final class UTSceneRestorationMetadata: XCTestCase { XCTAssertEqual(metadata["filesIds"] as? [Int], [1337]) XCTAssertEqual(metadata["currentIndex"] as? Int, Int(0)) XCTAssertEqual(metadata["normalFolderHierarchy"] as? Bool, true) - XCTAssertEqual(metadata["presentationOrigin"] as? PresentationOrigin, .activities) + XCTAssertEqual(metadata["presentationOrigin"] as? String, PresentationOrigin.activities.rawValue) } @MainActor func testFileDetailViewController() { diff --git a/kDriveTests/kDriveCore/Drive/ITDrive.swift b/kDriveTests/kDriveCore/Drive/ITDrive.swift index 373d73d55..fc6bd4335 100644 --- a/kDriveTests/kDriveCore/Drive/ITDrive.swift +++ b/kDriveTests/kDriveCore/Drive/ITDrive.swift @@ -40,6 +40,7 @@ final class ITDrive: XCTestCase { } let decoder = JSONDecoder() + decoder.keyDecodingStrategy = .convertFromSnakeCase // WHEN do { @@ -62,6 +63,7 @@ final class ITDrive: XCTestCase { } let decoder = JSONDecoder() + decoder.keyDecodingStrategy = .convertFromSnakeCase // WHEN do {