maker-dmg fails with "hdiutil: attach failed - Resource busy" on macOS 26.4 Beta
- Dominant language
- TypeScript
- Stars
- 7.1k
- Forks
- 641
- Avg merge
- 3d 1h
- Merged PRs (30d)
- 30
Description
### Pre-flight checklist
- [x] I have read the [contribution documentation](https://github.com/electron/forge/blob/main/CONTRIBUTING.md) for this project.
- [x] I agree to follow the [code of conduct](https://github.com/electron/electron/blob/main/CODE_OF_CONDUCT.md) that this project uses.
- [x] I have searched the issue tracker for a bug that matches the one I want to file, without success.
### Forge version
7.10.2
### Electron version
36.3.2
### Operating system
`macOS 26.4 Beta (25E5207k)`
### Last known working Forge version
_No response_
### Expected behavior
Running `electron-forge make` on macOS, when using `MakerDMG`, should succeed.
### Actual behavior
It fails with the following message:
```
An unhandled rejection has occurred inside Forge:
Error: Command failed: hdiutil attach /var/folders/0m/nf10bfxx6rgft8tn29fznymc0000gn/T/2TZ7JTG.dmg -nobrowse -noverify -noautoopen
hdiutil: attach failed - no mountable file systems
at makeError (/Users/jamie/Documents/git/banana_native/node_modules/appdmg/node_modules/execa/index.js:174:9)
at /Users/jamie/Documents/git/banana_native/node_modules/appdmg/node_modules/execa/index.js:278:16
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
ELIFECYCLE Command failed with exit code 1.
```
### Steps to reproduce
Install `macOS 26.4 Beta (25E5207k)` and run `electron-forge make` with the following config for [@electron-forge/maker-dmg](https://github.com/electron/forge/tree/main/packages/maker/dmg):
```js
new MakerDMG(
{
name: "banana_macos_installer",
icon: path.resolve(workspace, "assets/icons/banana/icon.icns"),
format: "ULFO",
background: path.resolve(workspace, "assets/dmg/banana-background.tiff"),
contents: (opts) => [
{ x: 253, y: 298, type: "file", path: opts.appPath },
{ x: 590, y: 298, type: "link", path: "/Applications" },
],
additionalDMGOptions: {
window: {
size: { width: 842, height: 595 },
},
},
},
["darwin"],
),
```
For an example project, try adding `MakerDMG` into [Electron Fiddle](https://github.com/electron/fiddle) or any other Electrin Forge app.
### Additional information
It calls an API from the [appdmg](https://github.com/LinusU/node-appdmg) package, [appdmg/lib/hdiutil.js](https://github.com/LinusU/node-appdmg/blob/bb0f693a74341fda7934b42fd0adcb37022f6e05/lib/hdiutil.js#L53), which runs the following shell command:
```sh
hdiutil attach /var/folders/0m/nf10bfxx6rgft8tn29fznymc0000gn/T/2TZ7JTG.dmg -nobrowse -noverify -noautoopen
```
On a colleague's computer running an older non-beta version of macOS, `13.7.4 (22H420)`, it succeeds with:
```
/dev/disk2 GUID_partition_scheme
/dev/disk2s1 Apple_HFS /Volumes/banana_macos_installer
```
On my own computer, since updating to `macOS 26.4 Beta (25E5207k)` (it worked on my computer on older versions of macOS), it has been failing as follows:
```
hdiutil: attach failed - Resource busy
```
When I run `sudo log show --predicate 'process == "diskarbitrationd"' --last 5m | tail -1000`, I get the following debug logs:
See diskarbitrationd logs
```
Timestamp Thread Type Activity PID TTL
2026-02-20 16:23:26.997526+0900 0xba389 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] created disk, id = /dev/disk14.
2026-02-20 16:23:26.999032+0900 0xba389 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] created disk, id = /dev/disk14s1.
2026-02-20 16:23:26.999135+0900 0xba389 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] encryption status changed, id = /dev/disk14.
2026-02-20 16:23:26.999481+0900 0xba389 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] probed disk, id = /dev/disk14s1, with hfs, ongoing.
2026-02-20 16:23:27.002247+0900 0xba389 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] encryption status changed, id = /dev/disk14s1.
2026-02-20 16:23:27.023833+0900 0xba389 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] fsck status 6 /dev/rdisk14s1
2026-02-20 16:23:27.025937+0900 0xba389 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] probed disk, id = /dev/disk14s1, with hfs, success.
2026-02-20 16:23:27.027389+0900 0xba389 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] diskimages-helper [10979]:104519 queued solicitation, id = 0000000000000005:0000000000000005, kind = disk claim, disk = /dev/disk14s1, options = 0x00000000.
2026-02-20 16:23:27.028527+0900 0xba389 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Found FSModule: {
CFBundleName = "exfat_fskit";
FSBundleID = "com.apple.fskit.exfat";
FSImplementation = (
UserFS,
kext
);
FSIsFSModule = 1;
FSMediaTypes = {
"EBD0A0A2-B9E5-4433-87C0-68B6B72699C7" = {
FSMediaProperties = {
"Content Hint" = "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7";
Leaf = 1;
};
FSProbeArguments = "-p";
FSProbeExecutable = "exfat.util";
FSProbeOrder = 2000;
};
Partitionless = {
FSMediaProperties = {
Leaf = 1;
Whole = 1;
};
FSProbeArguments = "-p";
FSProbeExecutable = "exfat.util";
FSProbeOrder = 4000;
};
"Windows_NTFS" = {
FSMediaProperties = {
"Content Hint" = "Windows_NTFS";
Leaf = 1;
};
FSPro<…>
2026-02-20 16:23:27.028666+0900 0xba389 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Found FSModule: {
CFBundleName = "msdos_fskit";
FSBundleID = "com.apple.fskit.msdos";
FSImplementation = (
UserFS,
kext
);
FSIsFSModule = 1;
FSMediaTypes = {
"C12A7328-F81F-11D2-BA4B-00A0C93EC93B" = {
FSMediaProperties = {
"Content Hint" = "C12A7328-F81F-11D2-BA4B-00A0C93EC93B";
Leaf = 1;
};
FSProbeArguments = "-p";
FSProbeExecutable = "msdos.util";
FSProbeOrder = 1000;
autodiskmount = 0;
};
"DOS_FAT_12" = {
FSMediaProperties = {
"Content Hint" = "DOS_FAT_12";
Leaf = 1;
};
FSProbeArguments = "-p";
FSProbeExecutable = "msdos.util";
FSProbeOrder = 1000;
};
"DOS_FAT_16" = {
FSMediaProperties = {
"Content Hint" = "DOS_FAT_16";
<…>
2026-02-20 16:23:27.030654+0900 0xbcde9 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] diskimages-helper [10979]:104519 queued solicitation, id = 0000000000000007:0000000000000007, kind = disk claim, disk = /dev/disk14, options = 0x00000000.
2026-02-20 16:23:27.033483+0900 0xbcde9 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] claimed disk, id = /dev/disk14, success.
2026-02-20 16:23:27.036488+0900 0xbcde9 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] claimed disk, id = /dev/disk14s1, success.
2026-02-20 16:23:27.048215+0900 0xbcde9 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Mount options -u=501,-g=20,-m=755,nodev,noowners,nosuid
2026-02-20 16:23:27.048221+0900 0xbcde9 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] repaired disk, id = /dev/disk14s1, ongoing.
2026-02-20 16:23:27.053440+0900 0xbcde9 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] repaired disk, id = /dev/disk14s1, failure.
2026-02-20 16:23:27.053444+0900 0xbcde9 Error 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] unable to repair /dev/disk14s1 (status code 0x00000006).
2026-02-20 16:23:27.053496+0900 0xbcde9 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Mount options -u=501,-g=20,-m=755,nodev,noowners,nosuid,rdonly
2026-02-20 16:23:27.053513+0900 0xbcde9 Error 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -u=501
2026-02-20 16:23:27.053514+0900 0xbcde9 Error 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -u=501
2026-02-20 16:23:27.053515+0900 0xbcde9 Error 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -u=501
2026-02-20 16:23:27.053516+0900 0xbcde9 Error 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -u=501
2026-02-20 16:23:27.053518+0900 0xbcde9 Error 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -u=501
2026-02-20 16:23:27.053520+0900 0xbcde9 Error 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -g=20
2026-02-20 16:23:27.053522+0900 0xbcde9 Error 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -g=20
2026-02-20 16:23:27.053523+0900 0xbcde9 Error 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -g=20
2026-02-20 16:23:27.053524+0900 0xbcde9 Error 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -g=20
2026-02-20 16:23:27.053526+0900 0xbcde9 Error 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -m=755
2026-02-20 16:23:27.053528+0900 0xbcde9 Error 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -m=755
2026-02-20 16:23:27.053529+0900 0xbcde9 Error 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -m=755
2026-02-20 16:23:27.053530+0900 0xbcde9 Error 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -m=755
2026-02-20 16:23:27.053531+0900 0xbcde9 Error 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -m=755
2026-02-20 16:23:27.053628+0900 0xbcde9 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] mounted disk, id = /dev/disk14s1, ongoing.
2026-02-20 16:23:27.064739+0900 0xbcde9 Default 0x0 365 7 diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] mounted disk, id = /dev/disk14s1, success.
```
As the `-noverify` and `-noautoopen` flags alone each work, it may suggest some change in macOS's support for the `-nobrowse` flag. The above logs seem to suggest that the `-u=501,-g=20,-m=755` mount args are not recognised. But I'm not sure. This is way out of my familiarity zone.
Contributor guide
Assessment
This issue has not been assessed yet.