Skip to content

Commit 4356b27

Browse files
committed
Release DiskMount 0.2.4 with bilingual install guidance
1 parent f27992a commit 4356b27

12 files changed

Lines changed: 157 additions & 22 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
# Changelog
22

3-
## Unreleased
3+
## 0.2.4 - 2026-08-03
44

55
- Added sleep/wake recovery that pauses automatic disk actions until external storage has stabilized.
66
- Detects active anylinuxfs mounts by their exact device-backed NFS source instead of guessing from a volume name.
77
- Prevents a surviving NTFS read/write mount from being mistaken for a newly inserted read-only disk after wake.
88
- Removes only the duplicate macOS read-only NTFS mount when the same device already has an active anylinuxfs read/write mount.
99
- Avoids starting a second anylinuxfs process or requesting administrator authorization when the remembered read/write mount is still active.
1010
- Prevents failure recovery from creating a normal read-only duplicate while an anylinuxfs NFS mount still owns the device.
11+
- Added bilingual Gatekeeper, third-party app installation, Full Disk Access, Removable Volumes, and administrator authorization instructions.
12+
- Clarified that the current package is development-signed but not Apple-notarized, so another Mac may require the per-app “Open Anyway” flow.
1113

1214
## 0.2.3 - 2026-08-03
1315

DiskMount/DiskMount.xcodeproj/project.pbxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@
312312
CODE_SIGN_IDENTITY = "Apple Development: samni728@gmail.com (4BVG532TG3)";
313313
CODE_SIGN_STYLE = Manual;
314314
COMBINE_HIDPI_IMAGES = YES;
315-
CURRENT_PROJECT_VERSION = 8;
315+
CURRENT_PROJECT_VERSION = 9;
316316
DEVELOPMENT_TEAM = YU9NH29226;
317317
ENABLE_APP_SANDBOX = NO;
318318
ENABLE_HARDENED_RUNTIME = YES;
@@ -322,7 +322,7 @@
322322
"$(inherited)",
323323
"@executable_path/../Frameworks",
324324
);
325-
MARKETING_VERSION = 0.2.3;
325+
MARKETING_VERSION = 0.2.4;
326326
PRODUCT_BUNDLE_IDENTIFIER = com.samni.DiskMount;
327327
PRODUCT_NAME = DiskMount;
328328
SDKROOT = macosx;
@@ -401,7 +401,7 @@
401401
CODE_SIGN_IDENTITY = "Apple Development: samni728@gmail.com (4BVG532TG3)";
402402
CODE_SIGN_STYLE = Manual;
403403
COMBINE_HIDPI_IMAGES = YES;
404-
CURRENT_PROJECT_VERSION = 8;
404+
CURRENT_PROJECT_VERSION = 9;
405405
DEVELOPMENT_TEAM = YU9NH29226;
406406
ENABLE_APP_SANDBOX = NO;
407407
ENABLE_HARDENED_RUNTIME = YES;
@@ -411,7 +411,7 @@
411411
"$(inherited)",
412412
"@executable_path/../Frameworks",
413413
);
414-
MARKETING_VERSION = 0.2.3;
414+
MARKETING_VERSION = 0.2.4;
415415
PRODUCT_BUNDLE_IDENTIFIER = com.samni.DiskMount;
416416
PRODUCT_NAME = DiskMount;
417417
SDKROOT = macosx;

DiskMount/Resources/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<img class="brand-icon" src="logo.png" alt="">
1515
<div>
1616
<div class="eyebrow" data-i18n="eyebrow">DISK CONTROL</div>
17-
<h1>DiskMount <span id="version">0.2.3</span></h1>
17+
<h1>DiskMount <span id="version">0.2.4</span></h1>
1818
</div>
1919
</div>
2020
<div class="toolbar">

