Skip to content

Commit ad31a14

Browse files
authored
Move asset catalog code generation rule ordering into SWBApplePlatform (#383)
1 parent 5831366 commit ad31a14

File tree

3 files changed

+33
-13
lines changed

3 files changed

+33
-13
lines changed

Sources/SWBApplePlatform/Plugin.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,10 @@ struct ActoolInputFileGroupingStrategyExtension: InputFileGroupingStrategyExtens
155155
}
156156
return ["actool": Factory()]
157157
}
158+
159+
func fileTypesCompilingToSwiftSources() -> [String] {
160+
return ["folder.abstractassetcatalog"]
161+
}
158162
}
159163

160164
struct ImageScaleFactorsInputFileGroupingStrategyExtension: InputFileGroupingStrategyExtension {
@@ -166,6 +170,10 @@ struct ImageScaleFactorsInputFileGroupingStrategyExtension: InputFileGroupingStr
166170
}
167171
return ["image-scale-factors": Factory()]
168172
}
173+
174+
func fileTypesCompilingToSwiftSources() -> [String] {
175+
return []
176+
}
169177
}
170178

171179
struct LocalizationInputFileGroupingStrategyExtension: InputFileGroupingStrategyExtension {
@@ -177,6 +185,10 @@ struct LocalizationInputFileGroupingStrategyExtension: InputFileGroupingStrategy
177185
}
178186
return ["region": Factory()]
179187
}
188+
189+
func fileTypesCompilingToSwiftSources() -> [String] {
190+
return []
191+
}
180192
}
181193

182194
struct XCStringsInputFileGroupingStrategyExtension: InputFileGroupingStrategyExtension {
@@ -188,6 +200,10 @@ struct XCStringsInputFileGroupingStrategyExtension: InputFileGroupingStrategyExt
188200
}
189201
return ["xcstrings": Factory()]
190202
}
203+
204+
func fileTypesCompilingToSwiftSources() -> [String] {
205+
return []
206+
}
191207
}
192208

193209
struct ApplePlatformInfoExtension: PlatformInfoExtension {

Sources/SWBCore/Extensions/InputFileGroupingStrategyExtension.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ public struct InputFileGroupingStrategyExtensionPoint: ExtensionPoint, Sendable
2222

2323
public protocol InputFileGroupingStrategyExtension: Sendable {
2424
func groupingStrategies() -> [String: any InputFileGroupingStrategyFactory]
25+
func fileTypesCompilingToSwiftSources() -> [String]
2526
}

Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/FilesBasedBuildPhaseTaskProducer.swift

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -569,20 +569,23 @@ class FilesBasedBuildPhaseTaskProducerBase: PhasedTaskProducer {
569569
}
570570

571571
let sourceFiles = (self.targetContext.configuredTarget?.target as? StandardTarget)?.sourcesBuildPhase?.buildFiles.count ?? 0
572-
if scope.evaluate(BuiltinMacros.ASSETCATALOG_COMPILER_GENERATE_ASSET_SYMBOLS) && (sourceFiles > 0) {
573-
// Process asset catalogs first to workaround issue where generated sources aren't added to main source code group.
574-
// rdar://102834701 (File grouping for 'collection groups' is sensitive to ordering of build phase members)
575-
var assetCatalogBuildFiles = [ResolvedBuildFile]()
576-
var otherBuildFiles = [ResolvedBuildFile]()
577-
for resolvedBuildFile in resolvedBuildFiles {
578-
if resolvedBuildFile.fileTypeSpec.conformsTo(identifier: "folder.abstractassetcatalog") {
579-
assetCatalogBuildFiles.append(resolvedBuildFile)
580-
}
581-
else {
582-
otherBuildFiles.append(resolvedBuildFile)
583-
}
572+
var compileToSwiftFileTypes : [String] = []
573+
for groupingStragegyExtensions in await context.workspaceContext.core.pluginManager.extensions(of: InputFileGroupingStrategyExtensionPoint.self) {
574+
compileToSwiftFileTypes.append(contentsOf: groupingStragegyExtensions.fileTypesCompilingToSwiftSources())
575+
}
576+
577+
// Reorder resolvedBuildFiles so that file types which compile to Swift appear first in the list and so are processed first.
578+
// This is needed because generated sources aren't added to the the main source code list.
579+
// rdar://102834701 (File grouping for 'collection groups' is sensitive to ordering of build phase members)
580+
var compileToSwiftFiles = [ResolvedBuildFile]()
581+
var otherBuildFiles = [ResolvedBuildFile]()
582+
for resolvedBuildFile in resolvedBuildFiles {
583+
if compileToSwiftFileTypes.contains (where: { identifier in resolvedBuildFile.fileTypeSpec.conformsTo(identifier: identifier)}) {
584+
compileToSwiftFiles.append(resolvedBuildFile)
585+
} else {
586+
otherBuildFiles.append(resolvedBuildFile)
584587
}
585-
resolvedBuildFiles = assetCatalogBuildFiles + otherBuildFiles
588+
resolvedBuildFiles = compileToSwiftFiles + otherBuildFiles
586589
}
587590

588591
// Allow subclasses to provide additional content

0 commit comments

Comments
 (0)