编译问题:Swift版本在两个软件包之间不兼容

时间:2017-03-01 10:29:40

标签: ios swift xcode

我必须编辑一个由不在项目中的人开发的iOS应用程序。

他给了我应用程序的源代码但我无法编译它。我正在使用xcode。

iOS项目包含2个包:

  • MAIN:包含用Swift 3.0.1编写的应用程序
  • PODS:包含用swift 2.3
  • 编写的应用程序使用的库

我更改了" Build设置" MAIN.xcodeproj: 在" Swift编译器 - 版本"我更改了#34;使用Legacy Swift语言版本"到"不" 在PODS.xcodeproj中,我将此设置设置为"是"

当我尝试构建项目时,我遇到以下问题:

Contact.swift:10:8: Module compiled with Swift 2.3 cannot be imported in Swift 3.0.1: JSONCodable.swiftmodule

当我按照stackoverflow中其他帖子的建议时,就是改变" Swift编译器 - 版本"我更改了#34;使用Legacy Swift语言版本" MAIN.xcodeproj到"是",我收到很多兼容性错误,例如:

/MAIN/Model/Data.swift:55:1: Type 'Data' does not conform to protocol 'Storable'

我尝试了所有可能的价值"使用Legacy Swift Language版本"没有成功。 我还尝试添加一个" .swift-version"文件位于只包含" 3.0.1"的根文件夹中但它没有用。

我尝试在我的podfile中添加以下行:

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

但它既没有效果。

我试图重新安装cocaopods,但没有任何改变。

如何将用swift 2.3编写的库导入到用swift 3.0.1编写的项目中?

谢谢

2 个答案:

答案 0 :(得分:2)

Swift还不支持在使​​用不同版本编译的应用程序中使用在该语言的一个版本中编译的包。您必须重写其中一个,以便它们都使用相同的版本。

这需要快速的ABI稳定,这将在swift版本4中发生,但现在已被推迟。

答案 1 :(得分:0)

我认为唯一的解决方案是将Pod的代码从2.3转换为3.0,然后修改xcode不会自动更改的内容。 也许你可以在podfile中强制你的pod版本:

  

荚'〜> 3.0.1'

然后使用

重新安装pod
 pod install