用 swift 4.0 编译的模块无法在 swift 3.1 中导入

Module compiled with swift 4.0 cannot be imported in swift 3.1

显然我已经在 Xcode 9 beta 中构建了我的项目,但现在我只收到错误

Module compiled with swift 4.0 cannot be imported in swift 3.1

当我运行项目在Xcode 8.我的模块是Alamofire。我已尝试重新启动 Xcode 但没有任何反应 有什么解决此问题的想法吗?

您有两个选择:

Clean 项目,然后尝试 re-build 你的解决方案,看看它是否有效。

如果它不起作用并且您仍然收到相同的错误消息,请执行以下步骤,它应该对您有用:

  1. 打开您的 podfile 并删除 Alamofire
  2. 运行 pod update
  3. 重新添加 Alamofire 到您的 podfile
  4. 运行 pod update
  5. 完成后,clean 您的项目和 运行 它

同样的问题,但使用的是 Carthage。答案如下:

  • rm -rf ~/Library/Caches/org.carthage.CarthageKit/DerivedData
  • 删除项目的 Carthage 文件夹
  • 更新迦太基:carthage update --platform iOS

瞧瞧!

我遇到了同样的问题,清理构建文件夹有帮助:

Command+Option+Shift+K

Product -> Option+Clean

只删除派生数据对我有用,无需再次安装 Pod

我在一个由 Carthage 管理依赖的项目中遇到了这个问题。在我的例子中,我没有在 xcode 中设置命令行工具(输入 xcodebuild -version,你会知道你是否设置它),所以第一步是去 XCode --> Preference --> Locations 然后 select xcode 你想作为命令行工具。然后你可以按照@Domsware 上面提到的步骤重建你将要使用的所有框架。

============================================= ==

同样的问题,但使用的是 Carthage。这是答案:

rm -rf ~/Library/Caches/org.carthage.CarthageKit/DerivedData
delete the Carthage folder for the project
Update Carthage: carthage update --platform iOS

============================================= ==

然后不要忘记删除 'Linked frameworks and libraries' 下的旧链接,并将项目下 /Carthage 文件夹中的所有框架拖到 'Linked frameworks and libraries'。

然后瞧!

对于那些使用 CocoaPods 的人,我怀疑(免责声明:我在 CocoaPods 是依赖项管理器的项目中没有遇到这个问题)解决方案是 运行 在终端中执行以下命令:

$ pod deintegrate
$ pod clean
$ pod install

您可能需要为 CocoaPod 安装 'deintegrate' 和 'clean' 工具的位置

$ sudo gem install cocoapods-deintegrate cocoapods-clean

更多详情见post How to remove CocoaPods from a project?

在您的 pod 文件末尾添加以下行:

post_install do |installer|
    print "Setting the default SWIFT_VERSION to 4.0\n"
    installer.pods_project.build_configurations.each do |config|
        config.build_settings['SWIFT_VERSION'] = '4.0'
    end

    installer.pods_project.targets.each do |target|
        if ['SomeTarget-iOS', 'SomeTarget-watchOS'].include? "#{target}"
            print "Setting #{target}'s SWIFT_VERSION to 3.0\n"
            target.build_configurations.each do |config|
                config.build_settings['SWIFT_VERSION'] = '3.0'
            end
        else
            print "Setting #{target}'s SWIFT_VERSION to Undefined (Xcode will automatically resolve)\n"
            target.build_configurations.each do |config|
                config.build_settings.delete('SWIFT_VERSION')
            end
        end
    end
end