【问题标题】:Xcode 8 Beta 3 Use Legacy Swift issueXcode 8 Beta 3 使用旧版 Swift 问题
【发布时间】:2016-11-21 14:45:03
【问题描述】:

我在 Xcode 8 Beta 3 中有一个 Objective-C 项目。自更新以来,每当我尝试构建时,都会收到以下错误:

需要为使用 Swift 的目标正确配置“使用旧版 Swift 语言版本”(SWIFT_VERSION)。使用 [Edit > Convert > To Current Swift Syntax...] 菜单选择 Swift 版本或使用 Build Settings 编辑器直接配置构建设置。

有人遇到过吗?因为它是一个 Objective-C 项目,所以没有构建设置来配置 Swift。我还确保没有任何项目依赖项或 CocoaPods 使用 Swift。我唯一的解决方案是使用 Beta 2。有什么想法可以解决这个问题吗?

我还应该提到我正在运行 OSX 10.12 Beta 2。

【问题讨论】:

  • 我也有这个问题...

标签: swift xcode8 xcode8-beta3


【解决方案1】:

如果您正在使用 CocoaPods 并希望在每次执行 pod install 时自动修复它,那么您可以将这些行添加到 Podfile 的末尾:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.0'
        end
    end
end

编辑:如果您使用 CocoaPods v1.1.1 或更高版本,此问题现已修复。 不要忘记从您的主要项目目标中删除 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES 设置。

【讨论】:

  • 如果您暂时尝试在代码库中使用 2.3,请使用 2.3 而不是 3.0 很好的解决方案!这有效地使"Use Legacy Swift Language Version" 变为No(或者如果您将其更改为2.3 它是Yes)。不过,此选项的好处是每次您pod install 它都会自动设置该设置!惊人的。我看到SWIFT_VERSION 也被设置在 Obj-C 项目上。我假设没有任何不利影响?
  • 这很好,但令人不安的是,如果没有 StackOverflow 的 Ruby 专家,成千上万的项目都是 SOL。我在每个模块和 Pod 项目中使用 Build Settings 手动将 Xcode 设置 SWIFT_VERSION 更改为 2.3,但它不起作用,但确实如此。意思是隐藏的令人不安的魔法。我讨厌那样。
  • 我真的登录只是为了给你这个道具
  • 我有一个 Obj-C 项目,其中包含 Charts(Swift 中)、AfNetworking 和其他一些 Obj-C pod。我在我的 pod 文件中使用了上面的脚本。所有与 swift 相关的错误/警告都消失了,但现在我的项目找不到 AFNetwoking 框架。
  • @Mr.Bista 经批准的解决方案stackoverflow.com/a/38597681/2854405 使其可以在 Xcode 设置中运行。但是您可能必须在每次执行pod install / update 时对每个 Pod 存储库执行此操作。这个解决方案让事情变得更快。你现在也可以更新你的 Cocoapods 版本:它应该也能解决这个问题。
【解决方案2】:

我刚刚找到了修复它的方法。

进入项目或库的 Build 设置,将 Swift Compiler Version 属性“Use Legacy Swift Language Version”从 Unspecified 设置为 Yes 或 NO。

【讨论】:

  • 我在我的 Objective-C 项目中没有看到这个选项
  • 你的 Obj-C 项目中有 Swift 项目库吗?
  • 如果您使用的是 swift 和 cocoapods,cocoapods 中的上述命令可以有效地做到这一点。如果您不想每次pod install 都更改此设置,我建议您使用上面的@Tulleb 答案。
  • 现在我的错误是 Swift Compiler Error in a self class
  • 此选项不再可用。
【解决方案3】:

我已经忽略了这个问题有一段时间了,同时也在做其他事情——我终于找到了解决问题的方法。

由于我的项目是 Objective-C,我想可能我正在使用的 Pod 之一使用的是 Swift,我检查了每个 Pod,但没有一个。

最终的解决方案是我的核心数据模型被设置为在 Swift 中生成代码,即使我已经在 File > New > NSManagedObjectSubclass 菜单中手动生成它们。我所要做的就是将它切换到 Objective-C。

【讨论】:

  • 你是怎么找到这个的? Xcode 对此只字未提。你救了我。
  • 确实是我的解决方案和我的救星。谢谢!愚蠢的是,当整个应用程序都是客观 c 时,Apple 如何使 Coredata 模型自动“Swifty”......
【解决方案4】:

这个问题在 Xcode-8.1 中也可见。当我们添加新的目标(如扩展或小部件)时,第三方库在 cocopods 的帮助下集成到新目标中。在 Pod 安装 之后。我们可能会遇到与上述相同的错误。

将每个库构建设置中的 Use Legacy Swift Language Version 更改为

【讨论】:

  • 在我的情况下,将 Use Legacy Swift Language Version 设置为 Yes 解决了这个问题。
  • 确保为每个有此问题的库设置是或否..在我的情况下没有工作
  • 这对我有用。请确保您也对测试目标执行相同操作
  • @zizutg :- 我们必须交叉检查所有目标。感谢您再次指出。
【解决方案5】:

如果您使用的是 Xcode 8 或更高版本

  1. 转到构建设置
  2. 查找使用旧版 swift 语言版本
  3. 是 - Swift 2.3
  4. 否 - Swift 3.0

