Skip to content

feat(xcframework): add Mac Catalyst + x86_64 simulator slices - #89

Merged
Alex-Wengg merged 1 commit into
mainfrom
feat/xcframework-catalyst
Sep 21, 2026
Merged

Alex-Wengg merged 1 commit into
mainfrom
feat/xcframework-catalyst

Conversation

@Alex-Wengg

Copy link
Copy Markdown
Member

FluidAudio consumers building for Mac Catalyst cannot link: the xcframework only ships ios-arm64, ios-arm64-simulator and macos-arm64_x86_64, and xcodebuild will not satisfy a Catalyst build from the native macOS slice (reported by an Action Phrase developer against FluidAudio 0.15.x).

  • Build aarch64-apple-ios-macabi + x86_64-apple-ios-macabi, lipo into one universal archive, add as a fourth slice (ios-arm64_x86_64-maccatalyst).
  • Also build x86_64-apple-ios so the simulator slice is universal (arm64 + x86_64).
  • Add the three targets to the workflow's rustup list.

Verified locally that the Catalyst archives carry LC_BUILD_VERSION platform 6, export the nemo_* FFI, and a -target arm64-apple-ios17.0-macabi C program links and returns correct ITN/TN output. xcodebuild -create-xcframework runs here in CI (path filter covers the script); check the artifact's Info.plist for the maccatalyst slice.

Follow-up: tag v0.3.1, then bump URL + checksum in FluidAudio's Package.swift and Package@swift-6.2.swift.

FluidAudio consumers building for Mac Catalyst fail to link because the
xcframework only ships ios-arm64, ios-arm64-simulator and
macos-arm64_x86_64; xcodebuild refuses to satisfy a Catalyst build from
the native macOS slice (reported by an Action Phrase developer against
FluidAudio v0.15.x, which links NemoTextProcessing unconditionally on
toolchains < 6.2).

Build the two tier-2 Rust targets aarch64-apple-ios-macabi and
x86_64-apple-ios-macabi, lipo them into one universal archive and add it
as a fourth slice (ios-arm64_x86_64-maccatalyst). While here, add
x86_64-apple-ios so the simulator slice is universal too (Intel Macs
and Rosetta simulators were unsupported).

Verified locally: the Catalyst archives carry LC_BUILD_VERSION
platform 6 (arm64 minos 14.0, x86_64 minos 13.1), export the nemo_*
FFI, and a C program compiled with -target arm64-apple-ios17.0-macabi
links against the universal archive and returns correct ITN/TN output.
xcodebuild -create-xcframework itself runs on CI (macos-latest); the
workflow's pull_request path filter covers this script.
@Alex-Wengg
Alex-Wengg merged commit 46ebddc into main Sep 21, 2026
8 checks passed
@Alex-Wengg
Alex-Wengg deleted the feat/xcframework-catalyst branch September 21, 2026 18:49
Alex-Wengg added a commit to FluidInference/FluidAudio that referenced this pull request Sep 21, 2026
Mac Catalyst apps cannot link FluidAudio 0.15.6–0.15.8: the
text-processing-rs v0.3.0 xcframework has no Catalyst slice (reported by
an Action Phrase developer; Catalyst worked before the binary target,
see #279).

- Bump `NemoTextProcessing` to [text-processing-rs
v0.3.1](https://github.com/FluidInference/text-processing-rs/releases/tag/v0.3.1),
which adds `ios-arm64_x86_64-maccatalyst` and makes the simulator slice
universal (FluidInference/text-processing-rs#89).
- Both `Package.swift` and `Package@swift-6.2.swift` updated in
lockstep; checksum verified against the release zip.
- PostProcessing.md lists the shipped slices and the affected versions.

Also picks up v0.3.1's namespaced headers (#87),
`normalize_sentence_lang` (#84) and English spoken-fraction ITN (#85).
No Swift source changes.
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.

1 participant