xcframework 不包含内部框架

cas*_*art 5 frameworks xcodebuild

我正在尝试为.xcframework我正在使用的一些第三方库创建一个文件。按照https://appspector.com/blog/xcframeworks的说明,我

  1. 创建特定于平台的framework文件:
# 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
Run Code Online (Sandbox Code Playgroud)

在这一点上,我已经得到了两个带有.swiftmodule文件的框架;一切看起来都不错。框架附带.swiftinterface文件,但我认为没关系,因为这些是 objc 项目。然后我

  1. 将各个frameworks组合成一个xcframework文件:
# 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
Run Code Online (Sandbox Code Playgroud)

在这里,xcodebuild不会失败,但会发出一个奇怪的错误:

No 'swiftinterface' files found within '/Users/user/git/ReactiveObjC/output/xcf/ios.xcarchive/Products/Products/Library/TestFramework.framework/Modules/TestFramework.swiftmodule'.
Run Code Online (Sandbox Code Playgroud)

至关重要的是,该.xcframework包不包含文件中指定的单个frameworks文件夹Info.plist。显然,当我尝试xcframework在这种状态下链接到 时,会收到一堆“缺少符号”链接器错误。

为什么是这样?我必须做什么才能完全xcodebuild创建xcframework

注意:手动创建文件夹现在似乎可行,但这感觉不对并且很脆弱——Apple 可以xcodebuild随时改变工作方式。

cas*_*art 8

事实证明,添加BUILD_LIBRARY_FOR_DISTRIBUTION = YESxcodebuild命令的末尾是不够的/无法生成具有所需swiftinterface文件的框架。我必须进入实际项目的设置并手动设置BUILD_LIBRARY_FOR_DISTRIBUTIONYES,就像这个答案所暗示的那样。在我获得带有swiftinterface文件的框架后,我就可以毫无问题地创建xcframework文件了xcodebuild

  • 您使用了错误的密钥,请尝试将“BUILD_LIBRARIES_FOR_DISTRIBUTION=YES”(注意复数)添加到“xcodebuild” (4认同)
  • FWIW:检查 Xcode 中的文档栏,他们将“BUILD_LIBRARY_FOR_DISTRIBUTION”列为正确的键。 (2认同)