web-dev-qa-db-ja.com

Swift 4.1.2でコンパイルされたモジュールは、Swift 4.1.50:Xcode 10エラーにインポートできません

Swift 4.2がリリースされ、プロジェクトでObjectMapperおよびその他のポッドも使用しているときにこのエラーメッセージが表示されます。

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

Xcodeにプロジェクトの更新を開始してSwift 4.2に移行するように指示するにはどうすればよいですか?

17
Sahil Kapoor

Swift 4.2では、Implicitly Unwrapped Optional(IUO)の実装に変更があります。これは、 Swift blog によると暗黙的なunwrapped Optional T! Tと見なされますか?コンパイラが暗黙のラップ解除オプションであることを認識するための追加フラグ。

IUOの新しいメンタルモデルは、皆さんが検討するものです。の同義語になりますか?さらに、宣言にフラグを追加して、宣言された値を暗黙的にアンラップできることをコンパイラーに知らせます。

この変更により、ソースの互換性の問題が発生する場合があり、正常にコンパイルする前にコードを変更する必要がある場合があります。

Swift 3では、var a:Int?のような宣言タイプがOptionalになり、var b:String!のような宣言になります! bのタイプがImplicitlyUnwrappedOptionalになります。 Swift 4.2で変更されたため、Swift 4.2に付属するXcode 10の ObjectMapper でエラーが表示され、3。*で同様の実装が行われました。 Xcode 10の場合。

Objectmapperライブラリには、以前にSwift 4.1の警告を示していた関数の宣言がいくつかあり、現在はSwift 4.2のエラーとして表示されています。 Xcode 9.4およびSwift 4.1の警告については、以下の画像を参照してください

enter image description here

ObjectMapper GitHubリポジトリにはいくつかのプルリクエストがあり、これにより問題が修正されましたが、 complierディレクティブを使用しているため、議論に従って新しいXcodeベータリリースを待っています 最近受け入れられた機能は、新しいXcodeベータでリリースされます。

更新:この問題はObjectMapper 3.3.0バージョンで修正されました。

8
Suhit Patil

適切なSwiftバージョンでCarthageモジュールをコンパイルしていません。だからあなたはする必要があります:

  1. 端末が通常のXcodeではなくXcode 10 Betaアプリを指していることを確認します。

Sudo xcode-select -switch Xcode_beta_10.app

  1. Carthageファイルを更新します。

カルタゴ更新--platform iOS --no-use-binaries

  1. Xcodeでプロジェクトに戻って、クリーン、ビルド
26
Ed.

ターミナルを使用して、プロジェクトディレクトリで以下のコマンドを実行します。ポッドが更新されます。それがあなたの問題を解決することを願っています。

pod update ObjectMapper
1
Sagar Unagar

ターミナルでXcodeベータバージョンを切り替える必要があります。プロジェクトの古いバージョンのCarthageドキュメントを削除します。 carthage carthage update --platform iOS --no-use-binariesを更新します。

0
user3488542