2016-09-16 52 views
5

我更新到Xcode 8并转换为最新的Swift 3.0语法。我的项目中有一些Cocoapods,有些是Swift 2.3(例如,一些较老的Pod需要Alamofire设置为v3.5,运行Swift 2.3)。如何用Swift 2.3和3.0编译模块?

我已经设置这些豆荚为使用传统的斯威夫特 - >是的,但建设时,我得到的错误:

Module complied with Swift 2.3 cannot be imported in Swift 3.0: /Users/....XSDK/XSDK.framework/swiftmodule/x86_64.swiftmodule 

我不使用迦太基(在其他问题中引用)。只有椰子树。

我是否需要将我的项目转换为使用Swift 2.3?或者我可以在我的项目中使用Swift 3.0,并仍然使用传统的Cocoapods?

+0

不幸的是,我也有这个问题。似乎你不能编译它,代码的所有者必须编译它并再次推出它。我试图安装的吊舱在网站上推出了一个,但还没有到可可豆荚。 – Dallas

+4

Swift还不是ABI稳定的,即它不是二进制兼容的。您不能将Swift 2.3中编写的框架与使用Swift 3的应用程序或其他框架(或任何其他版本的Swift,直到ABI稳定)混合使用。 – HAS

+0

@hegranes你有没有发现这个问题的任何解决方案? –

回答

0

有两个步骤可以让您的项目中使用传统cocoapods。

1)研究cocoapod并确保你正在安装cocoapod的正确版本,这可能不是最新的,或者可能在单独的分支上。

$pod 'Your Cocoapod', :git => 'https://github.com/.....', :branch => 'branch_name' 

2)在podfile中,设置Swift版本。您也可以在每个窗格的构建设置中手动执行此操作,但此代码会自动设置它。

post_install do |installer| 
    installer.pods_project.targets.each do |target| 
    target.build_configurations.each do |config| 
     config.build_settings['SWIFT_VERSION'] = '2.3' # or '3.0' 
     #config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'NO' 
    end 
    end 
end 
1

不幸的是,由于Swift不是ABI稳定的,你不能像这样组合豆荚。这是因为所有的swift pods(以及框架,dylibs,.a,.o等)需要引用的巨大的快速标准库一经编译。标准库依赖于语言级别,并且不能在单个应用程序中包含swift标准库的多个副本。

自从swift 3发布以来,这已经好几个月了。在这一点上,你可能会想要跳到3.如果你发现一个没有更新到3的pod,也许分叉它并更新它并提交一个pr。作者会爱你! :)