I am trying to create an .xcframework
file for a few third party libraries I'm using. Following the instructions from https://appspector.com/blog/xcframeworks, I
- Create platform-specific
framework
files:
# Archive for device
xcodebuild archive -scheme TestFramework -destination="iOS" -archivePath /tmp/xcf/ios.xcarchive -derivedDataPath /tmp/iphoneos -sdk iphoneos SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES
# Archive for simulator
xcodebuild archive -scheme TestFramework -destination="iOS Simulator" -archivePath /tmp/xcf/iossimulator.xcarchive -derivedDataPath /tmp/iphoneos -sdk iphonesimulator SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES
At this point, I've gotten two frameworks with .swiftmodule
files; everything looks good. The frameworks do not come with .swiftinterface
files, but I think that is alright as these are objc projects. Then, I
- Combine the individual
framework
s to form a single xcframework
file:
# Build xcframework with two archives
xcodebuild -create-xcframework -framework /tmp/xcf/ios.xcarchive/Products/Library/Frameworks/TestFramework.framework -framework /tmp/xcf/iossimulator.xcarchive/Products/Library/Frameworks/TestFramework.framework -output /tmp/xcf/TestFramework.xcframework
Here, xcodebuild
doesn't fail, but it emits a curious error:
No 'swiftinterface' files found within '/Users/user/git/ReactiveObjC/output/xcf/ios.xcarchive/Products/Products/Library/TestFramework.framework/Modules/TestFramework.swiftmodule'.
Crucially, the .xcframework
package does not contain the individual framework
s or folders specified in the Info.plist
file. Obviously, when I try to link to the xcframework
in this state, I get a bunch of "missing symbols" linker errors.
Why is this? What must I do to get xcodebuild
to create the xcframework
completely?
NB: Manually creating the folders seems to work for now, but this feels wrong and is brittle – Apple can change the way xcodebuild
works anytime.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…