web-dev-qa-db-ja.com

Xcode 9:Swift 3.1でコンパイルされたモジュールはSwift 4.0にインポートできません

Xcode 9にアップデートした後、私は自分のプロジェクトの1つを構築しようとしました。

私はFacebookLoginポッドを使います。 FacebookLogin/LoginButton.Swiftにコンパイラエラーがあります

@testable import FacebookCore
❌ Module compiled with Swift 3.1 cannot be imported in Swift 4.0

私のターゲットのビルド設定では、Swiftの言語バージョンはSwift 3.2に設定されています。

Screenshot added

Facebookがポッドを更新するのを待つ必要があると思いますか。または他の提案?

ありがとうございます。

77
Arnaud

更新:

このソリューションはSwift 4.2とXcode 10でもテストされ動作しています。

オリジナル:

Swift 3.2でモジュールをコンパイルするためにCarthageを使用している場合は、ターミナルに移動して実行する必要があります。

Sudo xcode-select --switch /Applications/Xcode-beta.app/Contents/Developer

Xcode 9のコマンドラインツールを使用するには、次のコマンドを実行します。

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

これはあなたの現在のコマンドラインツールでライブラリをコンパイルします、それは少し遅いかもしれませんが、今プロジェクトは構築されるべきです。

元の安定したXcodeコマンドラインツールを元に戻して使用するには、単に実行します。

Sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
69
xavi.pedrals

Xcode 9には、Swift 3.2とSwift 4の両方を理解するSwift 4コンパイラが付属しています。2つのバージョンを混在させることもできます。残念ながら、他のバージョンはサポートされていません。

あなたがあなたの言語をSwift 3.2に設定したとしても、それはSwift 4コンパイラを使用します。

Cocoapodを使用している場合は、これをpodファイルの末尾に追加して、podにSwift 3.2または4.0を使用させることができます。

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['Swift_VERSION'] = '3.2'
        end
    end
end

あるいは、FacebookLoginがSwift 3.2または4に更新されるまで、ポッドから直接ファイルをプロジェクトに直接配置することもできます。

注:Mattのフィードバックに基づいて編集

26
klinger

たぶんあなたはそれを構築する前にターゲットをきれいにすることができます。それは私にとってはうまくいきます。

19
TomorJM

私はXcode 9 Beta 3で同じ問題に遭遇しました。それは 'Alamofire'を指していて、いくつかの異なる解決策を試してみました。

1. CMD+SHIFT+K to clean the build
2. Restart Xcode 9 <-- make sure you do this step, that's critical. `
11
Xu Yin

"clean build folder"を実行してXcode 9を再起動すると、エラーが解決しました。また、エラーによってアプリが私のデバイスやシミュレータで実行されるのを止めることはできませんでした。

10
John Pavley

カルタゴを使用している場合は、端末を開くそして;

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

Podを使用している場合は、端末を開いてそして;

pod update

(ポッドで動作しない場合も、ポッドファイルのSwift_VERSIONを変更できます。例:

config.build_settings['Swift_VERSION'] = '3.2'

後;

Xcodeを開いて使用します。

Command+Option+Shift+K

enter image description here

8
SwiftDeveloper

goto xcode DerivedDataディレクトリに移動して、その中にあるすべてのファイルを削除し、プロジェクトを再コンパイルします。それは私のために働きます。

デフォルトのDerivedDataディレクトリは〜/ Library/Developer/Xcode/DerivedDataです。

8
reco

わたしにはできる。

1. Xcode 8でプロジェクトをきれいにする

2.プロジェクトをXcode 9でビルドまたは実行します

4
RayJiang

私はXcode 9でプロジェクトを掃除してからアプリを実行しました、それは動作します。

3
Shan Ye

私はXcode 9 GMと同じ問題を抱えていました、そして、これは私の問題を解決しました:プロジェクトからそれを取り除き、そしてそれを再び「埋め込みバイナリ」にドラッグしてください。

2

クリーンビルドフォルダ

Cmd + option + shift + K
2
Vineesh TP

私は持っています

pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'

私のプロジェクトとimport FBSDKLoginKitでは、ターゲットをきれいにした後、私は何の問題もありませんでした

あなたが使用しているポッドはSwiftにあり、ベータポッドなので、Swift 4コンパイラには問題がある可能性が高いので、当分の間は目的のCバージョンのポッドを使用するべきです。

1
thibaut noah

あなたがポッドから使​​用する場合:

  1. PodfileのコメントにFacebookログインポッド
  2. ポッドインストール

  3. Podfile内でFacebookLoginポッドのコメントを外します
  4. ポッドインストール

  5. プロジェクトを再実行してください
0
Hamed

私の場合 - 実際のポッドはSwift 3.1をターゲットとしたビルド済みバイナリを含む静的Zipを参照していました。だから唯一の解決策はxcode 9からのソースでフレームワークを再構築することです。

https://github.com/AudioKit/AudioKit/issues/98

0
johndpope