我有一个使用Xcode 10.3构建的VoiceSampler.framework
我正在尝试在新项目的Xcode11中使用该框架。我已经成功添加了该框架,但是当我在AppDelegate中编写import VoiceSample
时,出现以下错误:
使用Swift 5.0.1编译的模块无法由Swift 5.1编译器导入:/Users/apple/Projects/CaptureAppSwift/VoiceSampler.framework/Modules/VoiceSampler.swiftmodule/arm64.swiftmodule
是否存在我可以在Xcode 11中进行调整的构建设置以使其起作用? 还有其他解决方法吗?
答案 0 :(得分:16)
此问题是由于您尝试嵌入使用其他编译器版本创建的预编译框架而引起的。
当前,仅当编译器版本匹配时,才能嵌入预编译的框架!用于编译项目的swift编译器版本必须与用于编译框架的版本相同。
希望此限制将在以后的Swift /编译器版本中删除... 有关更多信息,请参见此处的“模块稳定性”一章:https://swift.org/blog/abi-stability-and-more
正如其中一条评论中已经提到的,解决此问题的方法是升级或降级到适当的Xcode版本。 (或者,如果可能,请使用所需的编译器版本重新编译框架,然后为您的项目使用相同的编译器版本。)
答案 1 :(得分:5)
只需在框架的构建设置中将构建要分发的库选项设置为是。
答案 2 :(得分:1)
答案 3 :(得分:1)
正如我已经描述过的here,VoiceSample的提供者应使用BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
重建框架。在这种情况下,您将可以在所有Swift版本中使用VoiceSample。
答案 4 :(得分:1)
如果您使用React Native来构建您的应用,请转到Xcode并单击File
-> Workspace Settings...
->,如果您注意到有一个小箭头是DerivedData文件夹的路径,请单击然后实际文件夹将与其他与iOS相关的文件夹一起出现,请删除DerivedData
文件夹并重建您的App。现在一切都会顺利进行...稍后再谢谢
答案 5 :(得分:0)
就我而言,问题将出在迦太基。因此,我在 Finder 中从项目的根文件夹中删除了这些文件:
Cartfile.resolved, 迦太基/
然后开始carthage bootstrap --platform iOS
(因为我不需要更新迦太基)。
但是,如果您需要更新迦太基,则无需删除文件。仅编写命令carthage update --platform iOS
可解决此问题。
答案 6 :(得分:0)
您需要在框架的构建设置中将“构建分发库”选项设置为“是”,否则swift编译器不会生成必需的 .swiftinterface 文件,这是将来编译器能够使用的关键加载旧库。
这最终在您的 project.pbxproj 文件中显示为:
BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
设置此标志后,我使用Xcode 11.0(swift 5.1)编译的框架可以使用Xcode 11.2(swift 5.1.2)进行编译,一切似乎都正常运行。
答案 7 :(得分:0)
以下命令解决了编译器错误
carthage bootstrap --platform ios
brew bundle
pod repo update