【问题标题】:How to build Swift 3 project on Xcode 9?如何在 Xcode 9 上构建 Swift 3 项目?
【发布时间】:2017-11-07 10:42:02
【问题描述】:

Xcode 9 Release Notes 表示支持 Swift 3 编译:

一个编译器适用于 Swift 4 和 Swift 3,Swift 4 和 Swift 3 目标可以在同一个项目中一起编译。

我已经安装了 Xcode 9 测试版。 但是当我按下 Build 时,它显示了一堆错误。在 Xcode 9 中使用 Swift 3 时是否需要做一些特殊的准备工作?

更新:

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

【问题讨论】:

  • 你遇到了什么错误?通常,当您在 Xcode 9 beta 中打开使用 Xcode 8.3.2 创建的项目时,它会检测到正确版本的 Swift (Swift 3.x) 并正确编译。无论如何,你安装了 Xcode 8.3.x 吗?
  • 对于任何路过的人,您仍然可以在developer.apple.com/download/more 下载 Xcode 9(但它可能只对付费开发者可用,不确定)

标签: ios xcode swift3 swift4 xcode9


【解决方案1】:

Xcode 10.1 和 Swift 4.2 更新

Swift 3、4 和 4.2 目标可以共存并链接在一起。

您决定何时以及是否要基于每个目标进行迁移 当它对您的项目有意义时。虽然迁移到 Swift 4.2 是 绝对值得鼓励,这不是一个全有或全无的过程,就像 Swift 3 一样, 4 和 4.2 目标可以共存并链接在一起。

不同的cocoapod和不同的项目版本也可以共存。

您希望拥有与您的项目版本不同的 cocoapod 版本,那么您应该在您的 pod 文件末尾进行以下更改:

post_install do |installer|
    print "Setting the default SWIFT_VERSION to 4.2\n"
    installer.pods_project.build_configurations.each do |config|
        config.build_settings['SWIFT_VERSION'] = '4.2'
    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

有时即使在您运行 pod update 您的 xcode 后强制更新您的 cocoapod 的项目版本,然后在这种情况下选择 cocoapod pod 项目并在构建设置中更改 swift 版本。

【讨论】:

    【解决方案2】:

    我有同样的问题 - (我安装了 swift 版本为 3x 的 pod,而我的项目的 swift 版本是 Swift 4。所以我遇到了很多编译器错误。后来我将 Swift 版本从 4 更改为 3.2 并尝试构建项目,我又遇到了编译器错误。我认为这是因为我在项目使用 Swift 4 时运行了 pod install。)

    • 首先您需要从构建设置中更改“Swift 语言版本”。
    • 如果您安装了任何 pod,那么仅更改“Swift 语言版本”将无济于事。您可能需要为项目运行 pod install。

    【讨论】:

      【解决方案3】:

      以上所有答案都回答了错误的问题。使用 Xcode 9 时,您正在使用 Swift 4 编译器(即使您使用它来编译 Swift 3 代码)来解决此问题,请使用适当的编译器/Xcode 重新编译。

      如果您尝试通过命令行执行此操作,您可以使用sudo xcode-select -switch 在 xcode 版本之间切换。祝你好运!

      【讨论】:

        【解决方案4】:

        Xcode 9 需要使用 Swift 3.2 或更高版本构建的框架。转到 https://github.com/emaloney/CleanroomLogger 并单击下载 ZIP。在 Xcode 9 中打开 xcodeproj。按 ⌘B。 CleanroomLogger.framework 从红色变为黑色。将框架拖到您的项目中。查看相关问题:Realm issue with Swift 3.1

        【讨论】:

        • 这不会进行通用构建。如果你像这样构建框架,它只适用于 iOS 设备,(你有通用的 iOS 设备构建目标),它不适用于模拟器。
        【解决方案5】:

        选择目标,转到Build Settings > Swift Language Version:

        【讨论】:

        • 这没有帮助 =((
        • Swift 3.2 到底是什么时候出现的?它是 Xcode 8.3.3 附带的吗?我在swift.org/download/#releases没有看到它
        • 是的,@ChrisPrince; Swift 3.2 在 Xcode 8.3 中出现。有趣的是,Swift.org 上没有显示 3.2。奇怪...
        • Swift 3.2 是连接到 iOS 11 SDK 的 Swift 3.1。
        • @JayprakashDubey 在旧系统上使用旧版本的 Xcode 或手动迁移代码。
        猜你喜欢
        • 2017-11-30
        • 1970-01-01
        • 2018-04-24
        • 2020-02-08
        • 1970-01-01
        • 2017-02-01
        • 2019-06-10
        • 2012-07-11
        相关资源
        最近更新 更多