Skip to content

Build universal binaries (arm64 + x86_64) with modern Xcode#8

Open
eighteight wants to merge 4 commits into
Syphon:masterfrom
eighteight:universal-binaries
Open

Build universal binaries (arm64 + x86_64) with modern Xcode#8
eighteight wants to merge 4 commits into
Syphon:masterfrom
eighteight:universal-binaries

Conversation

@eighteight

Copy link
Copy Markdown

Closes #7.

The Simple apps currently build Intel-only (and fail to build at all with recent Xcode). This PR makes both apps build and run as universal binaries out of the box.

Changes

  • Remove VALID_ARCHS = "i386 x86_64" from both app projects. This setting filtered arm64 out of ARCHS, so builds on Apple Silicon were Intel-only. With it removed, Xcode's standard architectures apply (arm64 + x86_64 on current toolchains).
  • MACOSX_DEPLOYMENT_TARGET = 10.9$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET) in both app projects, matching what Syphon-Framework already does on master. Targeting 10.9 no longer compiles with current Xcode (libarclite was removed in Xcode 14.3).
  • Add LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks" to the app targets. Current Syphon-Framework uses an @rpath install name; without a runpath entry the apps crash at launch with Library not loaded … no LC_RPATH's found.
  • Bump the Syphon-Framework submodule from ef72eff (2022) to current master (71351d4). Note: building the framework now requires Xcode's Metal toolchain component (xcodebuild -downloadComponent MetalToolchain).

Verification

Built with Xcode 26.6 on an Apple Silicon Mac (macOS 26):

xcodebuild -workspace Simple.xcworkspace -scheme "Simple Server" \
  -configuration Release -destination "generic/platform=macOS" build
  • lipo -archs on both app executables and the embedded Syphon.framework: x86_64 arm64
  • Simple Server launched natively on arm64: registers its server in the Syphon directory, visible to other clients
  • Simple Client launched natively on arm64 and via Rosetta (arch -x86_64) to exercise the Intel slice — both run cleanly

🤖 Generated with Claude Code

- Remove VALID_ARCHS = "i386 x86_64" from both app projects: it
  filtered arm64 out of ARCHS, so builds were Intel-only
- Use $(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET) instead of 10.9, matching
  Syphon-Framework; targeting 10.9 no longer builds on current Xcode
  (libarclite was removed in Xcode 14.3)
- Add LD_RUNPATH_SEARCH_PATHS = @loader_path/../Frameworks to the app
  targets: current Syphon-Framework uses an @rpath install name, and
  without a runpath the apps crash at launch (no LC_RPATH's found)
- Bump the Syphon-Framework submodule to current master

Fixes Syphon#7

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@eighteight

eighteight commented Jul 12, 2026

Copy link
Copy Markdown
Author

Added a follow-up commit for Simple Client: rebuilding with a modern SDK broke the toolbar — NSToolbarItem no longer derives its size from a custom view's nib frame, so the view-based items (server popup, size/FPS status box) collapsed to zero width and vanished into the overflow menu, and the window also picked up the compact unified toolbar style. The commit pins the item views to their nib sizes with explicit constraints, opts the window into NSWindowToolbarStyleExpanded, and titles the server menu's overflow representation. Verified on macOS 26 / Xcode 26.6: both toolbar items render inline as before, server list populates, and the status box shows live size/FPS from a running Simple Server.

🤖 Generated with Claude Code

@eighteight eighteight force-pushed the universal-binaries branch from 2b624d9 to 2ae2344 Compare July 12, 2026 21:57
Two regressions appear when the app is rebuilt with a macOS 11+ SDK:

- NSToolbarItem no longer derives its size from a custom view's frame,
  so the view-based items (server menu, status box) collapse to zero
  size and vanish into the toolbar overflow menu. Pin the views to
  their nib sizes with explicit constraints, as old SDKs did
  implicitly.
- Windows default to the compact unified toolbar style; opt into the
  classic expanded layout to preserve the app's original appearance.

Also give the server menu's overflow representation a title.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vade

vade commented Jul 12, 2026

Copy link
Copy Markdown
Member

Awesome, thank you! Ill review this shortly! Much obliged!

@eighteight

Copy link
Copy Markdown
Author

One more commit: Simple Server now draws a rotating wheel again. The original app animated a bundled Quartz Composer composition; since the QC dependency was removed the renderer had been a pulsing clear color with a TODO: a more interesting animation. The new renderer draws a wheel in the old one's spirit — outer ring with three arrows, counter-rotating inner ring, central disc, orbiting dot — in OpenGL 3.2 Core. Verified running: publishes at ~60 fps, received and displayed by Simple Client. Fixes #4.

🤖 Generated with Claude Code

The original Simple Server rendered an animated dial from a bundled
Quartz Composer composition; when the QC dependency was removed the
renderer became a pulsing clear color, leaving the TODO for a more
interesting animation.

Draw a wheel in its spirit with OpenGL 3.2 Core: an outer ring
carrying three arrows, a counter-rotating inner ring, a central disc,
a slowly turning diameter and an orbiting dot. Animation time is
measured from renderer start, as GPU sin/cos degrade on huge absolute
timestamps.

Fixes Syphon#4

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vade

vade commented Jul 12, 2026

Copy link
Copy Markdown
Member

Ha - lets pause on that last one - keep the issue focused - at some point soon we're going to re-introduce the full Syphon icon render via https://fabric.graphics :)

Server menu at the left, status box beside it — as the app has always
looked.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@eighteight

Copy link
Copy Markdown
Author

Ha - lets pause on that last one - keep the issue focused - at some point soon we're going to re-introduce the full Syphon icon render via https://fabric.graphics :)

NP

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.

Apple Silicon version?

2 participants