web-dev-qa-db-ja.com

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

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

86
HH887

SwiftyJsonは、カルタゴによってプリコンパイルされてダウンロードされています。プリコンパイルされたダウンロードは、Swiftバージョン3.0を使用しています。そのため、コンパイラーはバージョンが正しくないことを訴えます。次のコマンドを使用します。

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

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

171
zirinisp

DerivedDataからアプリの機能を削除し、再構築します。エラーが修正される場合があります。

次のようなDerivedDataパス:

~/Library/Developer/Xcode/DerivedData/
19
i-chou

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

ターミナルで次のコードを実行するときに、xcrun Swift -versionApple Swift version 3.0.1を返すことを確認する必要があります。

10
Clay Garrett

端末でデフォルトのXcodeを新しいものに更新してくれました。

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

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

ステップ2:ここで、カルタゴ更新コマンドを試してください

carthage update --platform iOS
9
Zaid Pathan

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

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

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

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

したがって、カルタゴバージョン0.20よりも大きいことを確認し、次のようにします。

carthage update --platform iOS
9
kanekin

@zirinispが言ったように:

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

私はそれがあなたを助けることを願っています

5
kris
  1. Xcodeが/ Applicationsフォルダーにある場合はbeta/GMバージョンを移動し、名前をXcode-beta
  2. 次の出力を確認します。

    xcrun Swift --version

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

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

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

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

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

  3. クリーン&ビルド

1
Tul

ライブラリXCTest_Gherkinでもまったく同じ問題が発生しました。

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

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

0
user248672

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

$(inherited)
$(PROJECT_DIR)/Carthage/Build/iOS
0
John Cromie