关于xcodebuild:xcframework不包含内部框架

xcframework does not contain internal frameworks

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

  • 创建特定于平台的framework文件:
  • 1
    2
    3
    4
    5
    # 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

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

  • 合并各个framework形成一个单独的xcframework文件:
  • 1
    2
    # 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

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

    1
    No 'swiftinterface' files found within '/Users/user/git/ReactiveObjC/output/xcf/ios.xcarchive/Products/Products/Library/TestFramework.framework/Modules/TestFramework.swiftmodule'.

    重要的是,.xcframework程序包不包含在Info.plist文件中指定的各个framework或文件夹。显然,当我尝试以这种状态链接到xcframework时,出现了一系列"缺少符号"链接器错误。

    这是为什么?要使xcodebuild完全创建xcframework,我该怎么做?

    注意:手动创建文件夹目前似乎可以使用,但是这感觉很不正确,而且很脆弱-Apple可以随时更改xcodebuild的工作方式。


    结果表明,在xcodebuild命令的末尾添加BUILD_LIBRARY_FOR_DISTRIBUTION = YES是不够的/不能使用所需的swiftinterface文件生成框架。我必须进入实际项目的设置,然后手动将BUILD_LIBRARY_FOR_DISTRIBUTION设置为YES,如该答案所示。在获得带有swiftinterface文件的框架之后,我便可以使用xcodebuild创建xcframework文件,而不会出现任何问题。