我正在尝试为我正在使用的一些第三方库创建一个.xcframework
文件。按照https://appspector.com/blog/xcframeworks的指示,我
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
此时,我已经得到了两个带有.swiftmodule
文件的框架;一切看起来都很好。这些框架不附带.swiftinterface
文件,但我认为这是可以的,因为这些都是objc项目。然后,我
framework
组合成一个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
在这里,xcodebuild
没有失败,但它发出了一个奇怪的错误:
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
,我必须做些什么?
注意:手动创建文件夹目前看来是可行的,但这感觉不对,而且很脆弱--苹果可以随时改变xcodebuild
的工作方式。
发布于 2019-11-11 19:14:08
事实证明,将BUILD_LIBRARY_FOR_DISTRIBUTION = YES
添加到xcodebuild
命令的末尾是不够的/不足以生成具有所需的swiftinterface
文件的框架。我必须进入实际项目的设置,并手动将BUILD_LIBRARY_FOR_DISTRIBUTION
设置为YES
,就像this answer建议的那样。在获得了带有swiftinterface
文件的框架之后,我就能够使用xcodebuild
创建xcframework
文件了,没有任何问题。
发布于 2021-09-10 17:40:53
从Cocoapods转换为XCFramework
对于我的场景,我尝试从cocoapods生成的FAT/lipo框架构建XCFrameworks。
我把这个添加到我的文件末尾:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
end
end
end
这确保了框架的正确编译,并且我能够运行普通的xcodebuild -create-xcframework ...
命令来生成XCFramework。
注意:我也在使用cocoapods-binary
插件预构建所有的豆荚框架。
发布于 2022-06-13 10:36:57
我也面临着同样的问题。原来Xcode 13的构建设置覆盖了命令行中的SKIP_INSTALL=NO标志。一旦我在项目的构建设置中将此字段设置为NO (并确保在将build For分发设置为YES)时,我成功地创建了xcframework文件。
https://stackoverflow.com/questions/58805812
复制相似问题