Ios Xcode 9:无法在Swift 4.0中导入使用Swift 3.1编译的模块
在升级到Xcode 9之后,我尝试构建我的一个项目 我使用facebook登录pod。 FacebookLogin/LoginButton.swift中存在编译器错误Ios Xcode 9:无法在Swift 4.0中导入使用Swift 3.1编译的模块,ios,cocoapods,facebook-login,xcode9-beta,swift4,Ios,Cocoapods,Facebook Login,Xcode9 Beta,Swift4,在升级到Xcode 9之后,我尝试构建我的一个项目 我使用facebook登录pod。 FacebookLogin/LoginButton.swift中存在编译器错误 @testable import FacebookCore ❌ Module compiled with Swift 3.1 cannot be imported in Swift 4.0 在我的目标的构建设置中,Swift语言版本设置为Swift 3.2 我想我需要等待Facebook更新他们的pod?还是其他建议 谢谢 也
@testable import FacebookCore
❌ Module compiled with Swift 3.1 cannot be imported in Swift 4.0
在我的目标的构建设置中,Swift语言版本设置为Swift 3.2
我想我需要等待Facebook更新他们的pod?还是其他建议
谢谢 也许你可以在建造目标之前清理它。
它对我来说工作得很好。Xcode 9附带了一个Swift 4编译器,它可以理解Swift 3.2和Swift 4,甚至可以让你在这两个版本之间进行混合和匹配。不幸的是,不支持其他版本 即使您将语言设置为Swift 3.2,它也会使用Swift 4编译器。 如果您正在使用cocoapods,您可以将其添加到pod文件的末尾,以强制pods使用Swift 3.2或4.0:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '3.2'
end
end
end
或者,您可以暂时将pod中的文件直接放入项目中,直到FacebookLogin更新为Swift 3.2或4
注:根据Matt的反馈进行编辑我有
pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'
在我的项目和导入FBSDKLoginKit中,清理目标后,我没有任何问题
由于您正在使用的pod在swift中,是一个测试版pod,因此您可能会在swift 4编译器中遇到一些问题,您应该暂时使用pod的objective-c版本,执行“清理构建文件夹”并重新启动Xcode 9为我清除了错误。此外,该错误并未阻止应用程序在我的设备或模拟器上运行 这对我很管用
1.在Xcode 8中清理项目
2.在Xcode 9中构建或运行项目,转到Xcode DerivedData目录,然后删除其中的所有文件并重新编译项目。这对我有用
默认的DerivedData目录是:~/Library/Developer/Xcode/DerivedData 我在Xcode 9 Beta 3上遇到了同样的问题,它指向“Alamofire”,并尝试了几种不同的解决方案,我发现最简单的是
1. CMD+SHIFT+K to clean the build
2. Restart Xcode 9 <-- make sure you do this step, that's critical. `
1。CMD+SHIFT+K来清理构建
2.如果从Pod使用,请重新启动Xcode 9:
在pod文件中
comment facebook登录pod
吊舱安装
在pod文件中
取消对facebook登录pod的注释
吊舱安装
再次运行您的项目
更新:
该解决方案也在Swift 5和Xcode 11中进行了测试和工作
原件:
我想补充一点,如果您使用迦太基在Swift 3.2中编译模块,您应该转到终端并运行:
sudo xcode-select --switch /Applications/Xcode-beta.app/Contents/Developer
要使用Xcode 9命令行工具,您可以运行:
carthage update NameOfTheLibrary --platform iOS --no-use-binaries
这将使用您当前的命令行工具编译库,它可能有点慢,但现在项目应该可以构建了
注
要恢复并使用稳定的Xcode命令行工具,只需运行:
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
在我的例子中,实际的pod引用了一个静态zip,其中包含针对swift3.1的预构建二进制文件。
因此,唯一的解决方案是使用xcode 9的源代码重建框架
如果使用迦太基,打开终端并
carthage update --platform iOS --no-use-binaries
pod update
如果使用吊舱,打开终端,然后
carthage update --platform iOS --no-use-binaries
pod update
(如果在pod中不工作,也可以在pod文件中更改SWIFT_版本,例如:
config.build_settings['SWIFT_VERSION'] = '3.2'
)
之后强>
打开Xcode并使用
Command+Option+Shift+K
我在Xcode 9 GM上遇到了同样的问题,这解决了我的问题:
将其从项目中删除,并再次将其拖动到“嵌入式二进制文件”中。我在Xcode 9中清理了该项目,然后运行该应用程序,它就可以工作了 清除生成文件夹
Cmd + option + shift + K
你可以试试看。对我来说不起作用,仍然在寻找另一个解决方案。仅供参考-这有点过于激进,因为它强制所有吊舱都使用Swift 4.0。如果吊舱符合Swift 3,您可以安全地跳到Swift 3.2。跳到4.0很可能会导致许多POD出现编译器问题。我在使用Algolia框架时也遇到了同样的错误,并使用carthage和Xcode 9命令工具构建它,效果很好!感谢我使用迅捷JSON。谢谢使用AlamofireHi@xaviPedrals为我工作,我需要你的帮助。。。我正在尝试运行该项目“”,但收到错误“Swift 4.2.1编译器无法导入使用Swift 3.1编译的模块:/Users/aliapple/Desktop/SingTestByAhtazaz/Pods/AudioKit/iOS/AudioKit.framework/Modules/AudioKit.swiftmodule/arm64.swiftmodule”。你能在这方面帮助我吗?Hi@Mr.Ahtazaz该项目是2年前的,所以它可能是用Swift 3制作和编译的,首先该项目应该更新为Swift 4或5,然后尝试运行carthage命令carthage update nameoflibrary--platform iOS--no use binaries
来更新库,你应该没问题“清理生成文件夹“:要访问该选项,请打开“产品”菜单并使用选项键显示“清理生成文件夹”选项。请不要对多个问题给出相同的答案。发布一个好的答案,然后投票/标记以重复结束其他问题。如果问题不是重复的,请根据问题定制您的答案。请参阅@paper1111我在回答中解释了所有的内容,我使用的是迦太基,这是我的解决方案。迦太基更新版“我的框架”并没有削减它。我必须更新整个迦太基目录。花了很长时间,但成功了。这个解决方案对我也有效。为了确保在使用Command+Option+Shift+K清理构建文件夹后关闭并重新启动xcode。@SwiftDeveloperconfig.build\u设置
部分到哪里去了?我有一个类似的问题,即在pod中引用AudioKit。但是,您的解决方案引用了“框架”中的build_frameworks.sh。请添加更多详细信息。我找不到这样的文件。请尝试将pod文件指向较新的版本。使用最新xcode 9生成的版本-/无需更改生成脚本。谢谢你的提示。我必须更新