diff --git a/Fixtures/Resources/Localized/Package.swift b/Fixtures/Resources/Localized/Package.swift index ced346f5977..bc282fe93d9 100644 --- a/Fixtures/Resources/Localized/Package.swift +++ b/Fixtures/Resources/Localized/Package.swift @@ -5,8 +5,6 @@ let package = Package( name: "Localized", defaultLocalization: "es", targets: [ - .target(name: "exe", resources: [ - .process("Resources"), - ]), + .target(name: "exe"), ] ) diff --git a/Sources/PackageLoading/TargetSourcesBuilder.swift b/Sources/PackageLoading/TargetSourcesBuilder.swift index 60ee79e7873..2d895777eb2 100644 --- a/Sources/PackageLoading/TargetSourcesBuilder.swift +++ b/Sources/PackageLoading/TargetSourcesBuilder.swift @@ -200,6 +200,8 @@ public struct TargetSourcesBuilder { if let needle = effectiveRules.first(where: { $0.match(path: path, toolsVersion: toolsVersion) }) { matchedRule = Rule(rule: needle.rule, localization: nil) + } else if path.parentDirectory.extension == Resource.localizationDirectoryExtension { + matchedRule = Rule(rule: .processResource, localization: nil) } } diff --git a/Tests/PackageLoadingTests/TargetSourcesBuilderTests.swift b/Tests/PackageLoadingTests/TargetSourcesBuilderTests.swift index 55b4e9d7092..fb32b2678b2 100644 --- a/Tests/PackageLoadingTests/TargetSourcesBuilderTests.swift +++ b/Tests/PackageLoadingTests/TargetSourcesBuilderTests.swift @@ -406,6 +406,20 @@ class TargetSourcesBuilderTests: XCTestCase { } } + func testLocalizedImage() { + let fs = InMemoryFileSystem(emptyFiles: + "/Foo/fr.lproj/Image.png", + "/Foo/es.lproj/Image.png" + ) + + build(target: TargetDescription(name: "Foo"), defaultLocalization: "fr", toolsVersion: .v5_3, fs: fs) { _, resources, diagnostics in + XCTAssertEqual(Set(resources), [ + Resource(rule: .process, path: AbsolutePath("/Foo/fr.lproj/Image.png"), localization: "fr"), + Resource(rule: .process, path: AbsolutePath("/Foo/es.lproj/Image.png"), localization: "es"), + ]) + } + } + func testInfoPlistResource() { do { let target = TargetDescription(name: "Foo", resources: [