2016-09-16 8 views
5

Xcode 8にアップデートし、最新のSwift 3.0構文に変換しました。私のプロジェクトにはCocoapodsという番号があり、Swift 2.3にはいくつかのものがあります(たとえば、いくつかの古いポッドではAlamofireをSwift 2.3を実行するv3.5に設定する必要があります)。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 

私はカルタゴ(他の質問で参照)を使用しないでください。唯一のCocoapods。

Swift 2.3を使用するにはプロジェクトを変換する必要がありますか?または、プロジェクトでSwift 3.0を使用しても、従来のCocoapodを使用できますか?

+0

残念ながら私はこの問題も抱えています。あなたがそれをコンパイルすることはできないと思われます。コードの所有者はそれをコンパイルし、再度プッシュアウトする必要があります。インストールしようとしていたポッドは、そこに1つを押し出しましたが、まだココアポッドには押し込まれていませんでした。 – Dallas

+4

SwiftはまだABI安定性ではなく、バイナリ互換ではありません。 Swift 2.3で書かれたフレームワークを、Swift 3(またはABIが安定するまでSwiftの他のバージョン)を使用するアプリケーションや他のフレームワークと混在させることはできません。 – HAS

+0

@hegranesこの問題の解決方法を見つけましたか? –

答えて

0

レガシーココアポードをプロジェクトで使用するには、2つの手順があります。

1)ココアポッドを研究し、正しいバージョンのココアポッドをインストールしていることを確認してください。最新バージョンではないかもしれません。例えば、別のブランチにあるかもしれません。

$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 Stableではないため、このようなポッドを組み合わせることはできません。その理由は、すべての迅速なポッド(およびフレームワーク、dylibs、.a、.oなど)がコンパイルされた時点で参照する必要がある巨大な迅速な標準ライブラリです。標準ライブラリは言語レベルに依存しており、1つのアプリケーションに迅速な標準ライブラリの複数のコピーを含めることはできません。

速攻3がリリースされてから数ヶ月間はいいですね。この時点で、あなたはおそらく3にジャンプしたいと思うでしょう。ポッドを見つけたら、3を速くするように更新されていないポッドを見つけたら、それをフォークして更新し、prを提出してください。作者はあなたを愛するでしょう! :)

関連する問題