@@ -21,11 +21,22 @@ public static Task Create(string sourceFolder, string outputPath, string volumeN
2121 VolumeIdentifier = SanitizeVolumeName ( volumeName ) ,
2222 } ;
2323
24- var hasApp = Directory . EnumerateDirectories ( sourceFolder , "*.app" , SearchOption . TopDirectoryOnly ) . Any ( ) ;
25- if ( hasApp )
24+ var appBundles = Directory . EnumerateDirectories ( sourceFolder , "*.app" , SearchOption . TopDirectoryOnly ) . ToList ( ) ;
25+ if ( appBundles . Any ( ) )
2626 {
27- // If a pre-built .app exists, copy the directory tree as-is to the image root
28- AddDirectoryRecursive ( builder , sourceFolder , "." , prefix : null ) ;
27+ // If pre-built .app bundles exist, copy only those (plus DMG adornments) to the image root
28+ foreach ( var bundle in appBundles )
29+ {
30+ var name = Path . GetFileName ( bundle ) ;
31+ if ( name == null )
32+ {
33+ continue ;
34+ }
35+
36+ AddDirectoryRecursive ( builder , sourceFolder , name , prefix : null ) ;
37+ }
38+
39+ AddDmgAdornments ( builder , sourceFolder ) ;
2940 }
3041 else
3142 {
@@ -46,18 +57,7 @@ public static Task Create(string sourceFolder, string outputPath, string volumeN
4657 builder . AddFile ( $ "{ bundle } /Contents/Resources/{ iconName } ", new MemoryStream ( iconBytes , writable : false ) ) ;
4758 }
4859
49- // Hoist DMG adornments (if present) at image root for macOS Finder niceties
50- var volIcon = Path . Combine ( sourceFolder , ".VolumeIcon.icns" ) ;
51- if ( File . Exists ( volIcon ) )
52- {
53- var bytes = File . ReadAllBytes ( volIcon ) ;
54- builder . AddFile ( ".VolumeIcon.icns" , new MemoryStream ( bytes , writable : false ) ) ;
55- }
56- var backgroundDir = Path . Combine ( sourceFolder , ".background" ) ;
57- if ( Directory . Exists ( backgroundDir ) )
58- {
59- AddDirectoryRecursive ( builder , sourceFolder , ".background" , prefix : null ) ;
60- }
60+ AddDmgAdornments ( builder , sourceFolder ) ;
6161
6262 // Add a minimal Info.plist
6363 var exeName = GuessExecutableName ( sourceFolder , volumeName ) ;
@@ -97,6 +97,23 @@ private static void AddDirectoryRecursive(CDBuilder builder, string root, string
9797 }
9898 }
9999
100+ private static void AddDmgAdornments ( CDBuilder builder , string sourceFolder )
101+ {
102+ // Hoist DMG adornments (if present) at image root for macOS Finder niceties
103+ var volIcon = Path . Combine ( sourceFolder , ".VolumeIcon.icns" ) ;
104+ if ( File . Exists ( volIcon ) )
105+ {
106+ var bytes = File . ReadAllBytes ( volIcon ) ;
107+ builder . AddFile ( ".VolumeIcon.icns" , new MemoryStream ( bytes , writable : false ) ) ;
108+ }
109+
110+ var backgroundDir = Path . Combine ( sourceFolder , ".background" ) ;
111+ if ( Directory . Exists ( backgroundDir ) )
112+ {
113+ AddDirectoryRecursive ( builder , sourceFolder , ".background" , prefix : null ) ;
114+ }
115+ }
116+
100117 private static string GuessExecutableName ( string sourceFolder , string volumeName )
101118 {
102119 var candidates = Directory . EnumerateFiles ( sourceFolder )
0 commit comments