Skip to content

Commit

Permalink
Fix integration of local packages with Objective C targets (#5957)
Browse files Browse the repository at this point in the history
* Fix integration of a local package with Objective C code

* Update app_with_spm_dependencies to include a local package with Objc
  • Loading branch information
fortmarek committed Feb 20, 2024
1 parent f492a86 commit c54cf61
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,14 @@ import TuistSupport
/// A project mapper that returns side effects to delete the derived directory.
public final class DeleteDerivedDirectoryProjectMapper: ProjectMapping {
private let derivedDirectoryName: String
private let fileHandler: FileHandling

public init(derivedDirectoryName: String = Constants.DerivedDirectory.name) {
public init(
derivedDirectoryName: String = Constants.DerivedDirectory.name,
fileHandler: FileHandling = FileHandler.shared
) {
self.derivedDirectoryName = derivedDirectoryName
self.fileHandler = fileHandler
}

// MARK: - ProjectMapping
Expand All @@ -17,10 +22,21 @@ public final class DeleteDerivedDirectoryProjectMapper: ProjectMapping {
logger.debug("Transforming project \(project.name): Deleting /Derived directory")

let derivedDirectoryPath = project.path.appending(component: derivedDirectoryName)
let directoryDescriptor = DirectoryDescriptor(path: derivedDirectoryPath, state: .absent)

return (project, [
.directory(directoryDescriptor),
])
if !fileHandler.exists(derivedDirectoryPath) {
return (project, [])
}

let sideEffects: [SideEffectDescriptor] = try fileHandler.contentsOfDirectory(derivedDirectoryPath)
.filter { $0.extension != "modulemap" }
.map {
if fileHandler.isFolder($0) {
return .directory(DirectoryDescriptor(path: $0, state: .absent))
} else {
return .file(FileDescriptor(path: $0, state: .absent))
}
}

return (project, sideEffects)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,19 @@ public final class DeleteDerivedDirectoryProjectMapperTests: TuistUnitTestCase {

func test_map_returns_sideEffectsToDeleteDerivedDirectories() throws {
// Given
let projectA = Project.test(path: "/projectA")
let projectPath = try temporaryPath()
let derivedDirectory = projectPath.appending(component: Constants.DerivedDirectory.name)
let projectA = Project.test(path: projectPath)
try fileHandler.createFolder(derivedDirectory)
try fileHandler.createFolder(derivedDirectory.appending(component: "InfoPlists"))
try fileHandler.touch(derivedDirectory.appending(component: "TargetA.modulemap"))

// When
let (_, sideEffects) = try subject.map(project: projectA)

// Then
XCTAssertEqual(sideEffects, [
.directory(.init(path: projectA.path.appending(component: Constants.DerivedDirectory.name), state: .absent)),
.directory(.init(path: derivedDirectory.appending(component: "InfoPlists"), state: .absent)),
])
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ let package = Package(
defaultLocalization: "en",
products: [.library(name: "LibraryA", targets: ["LibraryA"])],
targets: [
.target(name: "LibraryA"),
]
.target(name: "LibraryA", dependencies: ["LibraryAProxy"]),
.target(
name: "LibraryAProxy"
),
],
cxxLanguageStandard: .cxx17
)
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
import LibraryAProxy

public struct MyStruct {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#import "Test.h"

@implementation Test { }

@end
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#import <Foundation/Foundation.h>

@interface Test : NSObject

@end

0 comments on commit c54cf61

Please sign in to comment.