2017-09-14 15 views
0

xcode 9(swift version 3.2)でフレームワークバイナリをコンパイルしました。また、xcode 8.3.3とswift 3.2の構文でも動作させたいと思っています。しかし、私はxcode 9でコンパイルされたフレームワークでプロジェクトを実行しようとするとModule compiled with Swift 4.0 cannot be imported in Swift 3.1エラーメッセージが表示され続けました。この作業を行うためにどのオプションを追加する必要がありますか? pod Intercomはxcode 8.3.3と9の両方で動作するため、これが可能です。アドバイスをいただければ幸いです。Swift 4.0でコンパイルされたモジュールは、Swift 3.1のフレームワークバイナリでインポートできません

+0

私のフレームワークは3.1,3.2をサポートしていないとは思いません。 xcode 8.3.3プロジェクトでは、迅速なプロジェクトオプションを見つけることができません。 – REALFREE

答えて

1

Swiftの新しいバージョンを使用してコンパイルされたモジュールは、古いバージョンのSwiftを使用しているプロジェクトでは使用できません明らかな理由から。より新しいSwiftバージョンを使用してコンパイルされたフレームワークは、新しいSwift構文および/またはAPIを使用している可能性があります。新しいSwiftバージョンでしか使用できなくなり、より新しい構文またはAPIを使用するフレームワークから関数を呼び出すことができなくなります。この問題は、SwiftがまだABI安定していないことが原因です。このトピックの詳細については、ABI Stability Manifestoを参照してください。

Swift3.2はSwift3-> 4変換を容易にするためにXcode9の一部として導入されました。 Xcode8.3.3はSwift 3.1のみをサポートしていますが、Xcode9はSwift 3.2以上をサポートしているため、主要な両方のXcodeバージョンで使用できるようにフレームワークをコンパイルすることはできません。

フレームワークのバイナリリリースでXcode8とXcode9の両方をサポートしたい場合、異なるSwiftコンパイラバージョンを使用してコンパイルされた異なるバージョンを提供する必要があります。 Cocoapods/Carthageを使用する動的フレームワークに関しては、#if swift(>=3.2)のような条件付きコンパイルブロックを使用して、複数のバージョンのSwiftコンパイラと互換性のあるコードを記述することができます。詳細については、The Swift Programming Language (Swift 4) - Version compatibilityを参照してください。

+0

私はそれを得ていますが、https://github.com/intercom/intercom-iosインターコムは何とか​​この問題を克服しています。 Xcode 8と9の両方で 'cocoapods 'を使ってインターコムをインストールし、そのフレームワークはバイナリ形式です。 – REALFREE

関連する問題