Skip to content

Commit df39b4d

Browse files
authored
Avoid copying payload files to DMG root (#129)
1 parent ddda03f commit df39b4d

File tree

1 file changed

+33
-16
lines changed

1 file changed

+33
-16
lines changed

src/DotnetPackaging.Dmg/DmgIsoBuilder.cs

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)