DiskMount/Web/WebPanelController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,7 @@ final class WebPanelController: NSViewController, WKScriptMessageHandler {
486486

487487
private func publish() {
488488
let state = PanelState(
489-
version: Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "0.2.3",
489+
version: Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "0.2.4",
490490
devices: devices,
491491
dependency: anyLinuxFS.dependencyState(),
492492
proMode: proMode,

DiskMount/project.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ targets:
2424
PRODUCT_BUNDLE_IDENTIFIER: com.samni.DiskMount
2525
PRODUCT_NAME: DiskMount
2626
ARCHS: arm64
27-
MARKETING_VERSION: 0.2.3
28-
CURRENT_PROJECT_VERSION: 8
27+
MARKETING_VERSION: 0.2.4
28+
CURRENT_PROJECT_VERSION: 9
2929
INFOPLIST_FILE: Info.plist
3030
GENERATE_INFOPLIST_FILE: NO
3131
CODE_SIGN_STYLE: Manual

DiskMount/scripts/build_dmg.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,10 @@ hdiutil create \
4848
-format UDZO \
4949
"$DMG_PATH"
5050

51+
# Sign the disk image as well as the embedded app so recipients can verify that the
52+
# package was not modified after it was built. An Apple Development identity is still
53+
# not a substitute for Developer ID distribution signing and Apple notarization.
54+
codesign --force --timestamp=none --sign "$SIGN_IDENTITY" "$DMG_PATH"
55+
codesign --verify --verbose=2 "$DMG_PATH"
56+
5157
echo "DMG 已生成:$DMG_PATH"

INSTALLATION.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# DiskMount installation and permissions
2+
3+
[简体中文](INSTALLATION.zh-CN.md)
4+
5+
## Before you install
6+
7+
Download DiskMount only from the official [GitHub Releases page](https://github.com/samni728/diskmount/releases). Version 0.2.4 is self-contained and does not require Homebrew, Xcode, or a separate anylinuxfs installation.
8+
9+
The current package is signed with the developer's Apple Development certificate, but it is not signed with a Developer ID Application certificate and is not Apple-notarized. A Mac that downloads the DMG from the internet may therefore block the first launch. This Gatekeeper approval is separate from the disk permissions requested after DiskMount starts.
10+
11+
## Normal installation
12+
13+
1. Download `DiskMount-0.2.4-macOS26.dmg` and its `.sha256` file.
14+
2. Optionally verify the download in Terminal:
15+
16+
```bash
17+
cd ~/Downloads
18+
shasum -a 256 -c DiskMount-0.2.4-macOS26.dmg.sha256
19+
```
20+
21+
3. Open the DMG and drag `DiskMount.app` to `Applications`.
22+
4. Open DiskMount from `Applications`. Its controls remain in the macOS menu bar.
23+
24+
## If macOS blocks the app
25+
26+
Do not disable Gatekeeper globally. Use the per-app exception provided by macOS:
27+
28+
1. Try to open DiskMount once and close the warning.
29+
2. Open **System Settings → Privacy & Security**.
30+
3. Scroll to **Security** and find the message that DiskMount was blocked.
31+
4. Click **Open Anyway**. macOS normally shows this button for about one hour after the blocked launch.
32+
5. Authenticate with the Mac login password, review the warning, and choose **Open**.
33+
34+
macOS then remembers DiskMount as an exception on that Mac. On organization-managed Macs, an administrator or MDM policy may still prevent this override. See Apple's [Open apps safely on your Mac](https://support.apple.com/en-ie/102445) guidance.
35+
36+
Avoid instructions that permanently disable Gatekeeper or indiscriminately remove quarantine attributes. Download a new copy from the official release if the checksum fails or macOS says the app is damaged.
37+
38+
## Permissions after launch
39+
40+
The following approvals serve different purposes:
41+
42+
1. **Administrator authorization:** NTFS read/write mounting and failure recovery need elevated access. The password is passed transiently to macOS `sudo`; DiskMount does not store, log, or upload it.
43+
2. **Full Disk Access:** enable **System Settings → Privacy & Security → Full Disk Access → DiskMount**.
44+
3. **Removable Volumes:** when macOS shows this switch, enable **System Settings → Privacy & Security → Files & Folders → DiskMount → Removable Volumes**.
45+
4. Fully quit and reopen DiskMount after changing either privacy permission.
46+
47+
DiskMount does not format, erase, repartition, or convert disks. NTFS read/write changes only the active mount method.
48+
49+
## Commercial distribution status
50+
51+
Version 0.2.4 is a development-signed community release. Warning-free public distribution requires a Developer ID Application certificate, hardened-runtime signing of the app and all bundled helpers, Apple notarization, and a stapled notarization ticket.

INSTALLATION.zh-CN.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# DiskMount 安装与授权说明
2+
3+
[English](INSTALLATION.md)
4+
5+
## 安装前须知
6+
7+
请仅从项目的 [GitHub Releases 页面](https://github.com/samni728/diskmount/releases)下载 DiskMount。0.2.4 是自包含版本,不需要用户安装 Homebrew、Xcode 或独立的 anylinuxfs。
8+
9+
当前安装包使用开发者本人的 Apple Development 证书签名,但尚未使用 Developer ID Application 证书,也没有通过 Apple 公证。从互联网下载 DMG 后,其他 Mac 可能会在第一次启动时进行拦截。这个 Gatekeeper 安装放行与 App 启动后的磁盘权限是两套相互独立的授权。
10+
11+
## 正常安装流程
12+
13+
1. 下载 `DiskMount-0.2.4-macOS26.dmg` 和对应的 `.sha256` 文件。
14+
2. 可以在终端验证下载完整性:
15+
16+
```bash
17+
cd ~/Downloads
18+
shasum -a 256 -c DiskMount-0.2.4-macOS26.dmg.sha256
19+
```
20+
21+
3. 打开 DMG,把 `DiskMount.app` 拖入“应用程序”。
22+
4. 从“应用程序”打开 DiskMount;运行后,主要操作入口常驻在 macOS 顶部菜单栏。
23+
24+
## 如果 macOS 阻止打开
25+
26+
不建议永久关闭 Gatekeeper。请使用 macOS 提供的单 App 放行流程:
27+
28+
1. 先尝试打开一次 DiskMount,然后关闭系统警告。
29+
2. 打开 **系统设置 → 隐私与安全性**
30+
3. 滚动到 **安全性**,找到 DiskMount 被阻止的提示。
31+
4. 点击 **仍要打开**。通常该按钮会在被阻止启动后保留约一小时。
32+
5. 输入当前 Mac 的登录密码,阅读提示后点击 **打开**
33+
34+
完成后,macOS 会把 DiskMount 记录为这台 Mac 上的单独例外。如果设备受公司 IT 或 MDM 管理,管理员策略仍可能禁止用户自行放行。可参考 Apple 官方的[安全地打开 Mac App](https://support.apple.com/en-ie/102445)说明。
35+
36+
不要使用永久关闭 Gatekeeper 或无差别移除所有 quarantine 属性的安装教程。如果 SHA-256 校验失败,或 macOS 提示 App 已损坏,请删除该文件并从官方 Release 重新下载。
37+
38+
## App 启动后的权限
39+
40+
以下权限的用途不同,需要分别处理:
41+
42+
1. **管理员授权:** NTFS 读写挂载和失败恢复需要更高权限。密码只会短暂交给 macOS `sudo`,DiskMount 不会保存、记录或上传密码。
43+
2. **完全磁盘访问权限:** 前往 **系统设置 → 隐私与安全性 → 完全磁盘访问权限 → DiskMount** 开启。
44+
3. **可移动卷权限:** 如果系统显示该选项,前往 **系统设置 → 隐私与安全性 → 文件与文件夹 → DiskMount → 可移动卷** 开启。
45+
4. 修改上述任一隐私权限后,请完全退出并重新打开 DiskMount。
46+
47+
DiskMount 不会格式化、抹掉、重新分区或转换磁盘格式。NTFS 读写只会改变当前挂载方式。
48+
49+
## 商业分发状态
50+
51+
0.2.4 仍属于开发签名的社区版本。要实现面向普通用户、无未知开发者拦截的公开分发,还需要 Developer ID Application 证书、对 App 和所有内嵌程序进行 Hardened Runtime 签名、提交 Apple 公证并装订公证票据。

README.md

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
# DiskMount
1919

20-
Current version: **0.2.3**
20+
Current version: **0.2.4**
2121

2222
DiskMount detects USB drives and external disks, displays them in a compact menu bar panel, and provides mount, unmount, Finder, and safe-eject actions. NTFS volumes can be remounted with read/write access through the bundled `anylinuxfs` runtime without changing their file-system format.
2323

@@ -102,20 +102,30 @@ Expert Mode confirmation is an additional in-app safety check. It does not repla
102102
- administrator approval when a mount operation requires elevated access;
103103
- user approval for removable-volume access on first NTFS raw-disk access.
104104

105-
Intel/x86 Macs are not supported in 0.2.3 because the upstream `anylinuxfs/libkrun` runtime currently targets Apple Silicon.
105+
Intel/x86 Macs are not supported in 0.2.4 because the upstream `anylinuxfs/libkrun` runtime currently targets Apple Silicon.
106106

107107
## Installation
108108

109-
1. Download `DiskMount-0.2.3-macOS26.dmg` from [Releases](https://github.com/samni728/diskmount/releases);
109+
1. Download `DiskMount-0.2.4-macOS26.dmg` from [Releases](https://github.com/samni728/diskmount/releases);
110110
2. open the DMG and drag `DiskMount.app` to `Applications`;
111111
3. launch DiskMount from Applications;
112112
4. use the menu bar item after the initial panel appears.
113113

114+
### Gatekeeper and third-party app warning
115+
116+
The 0.2.4 package is signed with the developer's Apple Development certificate but is not Apple-notarized. A different Mac may block the first launch after downloading the DMG from the internet.
117+
118+
If macOS blocks DiskMount, try to open it once, then go to **System Settings → Privacy & Security → Security → Open Anyway**, authenticate, and confirm **Open**. Use this per-app exception; do not permanently disable Gatekeeper. Organization-managed Macs may require approval from an IT administrator.
119+
120+
See the complete [English installation and permissions guide](INSTALLATION.md) or [Simplified Chinese guide](INSTALLATION.zh-CN.md). Apple also documents this flow in [Open apps safely on your Mac](https://support.apple.com/en-ie/102445).
121+
122+
### Permissions after launch
123+
114124
The first NTFS read/write mount may require an administrator password, Full Disk Access, and Removable Volumes access. These approvals are independent. DiskMount explains why each permission is needed and does not persist the administrator password.
115125

116126
The DMG bundles the ARM64 `anylinuxfs` executable, Linux kernel, VM helpers, modules, and `libblkid`. End users do not need Homebrew, Xcode, XcodeGen, or a separately installed anylinuxfs package.
117127

118-
The current release uses an Apple Development certificate for project testing. Warning-free public distribution still requires a Developer ID Application certificate, Apple notarization, and stapling.
128+
The current release uses an Apple Development certificate for project testing. Warning-free public distribution still requires a Developer ID Application certificate, Apple notarization, and stapling. The Gatekeeper exception above does not grant disk access; macOS privacy permissions must still be enabled separately.
119129

120130
## Build and test
121131

@@ -145,9 +155,9 @@ Release sequence:
145155

146156
```bash
147157
# Update VERSION and release notes first
148-
git tag -a v0.2.3 -m "DiskMount 0.2.3"
158+
git tag -a v0.2.4 -m "DiskMount 0.2.4"
149159
git push origin main
150-
git push origin v0.2.3
160+
git push origin v0.2.4
151161
```
152162

153163
Automated packages are ad-hoc signed unless Developer ID signing and notarization secrets are configured. See [RELEASING.md](RELEASING.md) for the maintenance checklist.

README.zh-CN.md

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
# DiskMount
1919

20-
当前版本:**0.2.3**
20+
当前版本:**0.2.4**
2121

2222
DiskMount 会识别 U 盘和移动硬盘,并在紧凑的菜单栏面板中提供加载、卸载、Finder 打开和安全弹出操作。NTFS 卷通过 App 内嵌的 `anylinuxfs` 运行时以读写方式重新加载,不会改变原有文件系统格式。
2323

@@ -102,20 +102,30 @@ DiskMount 运行期间会维持 macOS 的 `sudo` 授权时间戳。这样,已
102102
- 挂载需要更高权限时,需通过 macOS 管理员授权;
103103
- 第一次进行 NTFS 原始磁盘访问时,需允许访问可移动卷。
104104

105-
0.2.3 不支持 Intel/x86 Mac,因为上游 `anylinuxfs/libkrun` 运行时目前主要支持 Apple Silicon。
105+
0.2.4 不支持 Intel/x86 Mac,因为上游 `anylinuxfs/libkrun` 运行时目前主要支持 Apple Silicon。
106106

107107
## 安装
108108

109-
1.[Releases](https://github.com/samni728/diskmount/releases) 下载 `DiskMount-0.2.3-macOS26.dmg`
109+
1.[Releases](https://github.com/samni728/diskmount/releases) 下载 `DiskMount-0.2.4-macOS26.dmg`
110110
2. 打开 DMG,将 `DiskMount.app` 拖入“应用程序”;
111111
3. 从“应用程序”启动 DiskMount;
112112
4. 首次显示面板后,App 会继续常驻顶部菜单栏。
113113

114+
### Gatekeeper 与第三方 App 提示
115+
116+
0.2.4 安装包使用开发者本人的 Apple Development 证书签名,但尚未通过 Apple 公证。其他 Mac 从互联网下载 DMG 后,第一次启动时可能会被系统阻止。
117+
118+
如果 macOS 阻止 DiskMount,请先尝试打开一次,然后前往 **系统设置 → 隐私与安全性 → 安全性 → 仍要打开**,输入当前 Mac 的登录密码并确认 **打开**。请使用这种单 App 放行方式,不要永久关闭 Gatekeeper。公司或学校管理的 Mac 可能还需要 IT 管理员批准。
119+
120+
完整流程请阅读[中文安装与授权指南](INSTALLATION.zh-CN.md)[英文指南](INSTALLATION.md)。Apple 官方也提供了[安全地打开 Mac App](https://support.apple.com/en-ie/102445)说明。
121+
122+
### App 启动后的磁盘权限
123+
114124
第一次进行 NTFS 读写加载时,可能需要管理员密码、完全磁盘访问权限和可移动卷权限。这些授权相互独立。DiskMount 会说明每项权限的用途,并且不会持久化管理员密码。
115125

116126
DMG 内嵌 ARM64 的 anylinuxfs、Linux kernel、VM helpers、modules 和 `libblkid`。最终用户不需要安装 Homebrew、Xcode、XcodeGen 或独立的 anylinuxfs。
117127

118-
当前发布包使用 Apple Development 证书,适合项目测试。若需面向所有用户无警告公开分发,仍需要 Developer ID Application 证书、Apple 公证和 stapling。
128+
当前发布包使用 Apple Development 证书,适合项目测试。若需面向所有用户无警告公开分发,仍需要 Developer ID Application 证书、Apple 公证和 stapling。上面的 Gatekeeper 单 App 放行不会自动授予磁盘权限,用户仍需另行开启 macOS 隐私权限。
119129

120130
## 构建与测试
121131

@@ -148,9 +158,9 @@ cd DiskMount
148158

149159
```bash
150160
# 先更新 VERSION 和更新说明
151-
git tag -a v0.2.3 -m "DiskMount 0.2.3"
161+
git tag -a v0.2.4 -m "DiskMount 0.2.4"
152162
git push origin main
153-
git push origin v0.2.3
163+
git push origin v0.2.4
154164
```
155165

156166
如未配置 Developer ID 签名和公证 Secrets,自动产物使用 ad-hoc 签名。详细维护清单见 [RELEASING.md](RELEASING.md)

0 commit comments

Comments
 (0)