When a static library is built with Xcode 26 (with deployment target set to iOS 13) and then linked into an app project compiled with Xcode 16, the build process fails with the following linker error:
Undefined symbols for architecture arm64:
"_swift_coroFrameAlloc"
This occurs even though both the static library and the app project have their deployment targets set to iOS 13.0. The static library works on Xcode 26, but fails to link on Xcode 16.
This issue shows up with certain Swift syntax. For example, in my case, using a property getter and setter caused the compiler to emit a reference to _swift_coroFrameAlloc, which in turn triggered the issue.
This issue prevents us from distributing pre-built static libraries compiled with Xcode 26 to teammates who are still using Xcode 16.
I’ve filed feedback for this issue (FB21130604).
Is there any way to work around it? For example, by adding specific Build Settings or something similar?
A demo project is available here: https://github.com/Naituw/SwiftLibraryDeploymentTargetIssue
The demo project includes:
- StaticLibraryProject: A simple Swift static library with property getter setter usage
- AppProject: An iOS app that links against the static library
- verify_compatibility.sh: An automated script to reproduce the issue
Method 1: Manual Build and Verification
- Open
StaticLibraryProject/StaticLibraryProject.xcodeprojin Xcode 26 - Build the StaticLibraryProject for iOS device (Release configuration)
- Locate the built
libStaticLibraryProject.ain the build products directory - Copy
libStaticLibraryProject.atoAppProject/AppProject/directory - Open
AppProject/AppProject.xcodeprojin Xcode 16 - Build the AppProject for iOS device
Method 2: Automated Script
- Edit
verify_compatibility.shto configure the paths to your Xcode installations:- Set
XCODE_26_PATHto your Xcode 26 installation path (e.g.,/Applications/Xcode.app) - Set
XCODE_16_PATHto your Xcode 16 installation path (e.g.,/Applications/Xcode16.app)
- Set
- Run the script:
./verify_compatibility.sh