Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions Sources/SWBApplePlatform/AssetCatalogCompiler.swift
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,17 @@ public final class ActoolCompilerSpec : GenericCompilerSpec, SpecIdentifierType,
return [base, region, path].joined(separator: ":")
}))

case BuiltinMacros.ASSETCATALOG_COMPILER_INCLUDED_LANGUAGES:
if cbc.scope.evaluate(BuiltinMacros.BUILD_ONLY_KNOWN_LOCALIZATIONS), var knownLocalizations = cbc.producer.project?.knownLocalizations {

knownLocalizations.removeAll(where: { $0 == "Base" })
if !knownLocalizations.isEmpty {
delegate.note("Asset Catalog will compile languages for known regions: \(knownLocalizations.joined(separator: ", "))", location: .path(cbc.input.absolutePath))
}
return cbc.scope.namespace.parseLiteralStringList(knownLocalizations)
}
return nil

default:
return nil
}
Expand Down
7 changes: 7 additions & 0 deletions Sources/SWBApplePlatform/Specs/AssetCatalogCompiler.xcspec
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,13 @@
CommandLineArgs = ( "--output-partial-info-plist", "$(value)" );
},

{
Name = ASSETCATALOG_COMPILER_INCLUDED_LANGUAGES;
Type = StringList;
DefaultValue = "";
CommandLineFlag = "--include-languages";
},

{
Name = "ASSETCATALOG_COMPILER_STICKER_PACK_STRINGS";
Type = PathList;
Expand Down
2 changes: 2 additions & 0 deletions Sources/SWBCore/Settings/BuiltinMacros.swift
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,7 @@ public final class BuiltinMacros {
public static let ARCHS_STANDARD_64_BIT = BuiltinMacros.declareStringListMacro("ARCHS_STANDARD_64_BIT")
public static let ARCHS_STANDARD_INCLUDING_64_BIT = BuiltinMacros.declareStringListMacro("ARCHS_STANDARD_INCLUDING_64_BIT")
public static let ASSETCATALOG_COMPILER_DEPENDENCY_INFO_FILE = BuiltinMacros.declarePathMacro("ASSETCATALOG_COMPILER_DEPENDENCY_INFO_FILE")
public static let ASSETCATALOG_COMPILER_INCLUDED_LANGUAGES = BuiltinMacros.declareStringListMacro("ASSETCATALOG_COMPILER_INCLUDED_LANGUAGES")
public static let ASSETCATALOG_COMPILER_INCLUDE_STICKER_CONTENT = BuiltinMacros.declareBooleanMacro("ASSETCATALOG_COMPILER_INCLUDE_STICKER_CONTENT")
public static let ASSETCATALOG_COMPILER_INFOPLIST_CONTENT_FILE = BuiltinMacros.declarePathMacro("ASSETCATALOG_COMPILER_INFOPLIST_CONTENT_FILE")
public static let ASSETCATALOG_COMPILER_INPUTS = BuiltinMacros.declarePathListMacro("ASSETCATALOG_COMPILER_INPUTS")
Expand Down Expand Up @@ -1462,6 +1463,7 @@ public final class BuiltinMacros {
ARCHS_STANDARD_64_BIT,
ARCHS_STANDARD_INCLUDING_64_BIT,
ASSETCATALOG_COMPILER_DEPENDENCY_INFO_FILE,
ASSETCATALOG_COMPILER_INCLUDED_LANGUAGES,
ASSETCATALOG_COMPILER_INCLUDE_STICKER_CONTENT,
ASSETCATALOG_COMPILER_INFOPLIST_CONTENT_FILE,
ASSETCATALOG_COMPILER_INPUTS,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -438,4 +438,94 @@ fileprivate struct AssetCatalogTaskConstructionTests: CoreBasedTests {
}
}
}

@Test(.requireSDKs(.macOS))
func assetCatalogKnownLocalizationsFiltering() async throws {
let actoolPath = try await self.actoolPath
try await withTemporaryDirectory { tmpDir in
let testProject = TestProject(
"AssetCatalogKnownRegionsTest",
sourceRoot: tmpDir,
groupTree: TestGroup("Root", children: [
TestFile("Assets.xcassets"),
]),
buildConfigurations: [
TestBuildConfiguration("Debug", buildSettings: [
"ASSETCATALOG_EXEC": actoolPath.str,
"BUILD_ONLY_KNOWN_LOCALIZATIONS": "YES",
"PRODUCT_NAME": "$(TARGET_NAME)",
"GENERATE_INFOPLIST_FILE": "YES",
])
],
targets: [
TestStandardTarget("App", type: .application,
buildPhases: [
TestResourcesBuildPhase([
"Assets.xcassets",
])
])
],
knownLocalizations: ["en", "de", "Base"] // Only en and de should be compiled
)

let tester = try await TaskConstructionTester(getCore(), testProject)

await tester.checkBuild(runDestination: .macOS) { results in

results.checkTask(
.matchRuleType("CompileAssetCatalogVariant"),
.matchRuleItem("thinned")
) { task in
task.checkCommandLineContains(["--include-languages", "en"])
task.checkCommandLineContains(["--include-languages", "de"])
task.checkCommandLineDoesNotContain("Base")
}
results.checkNoDiagnostics()
}
}
}

@Test(.requireSDKs(.macOS))
func assetCatalogEmptyKnownLocalizations() async throws {
let actoolPath = try await self.actoolPath
try await withTemporaryDirectory { tmpDir in
let testProject = TestProject(
"AssetCatalogEmptyKnownLocalizationsTest",
sourceRoot: tmpDir,
groupTree: TestGroup("Root", children: [
TestFile("Assets.xcassets"),
]),
buildConfigurations: [
TestBuildConfiguration("Debug", buildSettings: [
"ASSETCATALOG_EXEC": actoolPath.str,
"BUILD_ONLY_KNOWN_LOCALIZATIONS": "YES",
"PRODUCT_NAME": "$(TARGET_NAME)",
"GENERATE_INFOPLIST_FILE": "YES",
])
],
targets: [
TestStandardTarget("App", type: .application,
buildPhases: [
TestResourcesBuildPhase([
"Assets.xcassets",
])
])
],
knownLocalizations: [] // Empty array, all localizations should build
)

let tester = try await TaskConstructionTester(getCore(), testProject)

await tester.checkBuild(runDestination: .macOS) { results in
results.checkTask(
.matchRuleType("CompileAssetCatalogVariant"),
.matchRuleItem("thinned")
) { task in
// When knownLocalizations is empty, no --include-languages should appear
task.checkCommandLineDoesNotContain("--include-languages")
}
results.checkNoDiagnostics()
}
}
}
}
Loading