Skip to content

Fix macOS 13 compatibility: mic detection fallback, Swift 6 concurren… - #1

Open
meyermainnet wants to merge 1 commit into
joncode:mainfrom
meyermainnet:main
Open

Fix macOS 13 compatibility: mic detection fallback, Swift 6 concurren…#1
meyermainnet wants to merge 1 commit into
joncode:mainfrom
meyermainnet:main

Conversation

@meyermainnet

Copy link
Copy Markdown
Contributor

Fixes macOS 13 compatibility…cy fixes, AppDelegate retention bug, MeetMatcher regex fix

…cy fixes, AppDelegate retention bug, MeetMatcher regex fix
joncode added a commit that referenced this pull request Aug 24, 2026
Spotted by @meyermainnet in #1: the delegate was a local whose last use
was the assignment, so ARC could legally release it before app.run(),
leaving a launched-but-dead app. Works today only by optimizer grace.

Co-authored-by: meyermainnet <314764385+meyermainnet@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@joncode

joncode commented Aug 24, 2026

Copy link
Copy Markdown
Owner

Hey @meyermainnet — thanks for this! First outside PR on the project, and you found a real bug: the AppDelegate retention issue is a genuine catch. NSApplication.delegate is weak, our delegate's last use was the assignment, and ARC was free to release it early — it only worked by optimizer grace. I've landed that fix on main as c33e757 with Co-authored-by credit to you. Thank you!

On the macOS 13 portions, I have to flag some problems found while testing the branch:

The dlsym guard in AudioInputProbe unfortunately can't work. kAudioHardwarePropertyProcessObjectList and friends are C enum constants, not exported symbols — dlsym returns nil for them on every macOS version. You can verify with:

import Darwin
dlsym(dlopen(nil, RTLD_LAZY), "kAudioHardwarePropertyProcessObjectList") // nil, always

That makes list() return [] everywhere — I built the branch on macOS 26 and jumpcall status --verbose reports zero audio processes where main lists ~30. Net effect: Teams/Webex/FaceTime detection and the web-call fallback would silently turn off for all users (and as of v0.3.0, the Settings window's "Add Call App" flow too). The good news: since the constants are compile-time values, the whole runtime lookup is unnecessary — a plain if #available(macOS 14, *) guard at the top of list() is sufficient.

The regex conversions aren't needed for Ventura — Swift Regex literals are available from macOS 13 — and the NSRegularExpression version drops the anchoring: firstMatch accepts meeting URLs with trailing garbage (…/abc-defg-hijEXTRA) or embedded mid-string that wholeMatch rejects. Same for the concurrency rewrites: the branch builds fine at a 13 target with the untouched MainActor.assumeIsolated call sites elsewhere in the codebase, so those changes appear unneeded (happy to be corrected if you hit a concrete compile error on your machine — please share it!).

I'm genuinely open to macOS 13 support. The right-sized version is: the three deployment-target bumps + the #available(macOS 14, *) guard + a README note that mic-based detection is off on Ventura (Zoom, Meet tabs, and the window switcher all still work — a decent degraded mode). If you'd like to rebase this PR down to exactly that (note main has moved a lot — v0.3.0 and v0.4.0 landed since), I'd be glad to merge it. Otherwise no worries — I'll open a "help wanted" issue for it.

Thanks again for digging in — the delegate fix alone made this PR worth it. 🙏

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.

2 participants