web-dev-qa-db-ja.com

現在の値への変換Swift構文エラー-「そのようなモジュールはありません」(Swift 4、Xcode 9)

Xcode 9では、Swift 4.への自動変換を試みています。次のメッセージが表示されて失敗します。

enter image description here

Convert to Current Swift Syntax Failed
選択したすべてのターゲットが、現在設定されているSwift=バージョンで正常にビルドされることを確認してから、移行を試みてください。

モジュールが見つからないという不満があります。しかし、私が定期的にビルドを行うとき、問題はありません。これが関連するかどうかはわかりませんが、モジュール(Xcodeが不満を言っている)が既にSwift 4以前(独自のプロジェクト内)に変換されています。

注:ここではココアポッド/カルタゴは使用していません。

注:2つの解決策が試行(および機能)しましたが、根本的な問題に対処していません。

  • 1つの解決策は、手動で変換を行うことです(ビルド設定でSwiftバージョンを4に変更し、ビルドエラーがなくなるまでFix-Itsを1つずつ適用します)。
  • 別の解決策は、サードパーティのフレームワークを無効にし(使用されているすべてのコードをコメントアウトする)、自動移行を実行してから、フレームワークを再度有効にすることです。これは、大きなプロジェクトではかなり難しくなる可能性があります。
14

まだ解決策が見つかりません。

今のところ、手動​​での設定Swift Language Version

enter image description here

3.2から4.0に変更した後、エラーと警告を手動でコンパイルして修正します。
より良い解決策を待っています!

8
Luca Davanzo

プロジェクトをSwift 4.0に変換しているときにもこの問題が発生しました。すでにSwift=にあるフレームワークをインポートするターゲットを変換しようとすると、問題が発生します4.0。スクリーンショットで、「RecipeTextParser」を変換して、「SovaTools '既にSwift 4.0。

私は汚いが、解決策を見つけた。変換時に、古い(Swift 3.2)バージョンの 'SovaTools'を使用できます。 [〜#〜] not [〜#〜]変換ツールのターゲット選択ウィンドウでマークを確認する必要があります。次に、「RecipeTextParser」が正常に変換されると、Swift 4.0 'SovaTools 'バージョンをもう一度。

6
Padavan

私はこのエラーを受け取り、私の場合、私のポッドの1つ(Xcodeが不満を言っていたもの)はSwift 4ターゲットであり、残りはSwift 3.2。ビルドログを見ると、Xcodeはそのフレームワークを1つの場所でビルドし、別の場所で検索していたように見えます。そのポッドを古いバージョン(Swift3.2を使用)に戻すと、問題はなくなりました。

5
niladri

ポッドを更新するだけで問題が解決します。

ポッドを更新するには:

  • ターミナルを開き、プロジェクトディレクトリに移動します
  • タイプポッド更新

これで問題が解決しました。

1
Arqam Butt

Xcode(Xcode 9)言語移行機能は、完全なコード/プロジェクトを1つのSwiftバージョンから別の許容範囲ゼロに移行できるほど正確ではありません。 )。ツールのバグまたは不正確な可能性がありますが、プロジェクト/コードのSwift言語バージョン。

スナップショットによると、Xcodeは「RecipeTextParser」フレームワークのエラーを表示しています。これは外部/サードパーティのフレームワークだと思います。別の注意点として、CocoaPodsを使用してこのフレームワークを統合しました。

次のいずれかがコード移行の失敗の理由になります。

  1. CocoaPodsは、編集のためにフレームワーク(ファイル)をロックします。そのため、言語移行プロセスでは、外部/サードパーティフレームワークのコードを移行(または識別)できない場合があります。
  2. 一般的に、フレームワークはコードファイルのパッケージであるため、フレームワーク自体はファイル/ソースコードの編集を許可しない場合があります。

ソリューションとしての提案:

  1. 最新のSwift言語バージョンと互換性のあるココアポッドを使用して統合されたすべてのフレームワークと同様に、ココアポッドを更新します。
  2. 外部/サードパーティのフレームワークを手動で統合/追加した場合は、それらも更新/交換する必要があります。

Swift言語間でコードを完全に移行するには、手作業が必要です。私はSwift上記のオプションで移行し、すべてのプロジェクトはSwift 4。

1
Krunal