web-dev-qa-db-ja.com

Swift 4.1.2でコンパイルされたモジュールは、Swift 4.2コンパイラではインポートできません

短編:Xcode 10はSwift 4に設定されていますが、Swift 4.2を使用しています。

長い話:依存フレームワークはまだSwift 4.2ではないため、プロジェクトはSwift 4.2に対応していません。しかし、少なくとも、Xcode 10を使用したいと思います。

  • Xcode 9.4.1とXcode 10がインストールされています。
  • Xcode 9.4.1を使用するようにコマンドラインツールを設定しています:

enter image description here

  • Xcode 10には、Swift言語バージョン、Swiftに設定されたプロジェクト設定があります4。

enter image description here

  • コマンドラインで、シェルが使用しているSwiftバージョンが4.1.2であることを確認しました。

「Swift --version Apple Swiftバージョン4.1.2(swiftlang-902.0.54 clang-902.0.39.2)」

  • カルタゴ更新を実行しました。
  • Xcode 10を終了し、再起動しました。
  • 派生データを徹底的に削除して削除しました。
  • ビルドすると、このエラーが発生します。

「Swift 4.1.2でコンパイルされたモジュールは、Swift 4.2コンパイラではインポートできません:.../App/Carthage/Build/iOS/RealmSwift.framework/Modules/RealmSwift.swiftmodule /arm64.swiftmodule "

私にとってこれは、意図したSwiftバージョン(4.1.2)が正しく設定されており、XcodeがSwift(4.2)の間違ったバージョンを使用しようとしていることを示しています。

誰もこれを解決する方法について提案がありますか?何か不足していますか? Xcodeのバグ?

13
Heliotropix

私は前向きではありませんが、私の推測はこれが理由だということです:

Xcode 9.4.1を使用するようにコマンドラインツールを設定しています

Swift ABI-stableではない 、つまり異なるコンパイラバージョンでコンパイルされたバイナリは互換性がないため、Xcode 10を使用してSwift 4依存関係を再コンパイルする必要があります。また、異なるバージョンのXcodeでコンパイルされたSwift 4.0バイナリでさえ互換性がない場合があります。

Carthageの経験はあまりありませんが、コマンドラインツールとしてXcode 10を使用する必要があると思いますが、Xcode 10で使用する別のSwift言語バージョンを設定する必要があります。おそらくプロジェクト(この場合はRealmSwift)で指定するか、環境変数を使用する必要がありますが、詳細を答えてくれる誰かが必要になると思います。

4
FreeNickname

Xcode 10でRealmを使用するには、ソースからビルドする必要があります。ターミナルで書き込み:

git clone --recursive https://github.com/realm/realm-cocoa.git

cd realm-cocoa

sh build.sh ios-Swift

multiple Swift toolchainsを使用できます。 urlをダウンロード Swift toolchain download 何らかのバージョンをインストールした後。 xcodeを再起動すると、xocdeメニューにtoolchainsオプションが表示されます。

1
lingyfh

モジュールがCocoapodsを使用して取得された場合、ターミナルからpodfileディレクトリに移動して実行できます:

pod install

これにより、Swift 4.2のモジュールが再コンパイルされます。それは私のために働いた、あなたのために働くことを願っています。

0
Loup G

私は同じ問題を抱えていたので、XcodeとしてXcode 10を選択していないことに気付きました。試してください:

Sudo xcode-select -s /Applications/Xcode10.app

また、Xcode9と10を切り替える場合は、次のことをお勧めします。9から10に変更する場合は、mv Carthage Carthage9を実行してからCarthageを再構築してください。いつでも元に戻すには、CarthageをCarthage10に移動し、mv Carthage9 Carthageを実行します。これにより、構築にかかる時間を大幅に節約できます。

0
regina_fallangi