Skip to content

v2.1.0: Replace FDA with Bookmark permissions, fix issues #128 & #129, simplify localization - #130

Merged
wflixu merged 9 commits into
mainfrom
dev
Jul 12, 2026
Merged

v2.1.0: Replace FDA with Bookmark permissions, fix issues #128 & #129, simplify localization#130
wflixu merged 9 commits into
mainfrom
dev

Conversation

@wflixu

@wflixu wflixu commented Jul 12, 2026

Copy link
Copy Markdown
Owner

Summary

This release replaces the Full Disk Access (FDA) permission model with Security-Scoped
Bookmarks, fixes two reported issues, and simplifies the localization system.

What's Changed

✨ New: Security-Scoped Bookmark permission model

  • Replaced Full Disk Access with per-folder authorization via NSOpenPanel
  • File operations (delete, create, hide/unhide, AirDrop) prompt for access when needed
  • Settings: "Full Disk Access" → "Folder Permissions" management
  • Authorized directories persist across app restarts via SwiftData (BookmarkEntity)
  • No more System Settings navigation for users; lower App Store review barrier

🐛 Bug Fixes

🧹 Cleanup

  • Removed in-app language picker (language is now fully auto-detected from system)
  • Simplified localization to use Bundle.main.localizedString directly
  • Removed PermissionChecker.hasFullDiskAccess() and related FDA code
  • Removed AppLanguage enum, currentLanguage, localizedBundle — all redundant

🌐 Localization

  • Default: English, Priority: Simplified Chinese, Additional: Japanese
  • All translations preserved; detection follows system language automatically

🔖 Version

  • 2.0.4 → 2.1.0
  • Build: 20260705001 → 20260712001

wflixu and others added 9 commits July 10, 2026 23:24
…open-source community files

- Add contributors section (contrib.rocks) and Star History chart
- Add License, Release, Downloads badges
- Replace Report Issue with Contributing section linking to templates
- New: CONTRIBUTING.md, SECURITY.md, CHANGELOG.md, CODE_OF_CONDUCT.md
- New: ISSUE_TEMPLATE (bug_report, feature_request), PULL_REQUEST_TEMPLATE
- New: specs/design-bookmark-permission.md (FDA → security-scoped bookmark)
- Fix License badge: MIT → GPLv3

Co-Authored-By: Claude <noreply@anthropic.com>
- Respect `enabled` state when building menu config (filter disabled items)
- Preserve `isEnabled` when loading NewFileTypeEntity from SwiftData
- Add delete button with SwiftUI confirmation dialog for new file types
- Set JSON file type to disabled by default
- Add missing localization entries (en, zh-Hans, ja) for delete confirmation

Closes #129
Remove the demo `requestBadgeIdentifier` code that randomly assigned
non-empty badge identifiers ("One" or "Two") to files. When Finder
receives a non-empty badge ID, it overlays the extension icon on the
item — causing removable disks and optical discs mounted under
/Volumes/ to show RClick icon instead of their original drive icon.

Always set an empty badge identifier to keep item icons unchanged.

Closes #128
…ission model

Remove the FDA permission check and startup guide, replacing it with
a per-folder authorization model using Security-Scoped Bookmarks.

Key changes:
- Add BookmarkEntity (SwiftData) and BookmarkManager for bookmark lifecycle
- File operations (delete/create/hide/unhide/airdrop) now prompt for
  per-folder access via NSOpenPanel when no bookmark exists
- Settings: replace "Full Disk Access" row with "Folder Permissions"
  management (add/remove authorized directories)
- Remove PermissionChecker.hasFullDiskAccess(), checkFDAAndGuideIfNeeded()
- Make file operations async to support NSOpenPanel modal
- Keep Accessibility permission checker (separate from FDA)
- Add localization strings for folder permissions UI (en, zh-Hans, ja)

Benefits:
- No more System Settings navigation for users
- Lower App Store review barrier
- No misleading FDA warnings during Xcode debug runs
Move Folder Permissions row below Accessibility in Settings.
Remove the manual language override picker in Settings > Main Controls.
The app already auto-detects the system language and falls back to
English — the picker was redundant since macOS provides per-app
language override in System Settings.

Keeping Japanese localization (ja) which continues to work through
automatic detection.

Removed:
- Language Picker UI from GeneralSettingsTabView
- selectedLanguage property and locale observer from AppState
- locale environment override from RClickApp and SettingsWindow
- selectedLanguage and systemLanguage from AppLocalization
- selectedLanguage key from StringExtension
- Unused localization strings for the language picker
Add @ObservedObject for bookmarkManager so the Folder Permissions
count updates immediately when authorization changes from file
operations, without requiring a tab switch to refresh.
Clean up after language picker removal:
- Remove .automatic case (never assigned since picker removed)
- Remove CaseIterable, Identifiable conformances (only needed for Picker)
- Simplify localeIdentifier switch (no more .automatic case)
…g directly

xcstrings handles language selection automatically based on the user's
system language preferences (en/zh-Hans/ja). The custom AppLanguage
enum and currentLanguage detection logic were redundant.

Removed:
- AppLanguage enum (simplifiedChinese/english/japanese)
- currentLanguage auto-detection
- currentLocale computed property
- localizedBundle manual bundle lookup
- localeIdentifier on AppLanguage
- bundle parameter from localized() (no longer needed)
@wflixu
wflixu merged commit 467f680 into main Jul 12, 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.

1 participant