【问题标题】:Using Xcode8 with a swift 2.3 project that uses cocoapods将 Xcode8 与使用 cocoapods 的 swift 2.3 项目一起使用
【发布时间】:2016-07-27 16:32:38
【问题描述】:

我有一个项目,其中包含少量代码,我认为是 swift 2.3 它包含应用程序扩展,也是用 swift 2.3 编写的,并使用 2 个 Cocoapod:SwiftyJSONMMWormhole。下载 Xcode 8.3 beta 后,迁移器运行,我在 SwiftyJSON 中包含的一个主要 swift 文件中留下了近 100 个编译器错误。

基本上,我想知道在给定这些细节的情况下,我是否可以在 Xcode8 中工作。我很高兴将自己的代码更新为 swift3,但是我不控制 cocoapods(MMWormHole 在 Objective-C 中,所以我假设 Xcode 将其转换为它需要的任何版本的 Swift,因为它不会发出编译器错误)。我可以告诉 Xcode 全局使用 swift 2.3 吗?

【问题讨论】:

    标签: swift xcode cocoapods swift3


    【解决方案1】:

    您必须将Use Legacy Swift Language Version 设置为YES 才能在Xcode 8 中使用SWIFT 2.3 代码。然后将其添加到您的 Podfile 中,以使您的所有 pod 目标都确认相同。

    post_install do |installer| 
      installer.pods_project.targets.each do |target|
        target.build_configurations.each do |configuration|
          configuration.build_settings['SWIFT_VERSION'] = "2.3" 
        end 
      end 
    end
    

    希望对你有帮助。

    【讨论】:

    • 这真的很有用。谢谢!
    【解决方案2】:

    许多开源 Swift 项目都有 Swift 3 或 Swift 2.3 的分支(有关流行方法的详细信息,请参阅 this post)。我检查了 SwiftyJSON,它似乎有一个 Swift 3 的分支,所以你可以将你的应用程序转换为 Swift 3 并试一试。要使用它,请将 Podfile 中的 SwiftyJSON 条目更改为:

    pod 'SwiftyJSON', :git => 'https://github.com/SwiftyJSON/SwiftyJSON.git', :branch => 'swift3'
    

    每个 Xcode 8 测试版都由项目更新,因此它可能无法完全正常工作,但错误可能少于 100 个。

    注意:更新所有内容并修复编译器错误后,您可能会看到“使用旧版 Swift 语言版本”错误。这可以通过在您的 Podfile 中添加 post_install 步骤来解决(参见 this GitHub issue),或者通过更新到 CocoaPods 1.1.0.beta.1 或更高版本 (gem install cocoapods --pre)。

    【讨论】:

      【解决方案3】:

      根据我在启动工作区时的经验,SDK 应该会询问您是想将代码转换为 Swift 3 还是“稍后”再做。通过稍后选择,它不会将您的代码迁移到 swift 3。我必须警告您,尽管我经历了同样的事情,并且几乎不可能仅仅因为您想使用最新和最好的 Xcode 8 而向后工作。您'最终会遇到问题,例如当您准备推送到应用商店时,iTunesConnect 将不接受任何低于版本 10 的文件。此外,如果其他开发人员继承您的代码,他们将遇到问题,如果他们正在使用早期版本的 Xcode。

      【讨论】:

      • 我不耐烦地点击了迁移按钮,发现即使不是不可能,也很难取消迁移,因为您最近没有提交方便..
      【解决方案4】:

      将以下内容添加到 Podfile 的末尾,然后运行 ​​pod install

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-21
        • 2014-07-30
        相关资源
        最近更新 更多