Add optional XCFramework distribution tooling - #40
Open
Anywhere-Music-Player wants to merge 1 commit into
Open
Conversation
## Summary Adds an isolated, opt-in build path for producing: - `AudioKitEX.xcframework` - `CAudioKitEX.xcframework` The generated frameworks support iOS devices, iOS Simulator, and native macOS. Swift Package Manager remains the default integration path, and this change does not add or publish prebuilt binaries. ## Motivation Binary packaging for AudioKitEX must coordinate the Swift AudioKitEX module, the C and C++ CAudioKitEX module, and a compatible AudioKit binary. An archive can succeed while still containing missing public headers or symbols, incompatible deployment targets or architectures, unstable module metadata, mismatched dSYMs, or linkage failures that only appear in a consumer. Without a shared recipe, every downstream binary user must independently maintain and validate this integration. ## Dependency contract AudioKit is consumed as an explicit external XCFramework input instead of being copied into or bundled with the AudioKitEX output. Before archiving, the builder validates: - The required AudioKit release - Deployment-target compatibility - Selected macOS architectures - Binary checksums This keeps the AudioKit and AudioKitEX repositories and artifacts independent. ## Included tooling - Framework targets for the existing `Sources/AudioKitEX` and `Sources/CAudioKitEX` trees - Public CAudioKitEX header packaging - A command-line builder and Finder-friendly `build.command` wrapper - Configurable deployment targets - Optional Intel Mac support - Stable Swift interfaces and matching dSYMs - Exported-symbol checks and build provenance - Atomic replacement of both XCFrameworks ## Safety and validation The builder: - Requires a clean checkout based on an AudioKitEX release tag - Validates architectures, deployment targets, dynamic linkage, exported C symbols, module interfaces, headers, and dSYM UUIDs - Verifies linkage between AudioKitEX, CAudioKitEX, and AudioKit - Runs a clean binary-only smoke consumer that imports AudioKit and AudioKitEX and creates a `DryWetMixer` for iOS Simulator and every selected macOS architecture ## Project impact - No changes to AudioKitEX production sources or public Swift API - No changes to `Package.swift` behavior - No changes to the existing SwiftPM workflow or default CI path - All tooling is isolated under `XCFramework` and is fully opt-in - Binary hosting and release policy remain downstream decisions This is the companion build path to the AudioKit XCFramework tooling while keeping both distributions independent.
Anywhere-Music-Player
requested review from
aure and
wtholliday
as code owners
August 20, 2026 23:02
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds an isolated, opt-in build path for producing:
AudioKitEX.xcframeworkCAudioKitEX.xcframeworkThe generated frameworks support iOS devices, iOS Simulator, and native macOS. Swift Package Manager remains the default integration path, and this change does not add or publish prebuilt binaries.
Motivation
Binary packaging for AudioKitEX must coordinate the Swift AudioKitEX module, the C and C++ CAudioKitEX module, and a compatible AudioKit binary.
An archive can succeed while still containing missing public headers or symbols, incompatible deployment targets or architectures, unstable module metadata, mismatched dSYMs, or linkage failures that only appear in a consumer. Without a shared recipe, every downstream binary user must independently maintain and validate this integration.
Dependency contract
AudioKit is consumed as an explicit external XCFramework input instead of being copied into or bundled with the AudioKitEX output.
Before archiving, the builder validates:
This keeps the AudioKit and AudioKitEX repositories and artifacts independent.
Included tooling
Sources/AudioKitEXandSources/CAudioKitEXtreesbuild.commandwrapperSafety and validation
The builder:
DryWetMixerfor iOS Simulator and every selected macOS architectureProject impact
Package.swiftbehaviorXCFrameworkand is fully opt-inThis is the companion build path to the AudioKit XCFramework tooling while keeping both distributions independent.