Swift 4.0でコンパイルされたモジュールはSwift 4.0.1にインポートできません


90

ただし、同じXcodeを使用してフレームワークを再コンパイルしましたが、それでもこのエラーが発生します。

  • 両方のベースSDK iOS 11.1
  • Swift言語バージョンSwift 4.0 for both
  • ポッド/カルタゴを使用していない

誰かが知っているといいのですが


Appleは、Objective Cの10年間のサポート終了の通知を再考する必要があるようです:^)これは、現在> 1のプロジェクトで私に噛み付き、両方ともサードパーティのバイナリフレームワークです。
アントン・トロパシュコ

回答:


137

更新:

Xcodeのリリースバージョンの場合:

このエラー(およびSwift 4.1、4.2などに関連する同様のエラー)は、以前のXcodeツールで構築されたフレームワークを使用するXcode 9.1、9.2、9.3、9.4、10などでプロジェクトを開くと発生します。

この問題を修正するには、Carthage(carthage update --platform iOS)、Cocoapods(pod updateまたはpod install)を使用して、または手動で、更新された新しいXcodeツールを使用してフレームワークを更新および再構築します。Xcodeを更新すると、ツールは自動的に更新されますが、そうでない場合は、元の回答で以下に概説されている手順に従ってください。

Xcodeがキャッシュフレームワークビルドを使用しないようにするには、プロジェクトcmd + shift + kとビルドフォルダーをクリーンアップする必要がある場合もありますcmd + option + shift + k

場合によっては、派生データフォルダーも削除する必要があります(Xcodeの[設定]-> [場所]-> [派生データフォルダー(Stunnerに感謝)に移動すると簡単に見つかります)。

Xcodeのベータ版の場合:

以下の元の回答を参照してから、上記の手順に従ってください。

元の答え:

XcodebuildツールがXcode 9.0に設定されている可能性があります。これは、Swift 4.0でビルドされ、Xcode 9.1ベータのSwift 4.0.1と互換性がありません。

次のコマンドを使用してターミナルをチェックインします。

xcodebuild -version

または、単にXcode設定->場所に移動し、コマンドラインツールをチェック/変更してXcode 9.1に変更します。その後、設定する必要があります。


1
私も派生データをクリアし、プロジェクトをクリーンアップしました。誰にとっても必要かどうかはわかりませんが、ここではそうでした。ありがとう
Simon

3
@Zig様、こんにちは。私がgithub(mattdonnelly / swifter)で使用するリポジトリはSwift 4.0ですが、XCode 9.0を使用してコンパイルされているため、この問題が発生します。XCode 9.1以降のGithubで他の誰かのココアポッドを再コンパイルするために必要な手順は何ですか?
ジョセフBeuysのママ

1
コマンドラインツールを追加する方法はありますか?コマンドラインのドロップダウンにXcode 9.3があります。そして私もこの問題を抱えています
tara tandel

1
一部のポッドはSwift 4.2に対応していません。そのSwift Language VersionためSwift 4、これらのポッドを固定する必要がありました。その後、うまくいきました。
skofgar 2018

1
プラス1は、ビルドフォルダーをクリーンアップするためのショートカットです。オフハンドで実行する方法を私は知りませんでした。
Matt

25

私の問題は、Swift 4.0.2用にコンパイルされていない外部フレームワークが原因でした。私はこのファイルをCarthage経由で追加したので、

carthage update --platform iOS

そして、プロジェクトcmd + shift + kとビルドフォルダーcmd + option + shift + kをクリーンアップし、派生データフォルダーを削除する(単にゴミ箱に移動するだけ)と、うまくいきました。


2
実際、これは本質的に解決策です。Appleの最新の迅速なアップデートにより、今日(4月18日)に同じことが起こりました!:)
Fattie 2018年

cmd + option + shift + kは、Carthageを更新した後にトリックを実行したものです。ありがとう!
レオナルドレイテ

15

私の場合、SwiftUIをテストするためにxCode 11 Betaバージョンをダウンロードしました。プロジェクトを実行すると、「Swift 5.1でコンパイルされたモジュールをSwift 5.0.1コンパイラでインポートできない:...」というエラーが発生しました。

この問題を修正するには。xCodeコマンドラインツールを新しいxCode 11コメントラインツールに変更しました。その後、SwiftUIを使用して新しいxcodeプロジェクトを作成できます。

Xcode-> Preferences-> Location-> XCodeコマンドラインツール

Xcode Commend Lineツール

私はこれが新しいfreameworkでテストしたい人を助けることを願っています:)


9

ここから機能していた特定のXcodeバージョンのXcode Toolchainをインストールします

Xcodeツールチェーンには、特定のバージョンのSwiftで作業するための一貫した開発エクスペリエンスを提供するために必要なコンパイラー、lldb、およびその他の関連ツールのコピーが含まれています。

Xcodeの[設定]を開き、[コンポーネント]> [ツールチェーン]に移動して、インストールされているSwiftツールチェーンを選択します。

これで、今のところアプリをコンパイルして実行できます。


カルタゴの更新、ブートストラップ、迅速な言語設定など、可能な解決策を2日間検索して試した後、ここで正しい答えを見つけました:)
memresubasi '22

7

この問題は、Swift 4.2を追加するXcode 10ベータで発生しました。私の問題はCarthageや外部の依存関係とは無関係でした。

YourTarget > Build Settings > Swift Language VersionすべてのXcodeターゲットに移動します。

鉱山はすべてに設定されていました Swift 4

ファイルコピービルドフェーズを追加した後、エラーが発生し始めました

:0:エラー:Swift 4.1.2でコンパイルされたモジュールは、Swift 4.2コンパイラーではインポートできません:/Users/user/Library/Developer/Xcode/DerivedData/MyApp-faskfrihumfcdibjxisjvbfshppp/Build/Intermediates.noindex/MyApp.build/Debug/ MyAppExtension.build/Objects-normal/x86_64/MyClass~partial.swiftmodule

コマンドMergeSwiftModuleがゼロ以外の終了コードで失敗しました

私はその後、各ターゲットの設定Swift Language VersionSwift 4.2エラーを排除し、。

ただし、最初にエラーが発生した理由はわかりません。すべてのターゲットを設定するSwift 4ことは同じように有効であるべきだからです。


1
見つけられBuild Settings
ません

@Chandrewは最初にターゲットをクリックします。回答を更新しました。
pkamb

3

私の場合(Xcode 9.2):

Xcodeに行ってきました Preferences > Locations > Derived Data

次に、データを削除してクリーンビルドを実行しましたが、問題はありませんでした。


1

私の場合、cocoapods-binaryライブラリをバイナリに事前構築するためにプラグインでCocoaPods を使用しました。Xcodeを10から11にアップグレードした後、Xcodeで次のエラーが発生します。

Module compiled with Swift 5.0.1 cannot be imported by the Swift 5.1 compiler

/Podsディレクトリを削除して実行することで修正しpod installます。


0

私の場合、私はフレームワークを不平を言っていたバージョンで再コンパイルしました。

pod updateカルセージ(どちらか使用しているもの)を再コンパイル、実行、または更新して、プロジェクトをビルドします。

次に、ファインダーでフレームワークを検索します。をtheFramework.frameworkプロジェクトにコピーして貼り付け、「必要に応じてアイテムをコピーする」ことを確認してください。プロジェクトを再度ビルドすると、機能するはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.