Skip to content

1.7.0: macOS and Linux previews, search, excluded apps as tags, updates on About - #41

Merged
KnifeLemon merged 17 commits into
mainfrom
wip/linux-macos
Oct 6, 2026
Merged

KnifeLemon merged 17 commits into
mainfrom
wip/linux-macos

Conversation

@KnifeLemon

Copy link
Copy Markdown
Owner

Filee 1.7.0: macOS and Linux previews, plus the settings changes below.

macOS and Linux (preview)

Packages for macOS 14+ (Apple silicon, Intel) and Linux (x64, ARM64), built and launched on GitHub's runners (with screenshots of the app on real Macs) and tested by hand in a macOS 15 VM and on Ubuntu 24.04.

Fixed along the way:

  • macOS: Filee quit right after starting (the tray icon's null tooltip went to native code).
  • macOS: started from Finder, Filee came up in English on a Korean Mac. "auto" reads the system's language list, and the bundle declares en, ko and zh-Hans.
  • macOS: Option+drag never opened the donut. The Dock keeps a transparent window over the whole screen, so every drag looked like it was over the Dock. Only app windows and the desktop count now.
  • macOS: "Convert with Filee" didn't run. Automator Quick Actions with shell scripts hung in testing, so Filee.app now provides the service itself (NSServices, answered by the running app).
  • macOS: Filee asks for Accessibility with the system alert, reminds on the home page, and starts the gesture within two seconds of the permission being given.
  • macOS: the package signs every file in Contents/MacOS (the .NET assemblies too), plists keep LF, and Finder/file-manager wording replaces "Explorer".
  • Watch folders on macOS and Linux wait for a paused copy (files being written aren't locked there).
  • Engine install hints (Homebrew, package managers) are translated; "update recommended" knows the tested FFmpeg and Ghostscript versions.
  • A Mac VM without graphics acceleration gets an alert instead of a silent exit.

App changes

  • About holds the update settings (automatic check, Check now, update button); General no longer does.
  • The first-run engine choice starts with nothing ticked.
  • Search boxes above the profiles, the available presets and the preset list.
  • "Never trigger in these apps" holds tags: type a name (running apps suggested) or pick from the apps with a window open (Windows, macOS and X11 each list them their own way).

Docs and CI

  • README (en, ko, zh-CN): install per system, shorter features, screenshots after features, build from source on all three.
  • The Linux and macOS packages workflow runs on pull requests; the release attaches its packages.

Tests

Core 116, App 171, CLI 18, Platform 18, Engines 491 pass on Windows; the Linux and macOS runs pass on GitHub.

🤖 Generated with Claude Code

KnifeLemon and others added 16 commits October 6, 2026 14:06
Work in progress kept on its own branch to continue later: Linux and macOS platform projects, portable builds
and their workflow, install scripts, system integration service and tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tested on macOS 15 (Intel, VMware): the solution builds, the tests pass and the osx-x64 package installs and converts
with the filee command.

- build-portable.ps1 signs every file in Contents/MacOS (the .NET assemblies too, signed into extended attributes)
  before the main executable; signing the main executable checked the unsigned assemblies and failed.
- .gitattributes keeps plist files LF: codesign can't read entitlements with CRLF line ends.
- The "update recommended" check knows the tested version of engines Filee doesn't download on macOS (FFmpeg and
  Ghostscript from Homebrew).
- When Avalonia can't start (no display link: a Mac VM without graphics acceleration), Filee logs it and shows a
  system alert instead of quitting silently.
- Tests that assumed Windows (C:\ paths, CRLF mail text, Windows DLL imports, a download for every engine, Skia's
  glyph path for empty glyphs) work on macOS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…creenshots of the app on real Macs

The launch check takes two screenshots on macOS (after the start and after a second start) and uploads them with
Filee's own log files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s only the modification date

- The tray icon gets its tooltip before it is attached: Avalonia's macOS tray passed the null tooltip to native
  code and Filee quit right after starting (found on GitHub's macOS runners).
- Linux file systems keep no creation time a program can set, so the keep-dates test checks only the modification
  time there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…k tests run on Linux ARM64

- The home page hint and the gesture scope say Finder on macOS and the file manager on Linux instead of Explorer
  (seen in the first screenshots from a real Mac).
- Tests read an HWPX back with Unhwp where its native library exists and from the section XML on Linux ARM64,
  which Unhwp doesn't ship for (the app already lists Unhwp as unsupported there).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Homebrew and package manager hints for engines Filee doesn't download there were English in every language.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An app started from Finder gets no LANG, so .NET saw no UI language and Filee came up in English on a Korean Mac.
"auto" now reads the language list macOS keeps (CFLocaleCopyPreferredLanguages), and the bundle declares its
localizations (en, ko, zh-Hans) so system panels follow too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… gestures as soon as it is given

- When Filee is opened (not at sign-in) with a drag gesture on and no Accessibility permission, macOS's own alert
  asks for it and lists Filee under Accessibility, so the user only switches it on.
- The home page shows a reminder with an "Open Accessibility settings" button until the permission is given.
- Gestures start by themselves within two seconds of the permission being given; no restart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… isn't hidden behind it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…logs what a gesture sees

The window under the cursor was looked up among all on-screen windows, and the Dock keeps a transparent window
above the whole screen: every drag was taken as over the Dock, never over Finder. Only app windows (layer 0) and
the desktop count now. FILEE_TRACE_GESTURES=1 logs each press with its modifiers and the window it was over.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…u itself

The Automator Quick Action didn't run in testing (not even one made in Automator), and needed a shell, a second
Filee process and the pipe between them. Filee.app now declares the service in its Info.plist (NSServices,
message convertFiles) and registers the object that answers it at start, so macOS hands the selected files
straight to the running Filee, starting it first if needed.

- ServicesMenu.strings translate the title (Filee로 변환, 用 Filee 转换); the package copies the .lproj folders.
- The settings switch turns the service on and off the way System Settings does (pbs NSServicesStatus) and
  removes the Automator workflow earlier builds installed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Windows tells a file still being written by refusing exclusive access; macOS and Linux don't lock files, so a
copy that paused for two seconds was converted half-written (and again when finished). There files must stay
unchanged for five seconds, and on macOS a file with Finder's copy-in-progress creation date (24 January 1984)
waits too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ts, excluded apps as tags

- About shows the automatic update check and "Check now" (and the update button when one is out); General no
  longer does.
- The first-run engine choice starts with nothing ticked.
- Search boxes above the profiles, the available presets (Donut toolbar) and the preset list filter as you type;
  a profile is found by its name or by an extension it handles.
- "Never trigger in these apps" holds tags: type a name (running apps are suggested) or pick from the apps that
  have a window open now. Windows lists processes with a main window, macOS the app windows on screen, Linux
  (X11) the window manager's client list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nshots after the features

- Install has one part per system: Windows (Setup or portable ZIP, updates), macOS 14+ and Linux (preview packages,
  install.sh, first-start and permission steps, X11 for gestures).
- Features lose the long explanations; the macOS modifier (Option), search, excluded apps and the new audio options
  are in.
- Screenshots move up after the features; build-from-source covers macOS and Linux; the privacy note points to
  Settings > About for the update check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- CHANGELOG: macOS and Linux previews, search, excluded apps as tags, updates on About, nothing pre-ticked.
- README screenshots rendered again (search boxes, version 1.7.0, nothing ticked in the engine choice).
- The Linux and macOS packages workflow runs on pull requests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@KnifeLemon KnifeLemon added the feature New features label Oct 6, 2026
… time, one Linux/macOS run per PR

- MacOSServicesProvider's names are plain constants (only Register is macOS-only), and the delayed Accessibility
  request checks for macOS inside its callback, so the analyzer sees the guard.
- FolderWatcher tests pass a two-second settle time; the longer macOS/Linux default has its own test.
- ci.yml already runs the Linux and macOS packages workflow, so it has no pull_request trigger of its own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@KnifeLemon
KnifeLemon merged commit bcaf4b5 into main Oct 6, 2026
5 checks passed
@KnifeLemon
KnifeLemon deleted the wip/linux-macos branch October 6, 2026 23:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New features

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant