diff --git a/Source/CarthageKit/Project.swift b/Source/CarthageKit/Project.swift index cf0f164f5a..fade4a72d5 100644 --- a/Source/CarthageKit/Project.swift +++ b/Source/CarthageKit/Project.swift @@ -1002,9 +1002,7 @@ public final class Project { // swiftlint:disable:this type_body_length var urls: [URL] = [] urls += (try? fileManager .contentsOfDirectory( - at: self.directoryURL.appendingPathComponent( - Constants.checkoutsFolderPath, isDirectory: true - ), + at: self.directoryURL.appendingPathComponent(Constants.checkoutsFolderPath, isDirectory: true), includingPropertiesForKeys: nil ) .map { $0.resolvingSymlinksInPath() } @@ -1012,9 +1010,7 @@ public final class Project { // swiftlint:disable:this type_body_length urls += (try? fileManager .contentsOfDirectory( - at: self.directoryURL.appendingPathComponent( - Constants.binariesFolderPath, isDirectory: true - ), + at: self.directoryURL.appendingPathComponent(Constants.binariesFolderPath, isDirectory: true), includingPropertiesForKeys: nil ) .map { $0.resolvingSymlinksInPath() } @@ -1025,9 +1021,19 @@ public final class Project { // swiftlint:disable:this type_body_length .flatMap { platform -> [URL] in (try? fileManager .contentsOfDirectory( - at: self.directoryURL.appendingPathComponent( - platform.relativePath, isDirectory: true - ), + at: self.directoryURL.appendingPathComponent(platform.relativePath, isDirectory: true), + includingPropertiesForKeys: nil + ) + .filter { !binaryURLs.contains($0) && $0.lastPathComponent != FrameworkType.staticFolderName }) ?? [] + } + + urls += Platform.supportedPlatforms + .flatMap { platform -> [URL] in + (try? fileManager + .contentsOfDirectory( + at: self.directoryURL + .appendingPathComponent(platform.relativePath, isDirectory: true) + .appendingPathComponent(FrameworkType.staticFolderName, isDirectory: true), includingPropertiesForKeys: nil ) .filter { !binaryURLs.contains($0) }) ?? [] diff --git a/Tests/CarthageKitTests/ProjectSpec.swift b/Tests/CarthageKitTests/ProjectSpec.swift index decf98fc14..12d5b7d7cb 100644 --- a/Tests/CarthageKitTests/ProjectSpec.swift +++ b/Tests/CarthageKitTests/ProjectSpec.swift @@ -674,6 +674,36 @@ class ProjectSpec: QuickSpec { expect(Set(removedItems)) == expectedItems } + + it("should successfully remove static frameworks") { + let directoryURL = baseDirectoryURL.appendingPathComponent("StaticFramework", isDirectory: true) + let project = Project(directoryURL: directoryURL) + var events = [ProjectEvent]() + project.projectEvents.observeValues { events.append($0) } + + expect(project.removeUnneededItems().wait().error).to(beNil()) + + let removedItems = events.compactMap { event -> URL? in + guard case let .removingUnneededItem(url) = event else { + fail() + return nil + } + return url + } + + let expectedPaths = [ + ("Build/Mac/Static/TestFramework.framework", true), + ("Build/iOS/Static/TestFramework.framework", true), + ("Checkouts/TestFramework", true), + ("Build/.TestFramework.version", false), + ] + + let expectedItems = Set(expectedPaths.map { + directoryURL.appendingPathComponent("Carthage/\($0)", isDirectory: $1) + }) + + expect(Set(removedItems)) == expectedItems + } } describe("transitiveDependencies") { diff --git a/Tests/CarthageKitTests/fixtures/CleanupTest.zip b/Tests/CarthageKitTests/fixtures/CleanupTest.zip index 916ac59824..f467244452 100644 Binary files a/Tests/CarthageKitTests/fixtures/CleanupTest.zip and b/Tests/CarthageKitTests/fixtures/CleanupTest.zip differ