Repository navigation
AppPorts v2.1.0 Build 51 更新说明(in English)
感谢
感谢 trah01 为这次更新带来的贡献。从应用内更新、列表布局和页面切换,到应用数据扫描缓存、刷新入口和现有链接处理,这些改进让日常使用更顺手,也让遇到旧记录和异常状态时有了更直接的处理方式。
也谢谢每一位反馈问题、提供日志、分享使用经验和支持项目的朋友。
总结
2.0.0 完善了迁移过程中的任务、进度和恢复;2.1.0 重新设计了应用迁移页面,加入 AppPorts 的应用内更新,并继续完善数据扫描、手动卸载、旧链接和旧副本的处理。
应用迁移页面重新整理了本地与外部应用列表、状态和操作按钮,增加「全部 / 已链接 / 未链接」筛选,两侧列表可以分别按名称和大小排序。配合统一刷新入口和更平顺的页面切换,查找应用、查看迁移状态和执行操作更加顺手。
这次还加入了国内与 GitHub 应用内更新。发现新版本后,可以直接下载、校验,再点击「安装并重新启动」,不必每次手动下载和替换应用。应用数据扫描支持复用有效结果,减少重复加载,并在权限不足时给出更明确的提示。
此外,手动卸载的数据卷不会再立即被后台挂回;外盘离线时,本地保护目录允许读取和路径查找,同时继续禁止写入。旧链接可以按需要接管、迁回或明确解绑,异常面板也会分别显示当前有效数据和保留副本的位置,方便判断下一步如何处理。
升级提示
有未完成任务或旧副本残留时,请继续在新版中处理。 新版会保存新的迁移管理状态,旧版可能无法读取。不要把降级或删除任务历史当作恢复方法。
单个数据卷的手动卸载,现在会持续保留暂停状态。 重启 AppPorts 或重新插入外盘,不会自动解除这项暂停。需要恢复时,请明确挂载;如果卷仍处于挂载状态,可以选择「恢复自动挂载」。这与整盘弹出后重新连接的规则不同。
强制解绑会让原路径变成空目录,不会把旧数据搬回本机。 外盘原件仍保留在原位置,也继续占用空间。需要取回原有数据时,应使用迁回或还原流程。
新功能
应用内更新:下载、校验、安装在同一处完成
设置中集中提供版本信息、检查更新、官网、文档和关于入口。发现新版本后,可以选择:
- 国内更新:从国内来源下载,不依赖 GitHub 可达性。
- GitHub 更新:下载对应版本的 GitHub 发布附件。
下载过程显示进度,并可取消。准备完成后,点击「安装并重新启动」,AppPorts 会退出并替换应用;仍有迁移等任务未结束时,会提示先完成任务。
更新包会核对大小、SHA-256、应用标识、版本、架构和系统要求。安装时保留旧版本,处理替换或启动请求失败的情况;尚未确认新版启动时,不会直接删除旧版备份。
应用内安装需要 AppPorts 位于可写的本地位置,不能直接替换磁盘映像或 /Volumes 下正在运行的副本。更新失败时,仍可通过下载页面手动更新。
现有链接强制解绑:外盘不在,也能重新开始
工具缓存或其他目录的旧链接,可能指向已经断开的外置盘。如果不需要把旧内容搬回来,只希望让应用重新生成本地数据,现在可以在「链接详情」中选择「强制解绑」。
确认后,AppPorts 会移除本地链接,将原路径替换为空目录。操作不需要外部目标在线,也不会遍历或删除外盘原件。
解绑不是还原。 之后重新生成的本地数据与外盘旧数据不会自动合并。
界面与使用体验
-
重新设计应用迁移页面。 调整本地与外部应用列表的列宽、状态和操作按钮布局,让应用信息更易浏览,迁移操作更易找到。
-
更直接的列表筛选和排序。 应用页提供「全部 / 已链接 / 未链接」筛选,可结合搜索使用。本地与外部列表分别支持按名称、大小升降序排序;切换筛选时,已隐藏的选择项不会继续参与批量操作。
-
统一刷新入口。 顶部刷新按钮按当前页面执行刷新,并重新测量相关目录大小。应用两侧列表仍保留各自的刷新入口。
-
减少页面切换后的重复加载。 已打开页面保留内容和状态,切换效果集中在页面过渡与按钮反馈,减少列表整体跳动,并遵循系统的减少动态效果设置。
-
改善更新窗口。 调整说明区域、按钮和错误信息布局,修复 Markdown 显示及安装退出过程中的弹窗问题。
-
补齐多语言内容。 完善新增功能与异常提示的翻译,并补齐已有条目的缺失翻译。
扫描与检查改进
反复查看同一应用,不必每次重新扫描。 应用数据页可以复用当前页面内的完整扫描结果;权限、目标盘、迁移记录或挂载状态变化时会重新检查,主动刷新也会强制重测。真正发起迁移前,仍会重新发现和测量数据。
权限不足与没有数据分开显示。 完全磁盘访问权限未就绪时,页面明确显示权限状态和检查入口,避免把读取受限误认为没有应用数据。
减少无关目录访问。 应用数据候选搜索改为明确的两层发现,切换应用或取消扫描后,旧任务会在检查点停止后续遍历。这不缩减迁移时的完整内容校验范围。
大型目录的安全检查不再过早超时。 对需要遍历大量文件的目录占用检查延长等待时间,并单独说明超时原因。无法完成检查时,仍会停止操作并保留数据;这项调整不代表检查本身已经提速。
修复
挂载与离线状态
手动卸载后,数据卷很快又被后台挂回 — 现在先保存单卷暂停状态,再执行卸载。后台挂载和恢复会遵守这一选择,同盘其他数据卷不受影响。卸载失败而卷仍在线时,也能明确恢复自动挂载。
外盘离线后,严格的目录权限阻断应用路径查找 — 本地保护目录改为允许读取和进入,同时继续禁止新建文件与目录。符合条件的旧保护目录也会在检查后更新。实际业务数据仍在外盘专用卷中,本地可读空目录不代表数据被删除或已经迁回。
离线目录被显示为完整的 0 字节,或反复提示补权限 — 已确认的离线、卸载保护状态不再被当作普通权限故障。相关容量继续标记为未知或不完整,也不会把缺失数据缓存成完整结果。
旧链接与迁移记录
旧链接已经指向规范位置,却没有真正完成接管 — 用户确认后会补齐管理记录。符合条件的旧容器链接也能通过恢复入口迁回本地,不自动重签应用。
强制解绑被同一路径的旧迁移记录阻挡 — 明确解绑时会处理对应的旧链接记录,保留已有副本,避免解绑后继续被旧关联占用。
旧副本清理与异常诊断
旧副本属于管理员,普通重试始终无法清理 — 对符合条件、已完成数据切换的旧数据副本,主动重试遇到相应权限阻碍时,可以请求系统管理员授权继续清理。取消授权会保留副本,后台不会反复弹出密码框。
清理异常只显示旧路径,难以判断当前数据在哪里 — 异常面板分别显示当前有效数据位置和保留副本位置;后续检查失败时,也会更新具体原因。
不同的操作阻碍都显示成“已有任务未完成” — 现在区分任务占用、锁文件不可访问、未完成签名等原因,并在任务记录和诊断日志中保留已知的关联信息。后台同时分批回收已确认退出进程的登记文件,减少长期积累。
已知限制
- 离线目录访问改进只解决已确认的路径权限触发条件,不保证微信或其他应用在缺少外盘数据时仍能正常启动、登录或使用。
- 应用数据缓存用于减少重复浏览开销,不是实时监控;需要查看最新容量时,请主动刷新。
- 强制解绑不恢复旧内容,也不释放外盘原件占用的空间。
- 管理员授权清理仅适用于符合条件的旧数据副本,其他异常仍需按具体原因处理。
AppPorts v2.1.0 Build 51 Release Notes (English)
Thanks
Thank you to trah01 for contributing to this release. From in-app updates, list layouts and page transitions to app-data scan caching, refresh controls and existing-link handling, these changes make everyday use smoother and provide clearer ways to handle older records and recovery states.
Thank you as well to everyone who reports issues, provides logs, shares their experience and supports the project.
Summary
2.0.0 improved transfer tasks, progress reporting and recovery. 2.1.0 redesigns the app migration page, adds in-app updates for AppPorts itself, and further improves data scanning, manual unmounting, existing links and retained-copy handling.
The redesigned app migration page reorganises the local and external app lists, status indicators and action buttons. New All / Linked / Unlinked filters help narrow the lists, and each side can be sorted independently by name or size. A unified refresh control and smoother page transitions make it easier to find apps, check migration status and perform operations.
This release also adds in-app updates through domestic and GitHub sources. When a new version is available, you can download and verify it, then click “Install and Restart” without manually downloading and replacing the app each time. App-data scanning can reuse valid results to reduce repeated loading and provides clearer guidance when permissions are incomplete.
Manually unmounted data volumes are no longer immediately remounted by background work. When an external drive is offline, local placeholder directories allow reading and path lookup while continuing to block writes. Existing links can be adopted, restored locally or explicitly detached as appropriate. Recovery panels also distinguish the current active data location from retained copies, making the next step easier to understand.
Upgrade Notes
Continue handling unfinished tasks and retained copies in the new version. The new version saves updated migration-management state that older versions may not understand. Downgrading or deleting task history is not a recovery procedure.
Manually unmounting an individual data volume now leaves automatic mounting paused. Restarting AppPorts or reconnecting the external drive does not clear this pause. Mount the volume explicitly to resume, or choose “Resume Automatic Mounting” if it is still mounted. This is separate from the reconnection rules for ejecting an entire drive.
Force Detach replaces the original path with an empty directory; it does not copy old data back to this Mac. The external original remains in place and continues using storage. Use the restore flow if you need to bring its contents back.
New Features
In-App Updates: Download, Verify and Install in One Place
Settings now brings together version information, Check for Updates, the website, documentation and About. When an update is available, you can choose:
- Domestic Update: Download from the domestic source without requiring access to GitHub.
- GitHub Update: Download the release asset for the corresponding version from GitHub.
Downloads show progress and can be cancelled. Once preparation is complete, click “Install and Restart” to quit AppPorts and replace the app. If migration or other tasks are still running, AppPorts asks you to finish them first.
Update packages are checked for size, SHA-256, app identity, version, architecture and system requirements. The installer retains the previous version while handling replacement or launch-request failures. It does not delete the previous-version backup before the new version acknowledges launch.
In-app installation requires AppPorts to be in a writable local location. It cannot replace a copy running from a disk image or under /Volumes. If updating fails, manual updating through the download page remains available.
Force Detach Existing Links: Start Fresh Even Without the Drive
An existing link for a tool cache or another directory may point to an external drive that is no longer connected. If you want the app to regenerate local data instead of copying the old contents back, you can now choose “Force Detach” in Link Details.
After confirmation, AppPorts removes the local link and replaces the original path with an empty directory. The external target does not need to be online, and its contents are neither traversed nor deleted.
Detaching is not restoring. Newly generated local data and the old external data will not be merged automatically.
Interface and Usability
-
Redesigned app migration page. Revised column widths, status indicators and action-button layouts make app information easier to browse and migration controls easier to find.
-
More direct filtering and sorting. The Apps page offers All / Linked / Unlinked filters alongside search. Local and external lists can each be sorted by name or size in ascending or descending order. Selected items hidden by a filter no longer remain part of batch operations.
-
Unified refresh control. The top refresh button refreshes the current page and remeasures the relevant directory sizes. Both app-list panes retain their own refresh controls.
-
Less repeated loading between pages. Opened pages retain their content and state. Transitions focus on page changes and button feedback, reducing list movement and respecting the system’s Reduce Motion setting.
-
Improved update window. Revised release-note, button and error layouts, with fixes for Markdown rendering and dialog behaviour during installation and quitting.
-
More complete translations. Improved translations for new features and recovery messages, and filled gaps in existing entries.
Scanning and Safety Checks
Revisiting the same app no longer requires a fresh scan every time. App Data can reuse complete scan results within the current page session. Changes to permissions, the destination drive, migration records or mount state trigger fresh checks, and manual refresh forces remeasurement. Before a migration starts, AppPorts still rediscovers and measures the data.
Missing permissions are distinguished from missing data. When Full Disk Access is not ready, the page shows the permission status and a checking entry point instead of presenting restricted reads as an absence of app data.
Fewer unrelated directories are accessed. App-data candidate discovery now uses an explicit two-level search. Switching apps or cancelling a scan stops further traversal at cancellation checkpoints. This does not reduce the scope of complete content verification during migration.
Large-directory safety checks have more time to finish. Open-file checks that traverse large directory trees now have a longer timeout and report timeout failures separately. If a check cannot finish, the operation still stops and preserves the data. This adjustment does not make the check itself faster.
Fixes
Mounting and Offline State
Manually unmounted data volumes were quickly remounted by background work — AppPorts now saves the individual volume’s pause state before unmounting. Background mounting and recovery respect that choice without affecting other data volumes on the same drive. If unmounting fails and the volume remains mounted, automatic mounting can be explicitly resumed.
Strict directory permissions blocked app path lookup after an external drive went offline — Local placeholder directories now allow reading and traversal while continuing to prohibit new files and directories. Eligible older placeholders are updated after validation. Actual app data remains on the dedicated external volume; a readable empty local directory does not mean the data was deleted or restored locally.
Offline directories appeared as a complete 0 bytes or repeatedly prompted for permissions — Confirmed offline and unmount-protection states are no longer treated as ordinary permission failures. Their sizes remain unknown or incomplete, and missing data is not cached as a complete result.
Existing Links and Migration Records
Links already pointing to the expected managed location were not fully adopted — AppPorts now completes the management records after user confirmation. Eligible older container links can also be restored locally through the recovery flow without automatically re-signing the app.
Old migration records at the same path blocked Force Detach — Explicit detachment now handles the corresponding old link records while retaining existing copies, preventing the old association from continuing to reserve the path.
Retained-Copy Cleanup and Diagnostics
Administrator-owned retained copies could not be cleaned up through ordinary retries — For eligible old data copies whose data switch is already complete, a manual retry can request system administrator authorisation after encountering the relevant permission failure. Cancelling authorisation preserves the copy, and background work does not repeatedly open password prompts.
Cleanup errors showed only an old path, making the current data location unclear — Recovery panels now show the current active data location separately from the retained-copy location. Later check failures also update the reported reason.
Different blockers were all reported as unfinished work — AppPorts now distinguishes task contention, inaccessible lock files, unfinished signing operations and other known causes. Task records and diagnostic logs retain the available related information. Background maintenance also removes registrations for confirmed-exited processes in batches to reduce long-term accumulation.
Known Limitations
- Offline-directory access improvements address the confirmed path-permission trigger. They do not guarantee that WeChat or other apps can start, sign in or function without their external data.
- App-data caching reduces repeated browsing work; it is not real-time monitoring. Refresh manually when you need current sizes.
- Force Detach does not restore old contents or reclaim the space occupied by external originals.
- Administrator-authorised cleanup applies only to eligible retained data copies. Other failures still require handling according to their specific cause.
What's Changed
- feat: 支持 GitHub 应用内更新并调整界面与功能 by @trah01 in #95
- style: 统一应用列表与目录按钮样式,优化页面切换动画 by @trah01 in #96
- feat: 支持国内应用内更新并修复更新窗口 by @wzh4869 in #97
- fix(admission): 自动回收已退出进程的登记文件 by @wzh4869 in #98
- fix: 保留手动卸载意图,补齐旧软链恢复和操作受阻诊断 by @wzh4869 in #99
- fix: 支持旧数据副本授权清理并修正签名锁回归测试 by @wzh4869 in #100
- fix: 离线挂载点改为只读访问并保留写入保护 by @wzh4869 in #101
Full Changelog: 2.0.0...2.1.0