Skip to content

App Types & Strategies

App TypeContainer ClassificationMigration StrategyLock ProtectionNotes
Native macOS app (no self-update)standaloneAppmacOS Stub PortalNoe.g., Safari, Finder
Sparkle self-updating appstandaloneAppmacOS Stub PortalYese.g., some indie developer apps
Electron app (no app-update.yml)standaloneAppmacOS Stub PortalNoe.g., VS Code
Electron app (with app-update.yml)standaloneAppmacOS Stub PortalYese.g., Slack, Discord
Electron + Sparkle hybrid appstandaloneAppmacOS Stub PortalYesBoth flags detected independently
Custom updater apps (Chrome, Edge)standaloneAppmacOS Stub PortalNoIdentified via LaunchServices, KSProductID, etc.
iOS app (Mac version)standaloneAppiOS Stub PortalNoIcons extracted from WrappedBundle; no signing
Mac App Store appstandaloneAppmacOS Stub PortalNoSIP protection; cannot be re-signed
Single app container directorysingleAppContainerWhole App SymlinkNoDirectory with only 1 .app; whole symlink
App suite directory (e.g., Office)appSuiteFolderWhole App SymlinkDepends on internal appsDirectory with 2+ .app; whole symlink
Non-.app pathWhole App SymlinkPath with extension other than .app

⚠️ About Lock Protection

When an app is marked as needing lock (needsLock = true), AppPorts executes chflags -R uchg on the external storage app after migration completes, setting the immutable flag. This prevents self-updaters from deleting or modifying the external copy, but also means the app cannot self-update. Users need to manually unlock in AppPorts before updating.

💡 Why Custom Updater Apps Are Not Locked

Apps using custom updaters like Chrome and Edge are not locked. These apps' updaters typically download and install new versions to local internal storage. Due to macOS Stub Portal's link isolation characteristics, this does not damage app files on external storage.

When AppPorts detects that the app version on local internal storage is higher than on external storage, it automatically tags the app with "Pending Migration," prompting the user to re-migrate to synchronize the latest version.

最近更新