Xcode 8 Beta 3 Use Legacy Swiftの問題


201

Xcode 8 Beta 3にObjective-Cプロジェクトがあります。アップデート以降、ビルドしようとすると次のエラーが表示されます。

「レガシーSwift言語バージョンを使用」(SWIFT_VERSION)は、Swiftを使用するターゲットに対して正しく構成する必要があります。[編集>変換>現在のSwift構文に…]メニューを使用してSwiftバージョンを選択するか、ビルド設定エディターを使用してビルド設定を直接構成します。

誰かがこれに遭遇しましたか?これはObjective-Cプロジェクトであるため、Swiftを構成するためのビルド設定はありません。また、プロジェクトの依存関係やCocoaPodsがSwiftを使用していないことも確認しました。私が持っている唯一の解決策はBeta 2を使用することです。この問題をどのように修正できるかについてのアイデアはありますか?

また、OSX 10.12 Beta 2を実行していることについても触れておきます。


私もこの問題を抱えています...
rockdaswift 2016

回答:


364

CocoaPodsを使用していてpod install、を実行するたびに自動的に修正されるようにするには、Podfileの最後に次の行を追加できます。

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

編集:この問題は、CocoaPods v1.1.1以降を使用している場合に修正されました。ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESメインプロジェクトのターゲットから設定を削除することを忘れないでください。


24
とりあえずコードベースで2.3を使用しようとしている場合は2.33.0 Great solutionの代わりに使用してください!これにより、効果的に"Use Legacy Swift Language Version"to が作成されますNo (または、変更した2.3場合Yes)。ただし、このオプションの利点は、pod installその設定を自動的に設定するたびです!驚くばかり。私が見るSWIFT_VERSIONに設定されますのObj-Cの同様のプロジェクト。悪影響はないと思いますか?
Herbal7ea 2016

8
これはすばらしいことですが、StackOverflowに関するRubyの専門家がいなければ、何千、何百万ものプロジェクトがSOLになるのは非常に不安です。ビルド設定を使用して、すべてのモジュールとポッドプロジェクトでXcode設定SWIFT_VERSIONを手動で2.3に変更しましたが、機能しませんでしたが、機能しました。隠された邪魔な魔法を意味します。嫌いです。
BaseZen 2016

5
私はあなたにこれについての小道具を与えるために文字通りログインしました
Dnaso '25

1
Charts(Swift)、AfNetworking、その他いくつかのObj-Cポッドを含むObj-Cプロジェクトがあります。ポッドファイルで上記のスクリプトを使用しました。Swiftに関連するすべてのエラー/警告はなくなりましたが、私のプロジェクトではAFNetwokingフレームワークを見つけることができません。
ibnetariq 2016

1
@ Mr.Bista承認されたソリューションであるstackoverflow.com/a/38597681/2854405は、Xcode設定から機能します。ただし、毎回行うすべてのポッドレポでそれを行う必要がある場合がありpod install / updateます。このソリューションは、物事をより速くします。Cocoapodsのバージョンを今すぐ更新することもできます。この問題も修正されるはずです。
Tulleb 16

119

私はそれを修正する方法を見つけました。

プロジェクトまたはライブラリのビルド設定に移動し、Swiftコンパイラのバージョン属性「Use Legacy Swift Language Version」をUnspecifiedからYesまたはNOに設定します。

ここに画像の説明を入力してください


13
私のObjective-Cプロジェクトにこのオプションが表示されません
Bryan

Obj-CプロジェクトにSwiftプロジェクトライブラリはありますか?
rockdaswift

2
swiftとcocoapodsを使用している場合、cocoapodsで上記のコマンドを実行すると、これが効果的に行われます。毎回これを変更する必要がない場合は、pod install上記の@Tullebの回答を使用することをお勧めします。
Herbal7ea 2016

今、私のエラーは、自己のクラスのスウィフトコンパイラエラーがある
エドゥアルド・オリベ

1
このオプションは使用できなくなりました。
Hemang 2017年

33

私はしばらくの間この問題を無視していて、しばらくの間他の作業に取り組んでいます-私は最終的に私の問題の解決策を見つけました。

私のプロジェクトはObjective-Cなので、使用しているポッドの1つがSwiftを使用していると考えたので、各ポッドを確認しましたが、どれも使用されていませんでした。

最終的な解決策は、ファイル>新規> NSManagedObjectSubclassメニューで手動で生成しているにもかかわらず、Swiftでコードを生成するようにCore Dataモデルを設定することでした。私がしなければならなかったのは、それをObjective-Cに切り替えることだけでした。

スクリーンショット


1
どのようにしてこれを見つけましたか?Xcodeはこれについて何も言っていません。あなたは私を救いました。
Ryan

2
確かに私の解決策と私の救い主。ありがとう!アプリ全体が客観的である場合に、AppleがどのようにしてCoredataモデルを自動的に「Swifty」にするのかバカです...
Bob de Graaf

18

この問題はXcode-8.1でも見られます。拡張機能やウィジェットなどの新しいターゲットを追加すると、ココポッドを利用してサードパーティのライブラリが新しいターゲットに統合されます。ポッドのインストール後。上記と同じエラーが発生する可能性があります。

変更を使用するレガシー・スウィフト言語バージョンへのすべてのライブラリのビルド設定で

いいえ

ここに画像の説明を入力してください


私の場合、Use Legacy Swift Language VersionをYesに設定すると問題が解決しました。
Jayprakash Dubey 2016

この問題が発生している各
ライブラリに対して

これでうまくいきました。Testターゲットについても同じことを確認してください
zizutg

@zizutg:-すべてのターゲットをクロスチェックする必要があります。再度指摘していただきありがとうございます。
Shrawan 16


