Skip to content

v2.2.0: App Store sandbox compliance + internal Runtime refactor + settings redesign - #144

Merged
wflixu merged 8 commits into
mainfrom
dev
Aug 23, 2026
Merged

wflixu merged 8 commits into
mainfrom
dev

Conversation

@wflixu

@wflixu wflixu commented Aug 23, 2026

Copy link
Copy Markdown
Owner

RClick v2.2.0 — a release focused on App Store compliance and internal architecture cleanup, plus several user-facing improvements.

Highlights

App Store compliance

  • Enable app sandbox for the main app (required for App Store)
  • Clean up entitlements (remove temporary exceptions; keep app-groups + security-scoped bookmarks)
  • Isolate the updater: App Store builds redirect to the Mac App Store instead of self-updating
  • Provision App Groups for Developer ID releases in CI

Internal refactor (no third process)

  • Extract business logic out of the 752-line AppDelegate into named in-process services: MenuService, ActionService, PermissionService,
    ConfigService, aggregated in RCRuntime
  • ActionService is now unit-testable via injected PermissionProviding protocol (mock-based tests added)
  • Extension stays a thin renderer + event forwarder

Folder authorization (bookmark) polish

  • Security-scoped bookmark flow: check → prompt (NSOpenPanel) → cache; covers subtrees
  • Clean up stale bookmarks on restore failure

Extension offline degradation

  • Connection state is a UX cache (30s heartbeat), real liveness checked at click time via actionAck
  • On .quit the extension goes offline immediately; shows "RClick is not running" menu

Features

i18n

  • Add Latin American Spanish (es) localization

Notes

  • Requires Swift 6.2+ / Xcode 16+ / macOS 15+
  • Version bumped to 2.2.0 (build 20260823001)

EliasMatDev and others added 8 commits July 30, 2026 04:34
Adds a complete es translation for both the main app and the FinderSync
extension, registers es in knownRegions, and makes the last user-visible
hardcoded strings localizable:

- RClick/Localizable.xcstrings: 156 es strings (8 keys added that the UI
  already used but the catalog was missing: OK, Save, Add, Display Name,
  Default Open App, Edit App Properties, plus Download failed / Unknown
  error for the updater)
- FinderSyncExt/Localizable.xcstrings: 143 es strings (adds the Finder
  toolbar tooltip key)
- FinderSyncExt: toolbarItemToolTip now goes through AppLocalization
- Updater: the two remaining Chinese user-facing error strings are now
  localized keys
- Default seed data (actions, common folders) uses the English source
  keys instead of hardcoded Chinese, so displayName lookups and the
  English fallback line up
- scripts/check-localization.py verifies es coverage and that every
  translation keeps the source format specifiers, in order

Newly introduced keys ship en, es, zh-Hans and ja so no language
regresses. English stays the source language and the fallback for
unsupported system languages. No logic, signing, entitlement or
bundle-id changes.
feat(i18n): add Latin American Spanish (es) localization
…ning

fix(ci): provision App Groups for Developer ID releases
- Add RClick/Runtime service layer (RCRuntime, MenuService, ActionService,
  PermissionService, ConfigService); slim down AppDelegate
- Enable app sandbox for main app; update entitlements (app-sandbox,
  network.client; remove temporary exceptions); align Debug/Release
- Add extension offline degradation (connection-state cache, actionAck
  timeout prompt, immediate offline on quit)
- Fix launch-at-login (restore LaunchAtLogin.Toggle + status warning)
- Polish bookmark authorization (clean dead bookmarks, clearer prompt,
  common-dirs grant on add, folder permissions list)
- Isolate updater for App Store (disable self-update on MAS builds)
- Remove dead code (SenderValidator, respondMenuConfigRequest); update docs
- Bump version to 2.2.0 (build 20260823001)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add OpenWithApp.opensNewInstance (persisted in AppEntity)
- EditAppSheetView: new "Open in a new window" toggle
- ActionService: set NSWorkspace.OpenConfiguration.createsNewApplicationInstance
- Fix SwiftData migration: new @model field must have a default value
  (non-optional field without default breaks migration for existing data)
- Add unit test for opensNewInstance persistence

Co-Authored-By: Claude <noreply@anthropic.com>
- Sidebar: fully custom VStack rows (icon-colored rounded squares +
  larger text) with explicit spacing, no hidden native List insets
- Sidebar: window title now follows selected tab via navigationTitle
- Sidebar: keep native macOS collapse toggle button
- General: remove redundant "Enable RClick" toggle; add Settings…
  button to Finder Extension status row
- Actions / New File: replace oversized switches with compact checkboxes
- Actions list: increase row height

Co-Authored-By: Claude <noreply@anthropic.com>
@wflixu
wflixu merged commit d467d5e into main Aug 23, 2026
1 check passed
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.

【疑问】打开 Ghosty 默认新建 tab 而非 window,请问在哪里可以配置为新建 window?

3 participants