Skip to content

rm: the Mac App Store build: every macOS build unsandboxed, its notices and branches gone - #1943

Merged
lollipopkit merged 1 commit into
mainfrom
rm/mac-sandbox
Nov 13, 2026
Merged

lollipopkit merged 1 commit into
mainfrom
rm/mac-sandbox

Conversation

@lollipopkit

@lollipopkit lollipopkit commented Nov 13, 2026 •

Copy link
Copy Markdown
Owner

The macOS App Store version is no longer updated. SandboxImport stays (TODO) for users moving from it to the DMG.

Summary by CodeRabbit

  • New Features
    • macOS builds now support local terminal access and related SSH features across installation types.
    • When switching from the Mac App Store version to the DMG, app data is imported on first launch.
  • Documentation
    • Updated macOS installation guidance: the App Store version is no longer updated; GitHub Releases and Homebrew remain available.
  • Bug Fixes
    • Improved handling of legacy macOS files during migration.

@coderabbitai

coderabbitai Bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

macOS release configuration now uses unsandboxed entitlements, and the DMG release flow no longer selects a separate entitlement file. Migration handling and desktop capability checks are updated alongside the removal of App Store-specific behavior and documentation.

Changes: macOS Build Consolidation

Layer / File(s) Summary
Unify macOS release signing
.github/workflows/analysis.yml, .github/workflows/build.yml, macos/Runner/*entitlements, macos/Runner/Configs/Release.xcconfig, macos/Runner/IncomingShare.swift, macos/CLAUDE.md, scripts/release/*macos*, scripts/release/sync-homebrew-cask.sh, test/platform/macos_entitlements_test.dart
Release and Debug/Profile builds use unsandboxed entitlements, and the separate DMG entitlement file is removed. The release script no longer selects a separate entitlement file. Tests check the shared configuration. File reads no longer start or stop security-scoped access.
Retain legacy data migration
README.md, README_zh.md, docs/src/content/docs/installation.mdx, docs/src/content/docs/zh/installation.mdx, lib/core/local/files.dart, lib/core/utils/sandbox_import.dart, lib/data/store/setting.dart, lib/view/page/home.dart, lib/view/page/notice/*, lib/view/page/setting/entries/app.dart, lib/view/page/setting/entry.dart, lib/view/page/setting/tiles.dart, integration_test/sandbox_import_test.dart, lib/l10n/*.arb
Desktop builds now include sandboxed macOS in legacy Documents import checks. The import-result notice remains, while the DMG-specific notice and setting are removed. Installation pages describe the retired App Store version and DMG data import on first launch. DMG-specific explanatory strings are removed from the localizations.
Update desktop and SSH capability checks
docs/src/content/docs/advanced/*, docs/src/content/docs/zh/advanced/*, integration_test/local_shell_test.dart, lib/core/local/server.dart, lib/core/service/ssh_discovery_ssh_config.dart, lib/core/ssh/*, lib/view/page/server/edit/widget.dart, lib/l10n/*.arb, test/unit/ssh/proxy_command_sandbox_test.dart, test/unit/ssh/proxy_command_test.dart
Local-shell and SSH availability no longer use macOS sandbox checks. Identity-file reads follow normal file-read handling, and ProxyCommand errors no longer append sandbox explanations. Tests cover command expansion and input validation. Related platform documentation and localized sandbox warnings are removed or updated.

Suggested reviewers: gt-610

Merge Risk: Minimal · up to a9724

This change removes the Mac App Store build and its special handling, so all macOS builds run unsandboxed and use one set of entitlements. No concrete merge-blocking risk was found. The migration path for existing App Store users is intentionally kept as a TODO for later removal.

- [ ] Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Recent review info

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Essentials
  • Run ID: 20b451d8-6d93-48e3-ad2c-49a187c772ca
Commits

Reviewing files that changed from the base of the PR and between b8b234a and a9724fe.

Files ignored due to path filters: 17

  • lib/generated/l10n/l10n.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_az.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_de.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_en.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_es.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_fa.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_fr.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_id.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_it.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_ja.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_ko.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_nl.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_pt.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_ru.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_tr.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_uk.dart is excluded by !**/generated/**
  • lib/generated/l10n/l10n_zh.dart is excluded by !**/generated/**
Files selected for processing: 57

  • .github/workflows/analysis.yml
  • .github/workflows/build.yml
  • README.md
  • README_zh.md
  • docs/src/content/docs/advanced/agent.md
  • docs/src/content/docs/advanced/bulk-import.md
  • docs/src/content/docs/advanced/local-terminal.md
  • docs/src/content/docs/installation.mdx
  • docs/src/content/docs/zh/advanced/agent.md
  • docs/src/content/docs/zh/advanced/bulk-import.md
  • docs/src/content/docs/zh/advanced/local-terminal.md
  • docs/src/content/docs/zh/installation.mdx
  • integration_test/local_shell_test.dart
  • integration_test/sandbox_import_test.dart
  • lib/core/local/files.dart
  • lib/core/local/server.dart
  • lib/core/service/ssh_discovery_ssh_config.dart
  • lib/core/ssh/agent.dart
  • lib/core/ssh/identities.dart
  • lib/core/ssh/proxy_command_socket.dart
  • lib/core/utils/sandbox_import.dart
  • lib/data/store/setting.dart
  • lib/l10n/app_az.arb
  • lib/l10n/app_de.arb
  • lib/l10n/app_en.arb
  • lib/l10n/app_es.arb
  • lib/l10n/app_fa.arb
  • lib/l10n/app_fr.arb
  • lib/l10n/app_id.arb
  • lib/l10n/app_it.arb
  • lib/l10n/app_ja.arb
  • lib/l10n/app_ko.arb
  • lib/l10n/app_nl.arb
  • lib/l10n/app_pt.arb
  • lib/l10n/app_ru.arb
  • lib/l10n/app_tr.arb
  • lib/l10n/app_uk.arb
  • lib/l10n/app_zh.arb
  • lib/l10n/app_zh_tw.arb
  • lib/view/page/home.dart
  • lib/view/page/notice/dmg_notice.dart
  • lib/view/page/notice/sandbox_import_notice.dart
  • lib/view/page/server/edit/widget.dart
  • lib/view/page/setting/entries/app.dart
  • lib/view/page/setting/entry.dart
  • lib/view/page/setting/tiles.dart
  • macos/CLAUDE.md
  • macos/Runner/Configs/Release.xcconfig
  • macos/Runner/DebugProfile.entitlements
  • macos/Runner/IncomingShare.swift
  • macos/Runner/Release.entitlements
  • macos/Runner/ReleaseDmg.entitlements
  • scripts/release/release-macos-dmg.sh
  • scripts/release/sync-homebrew-cask.sh
  • test/platform/macos_entitlements_test.dart
  • test/unit/ssh/proxy_command_sandbox_test.dart
  • test/unit/ssh/proxy_command_test.dart
Files with no reviewable changes: 28

  • .github/workflows/analysis.yml
  • .github/workflows/build.yml
  • lib/core/service/ssh_discovery_ssh_config.dart
  • lib/core/ssh/identities.dart
  • lib/l10n/app_az.arb
  • lib/l10n/app_de.arb
  • lib/l10n/app_en.arb
  • lib/l10n/app_es.arb
  • lib/l10n/app_fa.arb
  • lib/l10n/app_fr.arb
  • lib/l10n/app_id.arb
  • lib/l10n/app_it.arb
  • lib/l10n/app_ja.arb
  • lib/l10n/app_ko.arb
  • lib/l10n/app_nl.arb
  • lib/l10n/app_pt.arb
  • lib/l10n/app_ru.arb
  • lib/l10n/app_tr.arb
  • lib/l10n/app_uk.arb
  • lib/l10n/app_zh.arb
  • lib/l10n/app_zh_tw.arb
  • lib/view/page/notice/dmg_notice.dart
  • lib/view/page/setting/entries/app.dart
  • lib/view/page/setting/entry.dart
  • lib/view/page/setting/tiles.dart
  • macos/Runner/IncomingShare.swift
  • macos/Runner/ReleaseDmg.entitlements
  • test/unit/ssh/proxy_command_sandbox_test.dart

Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 7 remain after this review.

Recent review details

Context from checks skipped due to timeout: 2

  • GitHub Check: CodeRabbit
  • GitHub Check: iOS Linux engine
Additional context used

Code guidelines: 3

CLAUDE.md — auto-discovered
lib/data/store/CLAUDE.md — auto-discovered
macos/CLAUDE.md — auto-discovered
Path-based instructions: 5

Source excerpt: One encrypted SQLite file; Drift owns the DDL, queries are hand-written and synchronous.

CodeRabbit inference engine (CLAUDE.md)

Files:

  • lib/data/store/setting.dart
Source excerpt: One encrypted SQLite file, not Hive.

CodeRabbit inference engine (lib/data/store/CLAUDE.md)

Files:

  • lib/data/store/setting.dart
Source excerpt: **macOS ships a separate build for each architecture, selected exclusively by `ARCHS`.**

CodeRabbit inference engine (macos/CLAUDE.md)

Files:

  • macos/CLAUDE.md
  • macos/Runner/Configs/Release.xcconfig
  • macos/Runner/DebugProfile.entitlements
  • macos/Runner/Release.entitlements
Source excerpt: **In `lib/`, a page is `AppRoute.go`, `AppPageRoute` or `AppPage` (fl_lib), never a bare `MaterialPageRoute` / `MaterialPage`**: a predictive back (Android, and the iOS/macOS edge swipe) pops every route current in its own n...

CodeRabbit inference engine (CLAUDE.md)

Files:

  • lib/core/local/files.dart
  • lib/core/local/server.dart
  • lib/core/ssh/agent.dart
  • lib/core/ssh/proxy_command_socket.dart
  • lib/core/utils/sandbox_import.dart
  • lib/data/store/setting.dart
  • lib/view/page/home.dart
  • lib/view/page/notice/sandbox_import_notice.dart
  • lib/view/page/server/edit/widget.dart
Source excerpt: `test/unit/` is split by **feature** (`ssh/`, `terminal/`, `file/`, `server/`, `virt/`, `monitor/`, …); `store/` is storage infrastructure, `app/` what belongs to no feature.

CodeRabbit inference engine (CLAUDE.md)

Files:

  • test/unit/ssh/proxy_command_test.dart
LanguageTool

docs/src/content/docs/installation.mdx

[uncategorized] ~32-~32: Did you mean the proper noun “Apple Silicon”?
Context: ...ide ServerBox-<version>-arm64.dmg for Apple silicon and ServerBox-<version>-amd64.dmg for...

(APPLE_PRODUCTS)

Additional comments: 7

test/platform/macos_entitlements_test.dart: 1

50-50: Functional Correctness

The concern does not hold. The CI heredoc at .github/workflows/analysis.yml:554 rewrites DebugProfile.entitlements only inside the macosBuild job. That job runs only flutter build macos --debug and never runs macos_entitlements_test.dart. The test runs in the sharded test job, which checks out the repository separately. The workflow's own comment at lines 571-573 states that the test runs on a checkout the build step has not rewritten. The generated plist therefore cannot cause the new parity assertion to fail in CI.

lib/view/page/home.dart: 1

33-33: LGTM!

Also applies to: 573-573

lib/view/page/notice/sandbox_import_notice.dart: 1

1-64: LGTM!

lib/core/ssh/agent.dart: 1

13-15: LGTM!

lib/core/ssh/proxy_command_socket.dart: 1

146-147: LGTM!

lib/view/page/server/edit/widget.dart: 1

814-816: LGTM!

test/unit/ssh/proxy_command_test.dart: 1

1-64: LGTM!

@lollipopkit
lollipopkit marked this pull request as ready for review November 13, 2026 16:03
@lollipopkit
lollipopkit merged commit afb3850 into main Nov 13, 2026
38 checks passed
@lollipopkit
lollipopkit deleted the rm/mac-sandbox branch November 13, 2026 16:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant