Skip to content

fix(ci): bump MACOSX_DEPLOYMENT_TARGET from 10.9 to 12.0#1363

Merged
ErikBjare merged 2 commits into
masterfrom
fix/macos-deployment-target
Jul 22, 2026
Merged

fix(ci): bump MACOSX_DEPLOYMENT_TARGET from 10.9 to 12.0#1363
ErikBjare merged 2 commits into
masterfrom
fix/macos-deployment-target

Conversation

@ErikBjare

@ErikBjare ErikBjare commented Jul 22, 2026

Copy link
Copy Markdown
Member

Problem

The submodule bump (372fd95) pulled in ActivityWatch/aw-watcher-window#126, which compiles the Swift helper with -target $(arch)-apple-macosx$(MACOSX_DEPLOYMENT_TARGET), defaulting to 14.0 but overridable via env (?=). This workflow still exported MACOSX_DEPLOYMENT_TARGET: 10.9 — below rustc's 10.12 floor (#1327) and Swift Foundation's 10.10 minimum — so both macOS jobs on master (run 29907762087) failed compiling macos.swift:

error: 'URL' is only available in macOS 10.10 or newer

Fix

Set MACOSX_DEPLOYMENT_TARGET: "12.0" in both macOS build jobs.

Why 12.0 and not upstream's 14.0: 14.0 in aw-watcher-window#126 was chosen to stop the runner-default (macOS 15) target from leaking in — not because the code needs macOS 14 APIs. Compiling macos.swift at various targets (both arches) shows the true floor is 12.0: Swift concurrency (Task) needs 10.15, Date.now needs 12. Targeting 12.0:

Current builds are arm64-only, so today this only affects arm64 (floor 11.0 anyway); the Intel-relevant part matters when #1263 restores x86_64 artifacts.

Follow-up worth doing upstream: lower aw-watcher-window's Makefile default (and its minos CI check) from 14.0 to 12.0 to match.

Context