【讨论】:

    【解决方案6】:

    在 podfile 末尾添加以下代码。

    post_install do |installer|
      installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
          config.build_settings['SWIFT_VERSION'] = '3.0'
        end
      end
    end
    

    【讨论】:

      【解决方案7】:

      我正在做一个混合了 Objective-c 和 swift 代码的项目 我以前使用 swift 2.3 版,升级到 swift 3 后,我无法构建项目。 Xcode 抱怨上述错误消息。

      显然,我的 project.pbxproj 文件中仍然指定了一些过时的 Swift 版本。指定了swift 3.0.1:

      SWIFT_VERSION = 3.0.1;
      

      然而,我已经安装了 3.0.2:

      $ xcrun swift -version
      Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
      Target: x86_64-apple-macosx10.9
      

      Sooo,我通过将 project-pbxproj 文件中的 Swift 版本更改为:

      SWIFT_VERSION = 3.0;
      

      似乎补丁级别的版本说明符过于具体。

      【讨论】:

        【解决方案8】:

        就我而言,我只需执行以下操作

        选择项目目标=>转到构建设置=>搜索“Swift Language Version”=>为当前的 Swift 版本赋值

        就是这样,它解决了我的问题

        【讨论】:

          【解决方案9】:

          我遇到了同样的错误。我尝试搜索“使用旧版 Swift 语言版本”,但没有找到。 我使用的是 Xcode 8.3.3 经过太多的冲浪和工作后,我找到了这个解决方案,这对我有用。

          Here are the steps.
          1=> select your target from Xcode
          2=> go to build setting
          3=> search for "Swift Language Version"
          4=> change it to swift 3. (or accordingly.)
          

          【讨论】:

            【解决方案10】:

            如果您在项目或任何 swift 第三方中使用旧版本的 swift,请将“使用旧版 Swift 语言版本”设置为“是”。如果您的项目已更新到当前的 swift 版本,则为“否”。 如果你没有配置你的 swift 版本,每次更新和安装后,Pod 框架都需要指定这个。

            【讨论】:

              【解决方案11】:

              我实际上必须搜索“Legacy Swift”才能将其从未指定更改为“是”当我简单地向下滚动到上述部分时,我无法更改它。我希望这会对某人有所帮助。

              【讨论】:

                【解决方案12】:

                我的项目是用 Swift 编写的。我在fastlane 上遇到了同样的错误。发生的事情是我的 Xcode 自动更新,所以我不得不将我的项目更新到 Swift 3.0。有很多错误。修复和调试花费了太多时间,而且当时不值得,所以我决定安装旧版本的 Xcode。将我的代码恢复到 2.3。然后fastlane beta 不再工作了。原来,我需要将命令行工具设置为 7.3。

                【讨论】:

                  【解决方案13】:

                  我遇到了同样的问题并通过执行以下操作解决了它:

                  在项目 > 构建设置中:

                  Always Embed Swift Standard Libraries = $(inherited) Use Legacy Swift Language Version = YES

                  然后在我的 Podfile 中:

                  config.build_settings['SWIFT_VERSION'] = '3.0'

                  使用这三个设置消除了所有警告并允许我正确编译。

                  按照here 的建议,最隐蔽且实际取得进展的是将 Podfile 中的 SWIFT_VERSION 从 3 更改为 3.0。

                  【讨论】:

                    【解决方案14】:

                    从 XCode 8 开始,您可以使用 swift 2.3,即使 XCode 8 使用 swift 3.x 作为默认 swift 版本。要使用 Swift 2.3,只需在 Build Setting 中将 Use Legacy Swift Language Version 标记为 YES,然后 XCode 将为该项目目标使用 Swift 2.3。

                    【讨论】:

                      【解决方案15】:

                      在尝试复杂的解决方案之前,如果您是 Cocoapods 新手并且遇到此问题,则需要进行以下基本检查。

                      您可能需要:

                      • 再次打开您的 Podfile
                      • 检查平台行没有用“#”注释掉。它最终应该看起来像这样:

                      platform :ios, '10.1' # Put the right version and no #platform here use_frameworks! # For swift pod "MyPod" # Your mean pod :)

                      • 保存您的 Podfile,关闭 Xcode,然后再次运行 pod install
                      • 打开您的 project.xcworkspace

                      也许就是这样。

                      如果没有,你可以去上面;-)

                      【讨论】:

                        【解决方案16】:

                        更新到 xcode 8.3.2 后我遇到了同样的问题,但“使用旧版 Swift 语言”选项消失了。这似乎是现在改变的选项:

                        将此修复程序与 Alamofire 和其他库一起使用,一切正常。

                        【讨论】:

                          【解决方案17】:

                          为项目和目标转到项目构建设置,执行以下两个操作。

                          ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
                          And
                          Swift Compiler - Version  = Swift 3
                          

                          更改为最新的Swift 3

                          错误已解决。

                          如果它解决了你的错误修复,请喜欢它。

                          【讨论】:

                            【解决方案18】:

                            在 Xcode 9 测试版中。转到项目设置,构建设置,搜索 Swift 语言版本。在 Xcode 9 中,您必须指定您使用的是 Swift 3.2 还是 Swift 4。

                            【讨论】:

                            • 我在 9.0b 中有一个项目,将项目和目标都设置为 Swift 4 继续产生错误,将两者都设置为 Swift 3.2 将其删除,现在将两者都设置回 Swift 4 很好,所以人们可能做对了所有事情,但仍然会出错。
                            【解决方案19】:

                            如果你把ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES改成NO还是不行,那是xcode的问题,不是你的问题。执行以下步骤:

                            1.将警告目标上的ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES属性更改为YES

                            2.然后它会在左侧栏显示警告,建议您更改为 swift 3.0

                            3.然后改回NO。重新编译项目,xcode终于检测到你改成NO了!

                            在这种情况下问题解决了!

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2016-10-20
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多