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


87

Xcodeを8.1 GMにアップグレードしたところ、SwiftyJSONで以下のエラーが発生しました。他のインポートされたフレームワークは機能しているようです。SwiftyJSONがフレームワークをアップグレードするまで、これをSwift 3で強制的に動作させる方法はありますか?Carthageを使用してフレームワークをインポート/更新しました。また、Use Legacy Swift language versionオンとオフを無効に変更してみました。

Swift 3.0でコンパイルされたモジュールはSwift 3.0.1にインポートできません:Modules / SwiftyJSON.swiftmodule / arm64.swiftmodule

回答:


171

SwiftyJsonは、carthageによってプリコンパイルされてダウンロードされています。プリコンパイルされたダウンロードは、Swiftバージョン3.0に含まれています。これにより、コンパイラはバージョンが正しくないと不平を言うようになります。次のコマンドを使用します。

carthage update --platform iOS --no-use-binaries

SwiftyJson(およびCarthage内の他のすべてのフレームワーク)は、ローカルバージョンのSwift(3.0.1)を使用してローカルにコンパイルされ、コンパイラーはこれ以上文句を言いません。


7
おそらく、検索に1時間節約できました。ありがとうございました。
djv 2016年

24
どういたしまして。正直なところ、カルタゴはもう少しインテリジェントで、迅速なバージョン番号を確認する必要があります。
zirinisp 2016年

他のアイデアはありますか?これは私にはうまくいきませんでしたが、私の場合、Unboxで問題が発生しています
Xernox

これは素晴らしかった。これをに埋め込んで、他の開発者が追加のフラグについて知っている/心配する必要なくCartfile入力できるようにする方法はありcarthage updateますか?
Craig Otis、

1
XCode 8.0からXCode 8.1にアップデートした後、PromiseKit 4.0で同様のエラーが発生しました。EXC_BAD_ACCESSエラーが発生しました。最終的に、PromiseKitは3.0.1で再コンパイルする必要があり、問題は解決されました。
Ricardo Anjos

21

DerivedDataからアプリchacheを削除し、再構築します。エラーは修正される可能性があります。

このようなDerivedDataパス:

~/Library/Developer/Xcode/DerivedData/

私のために働いた、私はこのfolterを削除し、ポッドフォルダーを削除し、「ポッドインストール」を使用します。そして修正されました。
Jose Pose S

こんにちは。この解決策は私にとってうまくいきました。派生データを消去するとどうなるか、詳しく説明していただけますか?エラーはどのように解消されますか?
iPhoneDeveloper

ありがとうございます。
Hasya

10

新しいXCode 8.1 GMパッケージがアプリケーションフォルダーに配置されていることを確認してください。私たちの1人がCarthageを実行して依存関係を更新しているときに、この問題に遭遇しましたが、applicationsフォルダー内のXCode古い8.0アプリケーションを置き換えていません(8.1 GMがデスクトップから実行されていました)。

ターミナルで次のコマンドを実行すると、が返されることを確認する必要xcrun swift -versionがありますApple Swift version 3.0.1


これでうまくいきました。ありがとうございます。また、ターミナルで機能したコマンドはxcrun swift -version
HH887

2
それでも同じ問題が発生します。その他の提案
harsh_v

2
このコマンドは私にとってうまくいきました:carthage update --platform iOS --no-use-binaries
HH887

2
私は完了carthage update --platform iOS --no-use-binariesしましたが、それでも機能しません。プロジェクトをクリーンアップしてXcodeを再起動しましたが、それでもエラーが発生します。他に何か試すことはできますか?
Clifton Labrum、2016年

1
やってみました。戻るApple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
クリフトンラブラム

9

Xcode端末でデフォルトを新しいものに更新するとうまくいきました。

手順1:次のコマンドを使用して、ターミナルでXcodeのバージョンを最新に更新します。参照

sudo xcode-select -switch <path/to/>Xcode.app

ステップ2:今度はcarthage updateコマンドを試してください

carthage update --platform iOS

9

最新のアップデートを提供するだけです:

Carthageはバージョン0.20を2017年2月27日にリリースしました。

Carthageは、利用可能なビルド済みバイナリに互換性がある場合にのみ、ビルド済みバイナリを使用するようになりました

つまり、--no-use-binaries互換性のない事前ビルドフレームワークを回避するために、以下を使用する必要はありません。

ですから、カルタゴのバージョンが大きい0.20ことを確認してください:

carthage update --platform iOS

XCode 8.3.3 Carthageを0.25バージョンに更新し、以下を実行した後、それは私のために機能しましたcarthage update --platform iOS --no-use-binaries
anoop4real

@ anoop4realそれなしでは動作しません--no-use-binariesか?Carthageは、バイナリがコンパイラのバージョンと互換性があるかどうかを検出できるはずです。互換性がない場合は、ダウンロードしたバイナリを自動的に削除し、ローカルでフレームワークをビルドすることになっています。
kanekin 2017

5

@zirinispが言ったように:

  1. 次のコマンドを使用できます。carthage update --platform iOS --no-use-binaries
  2. 次のコマンドを使用:xcrun swift -versionSwiftのバージョンを確認するには
  3. これを行います。Xcode->preferences->locations派生データをクリアしてデータをアーカイブするには、コマンドラインツールを " Xcode 8.1" に変更することが最も重要です
  4. 次のコマンドを使用するとxcrun swift -version、Swiftのバージョンが3.0.1であることがわかります。
  5. セットする Use Legacy Swift Language Version = NO

お役に立てば幸いです


1
  1. Xcodeの場合、ベータ/ GMバージョンを/ Applicationsフォルダーに移動し、Xcode-betaという名前を付けます。

  2. 次の出力を確認します。

    xcrun swift --version

Carthageはこのコマンドの出力を使用してローカルのSwiftバージョンを決定するため、ターミナルでこのコマンドを実行すると、その出力はアプリにコンパイルするSwiftバージョンと一致する必要があります。

  1. 次のコマンドを実行して、ターミナルでXcodeのバージョンを最新に更新します。

    sudo xcode-select -s /Applications/Xcode-beta.app/

  2. 次のコマンドを実行して、iOS用のライブラリをビルドし、Carthageが既存の(まだ互換性のない)プリコンパイル済みバイナリをダウンロードしないようにします。

    carthage update --platform iOS --no-use-binaries

  3. クリーン&ビルド


0

私はライブラリとまったく同じ問題を抱えていましたXCTest_Gherkin、それが私のために働いたのは:

  1. Product-> Scheme->XCTest-Gherkin
  2. Product -> Build

それが役に立てば幸い。Cocoapodsを使用しています。


0

Xcode ビルド設定でフレームワーク検索パスに適切なCarthageビルドフォルダーが含まれていることを確認します。

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