Skip to content

Move asset catalog code generation rule ordering into SWBApplePlatform #383

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 8, 2025
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
16 changes: 16 additions & 0 deletions Sources/SWBApplePlatform/Plugin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,10 @@ struct ActoolInputFileGroupingStrategyExtension: InputFileGroupingStrategyExtens
}
return ["actool": Factory()]
}

func fileTypesCompilingToSwiftSources() -> [String] {
return ["folder.abstractassetcatalog"]
}
}

struct ImageScaleFactorsInputFileGroupingStrategyExtension: InputFileGroupingStrategyExtension {
Expand All @@ -166,6 +170,10 @@ struct ImageScaleFactorsInputFileGroupingStrategyExtension: InputFileGroupingStr
}
return ["image-scale-factors": Factory()]
}

func fileTypesCompilingToSwiftSources() -> [String] {
return []
}
}

struct LocalizationInputFileGroupingStrategyExtension: InputFileGroupingStrategyExtension {
Expand All @@ -177,6 +185,10 @@ struct LocalizationInputFileGroupingStrategyExtension: InputFileGroupingStrategy
}
return ["region": Factory()]
}

func fileTypesCompilingToSwiftSources() -> [String] {
return []
}
}

struct XCStringsInputFileGroupingStrategyExtension: InputFileGroupingStrategyExtension {
Expand All @@ -188,6 +200,10 @@ struct XCStringsInputFileGroupingStrategyExtension: InputFileGroupingStrategyExt
}
return ["xcstrings": Factory()]
}

func fileTypesCompilingToSwiftSources() -> [String] {
return []
}
}

struct ApplePlatformInfoExtension: PlatformInfoExtension {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,5 @@ public struct InputFileGroupingStrategyExtensionPoint: ExtensionPoint, Sendable

public protocol InputFileGroupingStrategyExtension: Sendable {
func groupingStrategies() -> [String: any InputFileGroupingStrategyFactory]
func fileTypesCompilingToSwiftSources() -> [String]
}
Original file line number Diff line number Diff line change
Expand Up @@ -569,20 +569,23 @@ class FilesBasedBuildPhaseTaskProducerBase: PhasedTaskProducer {
}

let sourceFiles = (self.targetContext.configuredTarget?.target as? StandardTarget)?.sourcesBuildPhase?.buildFiles.count ?? 0
if scope.evaluate(BuiltinMacros.ASSETCATALOG_COMPILER_GENERATE_ASSET_SYMBOLS) && (sourceFiles > 0) {
// Process asset catalogs first to workaround issue where generated sources aren't added to main source code group.
// rdar://102834701 (File grouping for 'collection groups' is sensitive to ordering of build phase members)
var assetCatalogBuildFiles = [ResolvedBuildFile]()
var otherBuildFiles = [ResolvedBuildFile]()
for resolvedBuildFile in resolvedBuildFiles {
if resolvedBuildFile.fileTypeSpec.conformsTo(identifier: "folder.abstractassetcatalog") {
assetCatalogBuildFiles.append(resolvedBuildFile)
}
else {
otherBuildFiles.append(resolvedBuildFile)
}
var compileToSwiftFileTypes : [String] = []
for groupingStragegyExtensions in await context.workspaceContext.core.pluginManager.extensions(of: InputFileGroupingStrategyExtensionPoint.self) {
compileToSwiftFileTypes.append(contentsOf: groupingStragegyExtensions.fileTypesCompilingToSwiftSources())
}

// Reorder resolvedBuildFiles so that file types which compile to Swift appear first in the list and so are processed first.
// This is needed because generated sources aren't added to the the main source code list.
// rdar://102834701 (File grouping for 'collection groups' is sensitive to ordering of build phase members)
var compileToSwiftFiles = [ResolvedBuildFile]()
var otherBuildFiles = [ResolvedBuildFile]()
for resolvedBuildFile in resolvedBuildFiles {
if compileToSwiftFileTypes.contains (where: { identifier in resolvedBuildFile.fileTypeSpec.conformsTo(identifier: identifier)}) {
compileToSwiftFiles.append(resolvedBuildFile)
} else {
otherBuildFiles.append(resolvedBuildFile)
}
resolvedBuildFiles = assetCatalogBuildFiles + otherBuildFiles
resolvedBuildFiles = compileToSwiftFiles + otherBuildFiles
}

// Allow subclasses to provide additional content
Expand Down