5

podfileの最後に以下のコードを追加します。

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

4

以前にswiftバージョン2.3を使用したobjective-cとswiftコードが混在するプロジェクトで作業していますが、swift 3にアップグレードした後、プロジェクトをビルドできませんでした。Xcodeは、言及されたエラーメッセージで不平を言いました。

どうやら、私のproject.pbxprojファイルで指定された古いSwiftバージョンがまだありました。迅速な3.0.1が指定されました:

SWIFT_VERSION = 3.0.1;

一方、私はすでに3.0.2をインストールしています。

$ xcrun swift -version
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9

だから、project-pbxprojファイルのSwiftバージョンを次のように変更して修正しました。

SWIFT_VERSION = 3.0;

パッチレベルのバージョン指定子が具体的すぎるようです。


4

私の場合、私は次のことをするだけです

プロジェクトのターゲットを選択=>ビルド設定に移動=>「Swift言語バージョン」を検索=>現在のSwiftバージョンの値を指定

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

この画像をフォロー


4

同じエラーが発生しました。「レガシーSwift言語バージョンを使用」を検索しようとしましたが見つかりませんでした。私はXcode 8.3.3を使用 しています。サーフィンをやりすぎて回避した後、この解決策を見つけました。これでうまくいきました。ここに画像の説明を入力してください

Here are the steps.
1=> select your target from Xcode
2=> go to build setting
3=> search for "Swift Language Version"
4=> change it to swift 3. (or accordingly.)

3

プロジェクトまたはswiftサードパーティで古いバージョンのswiftを使用している場合は、「Use Legacy Swift Language Version」を「YES」に設定します。プロジェクトが最新のSwiftバージョンに更新されている場合は「いいえ」。迅速なバージョンを設定しない場合、更新とインストールのたびに、ポッドフレームワークでこれを指定する必要があります。


2

実際に「Legacy Swift」を検索して、未指定から「はい」に変更する必要がありました。上記のセクションまでスクロールダウンしただけでは、変更できませんでした。これが誰かの役に立つことを願っています。


2

私のプロジェクトはSwiftで書かれています。同じエラーがで発生しましたfastlane。Xcodeが自動更新されたため、プロジェクトをSwift 3.0に更新する必要がありました。大量のエラーが発生しました。修正とデバッグに時間がかかりすぎたため、現時点ではそれだけの価値はなかったので、古いバージョンのXcodeをインストールすることにしました。コードを2.3に戻しました。その後、fastlane betaもう機能していませんでした。結局、コマンドラインツールを7.3に設定する必要がありました。 ここに画像の説明を入力してください


1

私はこれと同じ問題を抱えていて、次のようにしてそれを解決しました:

プロジェクト>ビルド設定:

Always Embed Swift Standard Libraries = $(inherited) Use Legacy Swift Language Version = YES

次に、私のPodfileで:

config.build_settings['SWIFT_VERSION'] = '3.0'

これら3つの設定を使用すると、すべての警告が削除され、適切にコンパイルできました。

ここで提案されているように、最も不明瞭で実際にコンパイルが進んだのは、PodfileのSWIFT_VERSIONを3から3.0に変更することでした。


1

XCode 8がデフォルトのswiftバージョンとしてswift 3.xを使用している場合でも、XCode 8以降、swift 2.3を使用できます。Swift 2.3を使用するには、フラグUse Legacy Swift Language Version to YES to Build Settingをオンにすると、XCodeはそのプロジェクトターゲットにSwift 2.3を使用します。


1

複雑な解決策を試す前に、Cocoapodsを初めて使用してこの問題が発生した場合に実行する必要がある基本的なチェックを以下に示します。

次のことが必要になる場合があります。

  • もう一度Podfileを開きます
  • プラットフォームの行が「#」でコメント化されていないことを確認してください。最終的には次のようになります。

platform :ios, '10.1' # Put the right version and no #platform here use_frameworks! # For swift pod "MyPod" # Your mean pod :)

  • Podfileを保存してXcodeを閉じ、pod install再度実行する
  • project.xcworkspaceを開きます

多分それだけです。

そうでなければ、あなたは上に行くことができます;-)


1

xcode 8.3.2にアップデートした後も同じ問題が発生しましたが、[Use Legacy Swift Language]オプションがなくなりました。これは今変更するオプションのようです: Swift Langバージョン

この修正をAlamofireやその他のライブラリで使用すると、すべて正常に機能します。


1

プロジェクトのプロジェクトビルド設定に移動し、ターゲットは2つ以下を実行します。

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

最新に変更しSwift 3ます。

エラーは解決しました。

エラー修正が解決した場合は、気に入ってください。


1

Xcode 9ベータ版。プロジェクト設定、ビルド設定に移動し、Swift言語バージョンを検索します。Xcode 9では、Swift 3.2とSwift 4のどちらを使用するかを指定する必要があります。


プロジェクトとターゲットの両方をSwift 4に設定するとエラーが発生し続け、両方をSwift 3.2に設定するとそれが削除され、両方をSwift 4に戻すことで問題がなくなるため、9.0bにプロジェクトがありました。それでもエラーが発生します。
green_knight 2017年

1

あなたが変更した場合ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESにはNO、まだない仕事、それはXcodeの問題があるためではなく、あなたの問題です。次の手順を実行します。

1. ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESプロパティをYES警告対象に変更

2.すると、左のバーに警告が表示され、Swift 3.0に変更することをお勧めします

3.thenに戻りNOます。プロジェクトを再構築すると、xcodeは最終的にNO!への変更を検出します。

この場合、問題は解決しました!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.