Last blocker for re-cutting the v0.14.0b2 release (signing + notarization fixed in #1362 and via secret rotation; see #1339).

@ErikBjare

Copy link
Copy Markdown
Member Author

@greptileai review

@greptile-apps

greptile-apps Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR aligns the macOS release builds with the Swift helper’s minimum deployment target. The main changes are:

  • Raises the Qt release job target from macOS 10.9 to 14.0.
  • Raises the Tauri release job target from macOS 10.9 to 14.0.

Confidence Score: 5/5

This looks safe to merge.

  • No blocking issues found in the changed code.
  • The target change is consistent across both macOS release paths.
  • Non-macOS matrix entries inherit the variable, but their toolchains do not use this macOS-specific setting.

Important Files Changed

Filename Overview
.github/workflows/release.yml Updates both release-job deployment targets to macOS 14.0, matching the Swift helper’s stated requirement.

Reviews (1): Last reviewed commit: "fix(ci): bump MACOSX_DEPLOYMENT_TARGET f..." | Re-trigger Greptile

@greptile-apps

greptile-apps Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR raises the deployment target in both macOS release jobs. The main changes are:

  • Set the Qt release job target to macOS 14.
  • Set the Tauri release job target to macOS 14.
  • Quote both environment values as strings.

Confidence Score: 4/5

Both release jobs can produce native artifacts that require macOS 14, including bundles that still declare support for older systems.

  • The job-level variable reaches all delegated native builds.
  • Native artifacts can fail to load on macOS 11–13.
  • The Tauri bundle still declares a 10.14 minimum.

.github/workflows/release.yml

Important Files Changed

Filename Overview
.github/workflows/release.yml Raises the deployment target for every command in both macOS release jobs, rather than only the Swift helper build.

Reviews (2): Last reviewed commit: "fix(ci): bump MACOSX_DEPLOYMENT_TARGET f..." | Re-trigger Greptile

Comment thread .github/workflows/release.yml Outdated
env:
AW_EXTRAS: true
MACOSX_DEPLOYMENT_TARGET: 10.9
MACOSX_DEPLOYMENT_TARGET: "14.0"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Job-Wide Target Raises Binary Minimum

This job passes MACOSX_DEPLOYMENT_TARGET=14.0 to every child build, including Cargo, native Python extensions, and delegated submodule builds. Any resulting Mach-O artifact can require macOS 14, causing the packaged application to fail during loading on macOS 11–13 even when only the Swift helper needed the higher target.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now moot at 12.0 — that's the measured floor of the Swift helper itself (Task needs 10.15, Date.now needs 12), so no artifact gets a higher requirement than the helper already imposes. The job-wide setting is intentional so all binaries share one floor, and the bundle's LSMinimumSystemVersion now derives from the same variable (d620cc5).

Comment thread .github/workflows/release.yml Outdated
AW_EXTRAS: true
TAURI_BUILD: true
MACOSX_DEPLOYMENT_TARGET: 10.9
MACOSX_DEPLOYMENT_TARGET: "14.0"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Bundle Minimum No Longer Matches

The Tauri job applies the macOS 14 target to all native compilation, while scripts/package/build_app_tauri.sh still declares LSMinimumSystemVersion as 10.14. On macOS 10.14–13, users can receive a bundle that advertises compatibility but fails when dyld loads an executable or library built by this job.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in d620cc5 — LSMinimumSystemVersion now derives from ${MACOSX_DEPLOYMENT_TARGET:-12.0}.

The submodule bump in 372fd95 pulled in aw-watcher-window#126, which
builds the Swift helper with
-target $(arch)-apple-macosx$(MACOSX_DEPLOYMENT_TARGET) (default 14.0,
env-overridable). The bundle workflow still exported 10.9 — below
rustc's 10.12 floor and Swift Foundation's 10.10 minimum — so the macOS
Build step failed with:

    aw_watcher_window/macos.swift: error: 'URL' is only available in
    macOS 10.10 or newer

12.0 is the Swift helper's true floor (Swift concurrency needs 10.15,
Date.now needs 12; verified by compiling macos.swift at 10.12/10.13/
10.15/12.0 for both arches). Unlike upstream's 14.0 default, it keeps
a future x86_64 build (#1263) usable on Intel Macs back to ~2014-15
(Monterey) instead of 2018+ (Sonoma), and still avoids the #125-class
Sonoma crash caused by inheriting the runner-default macOS 15 target.
@ErikBjare
ErikBjare force-pushed the fix/macos-deployment-target branch from ac09d9a to 24b4986 Compare July 22, 2026 10:23
@ErikBjare ErikBjare changed the title fix(ci): bump MACOSX_DEPLOYMENT_TARGET from 10.9 to 14.0 fix(ci): bump MACOSX_DEPLOYMENT_TARGET from 10.9 to 12.0 Jul 22, 2026

@TimeToBuildBob TimeToBuildBob left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 12.0 revision fixes the concrete master failure, and both macOS jobs passed on the previous run at 14.0. One compatibility mismatch remains before merge: scripts/package/build_app_tauri.sh still emits LSMinimumSystemVersion=10.14, while this change compiles all native Tauri-job artifacts with MACOSX_DEPLOYMENT_TARGET=12.0. The app would advertise support for 10.14–11 even though its binaries may require 12.

Please change that plist value to 12.0 in this PR (ideally derive it from ${MACOSX_DEPLOYMENT_TARGET:-12.0} so the build target and advertised floor cannot drift again). The Qt/PyInstaller bundle does not currently declare an equivalent minimum in aw.spec, so that mismatch is specific to the Tauri bundle.

Separately, run 29907762087 also had an unrelated flaky-looking Tauri macOS test failure in aw-client: both eager RequestQueue.register_bucket tests failed even though the same SHA passed on Linux/Windows and the replacement PR run's macOS job passed. I would not broaden this CI repair PR for that unless it recurs.

…RGET

The Tauri app bundle hardcoded LSMinimumSystemVersion=10.14 while its
binaries are now built with MACOSX_DEPLOYMENT_TARGET=12.0, so the bundle
would advertise support for macOS 10.14-11 and then fail at dyld load.
Derive the plist value from the same variable (defaulting to 12.0) so
the build target and advertised floor cannot drift again.
@ErikBjare

Copy link
Copy Markdown
Member Author

Addressed the review in d620cc5: LSMinimumSystemVersion is now derived from ${MACOSX_DEPLOYMENT_TARGET:-12.0} in build_app_tauri.sh, so the advertised floor can't drift from the build target again. Agreed on leaving the flaky aw-client macOS test out of this PR. Upstream PR lowering aw-watcher-window's default to 12.0 is coming next.

@TimeToBuildBob TimeToBuildBob left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

d620cc5 does exactly what I asked for — LSMinimumSystemVersion now derives from ${MACOSX_DEPLOYMENT_TARGET:-12.0} so the advertised floor can't drift from the build target again. Both Greptile P1 threads are resolved. LGTM, merging when CI clears.

@ErikBjare
ErikBjare merged commit bb19d73 into master Jul 22, 2026
15 checks passed
@ErikBjare
ErikBjare deleted the fix/macos-deployment-target branch July 22, 2026 11:14
ErikBjare added a commit to ActivityWatch/aw-watcher-window that referenced this pull request Jul 22, 2026
)

14.0 (#126) was chosen to stop the runner-default target (macOS 15)
from leaking into the binary, not because the code needs macOS 14 APIs.
The actual floor is macOS 12: Swift concurrency (Task) needs 10.15 and
Date.now needs 12; the helper compiles cleanly at 12.0 for both x86_64
and arm64, and fails at 11.0 and below.

Lowering the floor keeps the helper usable on Monterey-era machines
(Intel Macs back to ~2014-15) ahead of restoring x86_64 bundle builds
(ActivityWatch/activitywatch#1263), and matches the bundle repo which
now builds everything with MACOSX_DEPLOYMENT_TARGET=12.0
(ActivityWatch/activitywatch#1363). Still fixes the #125 Sonoma dyld
crash, which only required an explicit target <= the user's OS.

Verified locally: swiftc -target arm64-apple-macosx12.0 builds and
otool reports 'minos 12.0'.
ErikBjare added a commit that referenced this pull request Jul 22, 2026
Adds macos-15-intel to both the Qt and Tauri build matrices, restoring
Intel macOS artifacts that were dropped when the matrix moved to
macos-latest (arm64) — see #1263. GitHub retired the free macos-13
x86_64 image, but macos-15-intel is its designated standard-image
successor (distinct from the paid -large runners).

With MACOSX_DEPLOYMENT_TARGET=12.0 (#1363) the x86_64 artifacts support
Intel Macs back to ~2014-15 (Monterey). Artifact names already use
uname -m (#1262), macOS steps key off runner.os, and signing/
notarization run per-job, so no other changes are needed.
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