2016-07-27 62 views
5

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

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

回答

0

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

+0

我不耐烦地敲击迁移按钮,发现它是困难的,如果不是不可能的去迁移,因为你没有犯一个方便的最近时间.. –

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语言版本”错误。这可以通过将post_install步骤添加到您的Podfile(请参阅this GitHub issue)或更新至CocoaPods 1.1.0.beta.1或更高版本(gem install cocoapods --pre)来解决。

6

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

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 

我希望它会有所帮助。

+3

这看起来像和'结束'许多 – Cyrus

+0

这真的很有用。谢谢! – speedynomads

0

以下添加到您的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 
相关问题