首页 文章

Xcode 8 Beta 3使用Legacy Swift问题

提问于
浏览
196

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

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

有没有人遇到过这个?由于它是一个Objective-C项目,因此没有构建设置来配置Swift . 我还确保没有项目依赖项或CocoaPods使用Swift . 我唯一的解决方案是使用Beta 2.任何想法如何解决这个问题?

我还要提一下,我正在运行OSX 10.12 Beta 2 .

19 回答

  • 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 设置 .

  • 3

    我刚刚找到了解决问题的方法 .

    转到项目或库的Build设置,并将Swift Compiler Version属性“Use Legacy Swift Language Version”从Unspecified设置为Yes或NO .

    enter image description here

  • 1

    我暂时忽略了这个问题,并且在此期间只是处理其他问题 - 我终于找到了解决问题的方法 .

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

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

    screenshot

  • 2

    在Xcode-8.1中也可以看到此问题 . 当我们添加新的Target像Extension或Widget时,第三方库在cocopods的帮助下被整合到新的目标中 . Pod install 之后 . 我们可能面临与上述相同的错误 .

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

    不 .

    enter image description here

  • 4

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

    • 转到“构建设置”

    • 查找使用旧版swift语言版本

    • 是 - 斯威夫特2.3

    • 否 - Swift 3.0
      enter image description here

  • 5

    在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
    
  • 118

    我正在研究一个混合了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;
    

    似乎补丁级别版本说明符太具体了 .

  • 1

    在我的情况下,我做了以下事情

    选择项目目标=>转到构建设置=>搜索“Swift语言版本”=>给出值当前的Swift版本

    这就是它解决了我的问题

    Follow This Image

  • 4

    我得到了同样的错误 . 我试着搜索"Use Legacy Swift Language Version",但没找到 . I am using Xcode 8.3.3 冲浪太多并且解决了我找到了这个解决方案,这对我有用 .
    enter image description here

    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.)
    
  • 364

    如果您在项目中使用旧版本的swift或任何快速的第三方,请将“使用Legacy Swift语言版本”设置为“YES” . 如果你的项目推向当前的快速版本,那就“不” . 如果你没有配置你的swift版本,在每次更新和安装之后,Pod框架需要指定这个 .

  • 2

    我实际上不得不搜索“Legacy Swift”以便能够将其从未指定更改为“是”当我只是向下滚动到上述部分时,我无法更改它 . 我希望这会对某人有所帮助 .

  • 1

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

  • 1

    我遇到了同样的问题并通过以下方式解决了这个问题:

    在项目>构建设置中:

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

    然后在我的Podfile中:

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

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

    最晦涩的,实际上进行了编译的进展是将Podfile中的SWIFT_VERSION从3改为3.0,如建议here .

  • 33

    从XCode 8开始,你可以使用swift 2.3,即使XCode 8使用swift 3.x作为默认的swift版本 . 要使用swift 2.3,只需在Build中打开标志使用Legacy Swift语言版本为YES设置,然后XCode将使用Swift 2.3作为该项目目标 .

  • 9

    在尝试复杂的解决方案之前,如果您是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

    也许就是这样 .

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

  • 18

    更新到xcode 8.3.2后我遇到了同样的问题,但选项"Use Legacy Swift Language"已经消失了 . 这似乎是现在改变的选择:
    Swift Lang Version

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

  • 1

    转到项目的项目构建设置,目标做两个以下 .

    ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
    And
    Swift Compiler - Version  = Swift 3
    

    更改为最新 Swift 3 .

    错误已解决 .

    如果它已解决您的错误修复,请喜欢它 .

  • 1

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

  • 4

    如果您将 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES 更改为 NO 仍然无法正常工作,那是因为xcode问题,而不是您的问题 . 执行以下步骤:

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

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

    3.然后改回 NO . 重建项目,xcode终于检测到您对 NO 的更改!

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

相关问题