Swift 5.1でコンパイルされたモジュールは、Swift 5.1.2コンパイラではインポートできません


91

Xcode 11.0を使用して従来のRxSwift.frameworkスタイルのパッケージにコンパイルしたフレームワーク(この場合はRxSwift)があります

これはXcode 11.0に正常にインポートされ、11.1にも問題はありませんでした

今日、AppleのXcode 11.2のリリース時に、私はアップグレードしましたが、次のエラーが表示されます。

Swift 5.1でコンパイルされたモジュールは、Swift 5.1.2コンパイラではインポートできません

私はコンパイラーの不一致を早めるのに慣れており、Xcode 11.2を使用してRxSwiftを再コンパイルして続行できることは知っていますが、Swift 5.1の主な機能はモジュールの安定性でした。

モジュールの安定性があるため、フレームワークは新しいXcodeリリースごとに再コンパイルし続ける必要がないという印象を受けましたが、これは明らかにそうではありません。

誰かがここで何が起こっているのかを説明できるならば、私はそれを感謝します。Xcode 11.2にバグがありますか?または、もともとXcode 11.0でコンパイルしたときに、モジュールの安定性が必要であることをなんとかして伝える必要がありましたか?



私にとっては、古いswiftバージョンのToolchainが機能しました:stackoverflow.com/a/43142147/5846135
Zeero0

回答:


108

はい、WWDCビデオを見るとわかります、彼らはそれを説明します:https : //developer.apple.com/videos/play/wwdc2019/416/

フレームワークのビルド設定で[ ディストリビューションのライブラリをビルド ]オプションを[ はい ] に設定する必要があります。そうしないと、Swiftコンパイラは.swiftinterface、古いライブラリをロードできる将来のコンパイラの鍵となる必要なファイルを生成しません。

これは、project.pbxprojファイルで次のようになります。

BUILD_LIBRARY_FOR_DISTRIBUTION = YES;

このフラグを設定すると、Xcode 11.0(swift 5.1)を使用してコンパイルしたフレームワークをXcode 11.2(swift 5.1.2)で使用でき、すべてが正常に動作しているように見えます。

うまくいけば、この質問/回答は、すべてのWWDCビデオを視聴したことがないすべての人に役立つリファレンスになるでしょう

エラーが引き続き発生する場合は、[ 製品] > [ ビルドフォルダーのクリーンアップ]に移動して、もう一度ビルドします。


1
驚くばかり!今度は、すべてのサードパーティフレームワーク開発者がこれを発見できることを願っています-ハハ:)
Mihai Fratu

25
これは私の場合には役に立ちません。「はい」に設定しましたが、まだエラーが発生します。何か案は?
davidOhara

3
私はCarthageと10個のフレームワークを使っています。であるcarthageから、これを拾うために、スマートに十分な私の .pbxprojのファイルは、または@MihaiFratuは、上記の言うように、すべてのサードパーティのフレームワークの開発者は、フレームワーク・プロジェクトでは、この自分自身を設定する必要がありますか?
nteissler

9
@davidOhara私の場合は、Xcode 11.2のこの既知の問題に関係していました。モジュールがBUILD_LIBRARIES_FOR_DISTRIBUTIONでビルドされ、モジュール自体と同じ名前のパブリックタイプが含まれている場合、クライアントはモジュールのインポートに失敗します。Xcodeの11.2リリースノートの(19481048)(FB5863238):developer.apple.com/documentation/xcode_release_notes/...
リチャードChirino

2
@davidOhara残念ながら回避策は見つかりませんでした。クラスの名前を変更することもできません。これは、フレームワークのメインクラスであり、顧客のコードが破損するためです。Xcode 11.2を使用してフレームワークをビルドすると、Xcode 11.2でコンパイルされますが、11.1以前ではコンパイルされません。本日のXcode 11.2.1 GMリリースでは、この問題は修正されていません。監視したい場合に備えて、Swift Issue Trackerのチケットを以下に示します。bugs.swift.org / browse / SR-11704レーダーも添付されています。
Richard Chirino

2

サードパーティのライブラリのインポート中に同じエラーが発生しました。Xcodeのツールチェーンを使用して修正し、https: //swift.org/download/#releasesから2019年9月19日のリリースを取得しました。その後、ライブラリを再インポートする必要があり、それが機能しました。


これはたくさんのおかげで最も簡単な解決策でした
Krishan Patel

Swift 5.1.2でコンパイルされたフレームワークモジュールに問題があります。Swift5.2.2ではインポートできません。どうすればこの問題を解決できますか?
Kishan Suthar

0

Carthageを使用してRxSwiftフレームワークを追加できます。

基本的に、Carthageは同様の従来のRxSwift.frameworkスタイルのパッケージを提供します

その後、お試しくださいcarthage update --no-use-binaries


carthageを使用すると、新しいコンパイラーでライブラリーを再構築するだけなので、反対票を投じます。問題は、以前のコンパイラーで作成されたバイナリー・ライブラリーをロードすることについて明確に述べています
Orion Edwards

0

これにより、コンパイラエラーが解消されました。

  1. carthage bootstrap --platform ios
  2. brew bundle
  3. pod repo update

brew bundle?それは何をするためのものか?
スカイワインダー

carthageを使用すると、新しいコンパイラーでライブラリーを再構築するため、反対票を投じます。問題は、以前のコンパイラーで作成されたバイナリー・ライブラリーをロードすることについて明確に述べています
Orion Edwards
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.