「プロジェクト名」は最適化してコンパイルされました-ステッピングが奇妙に動作する可能性があります。変数が利用できない可能性があります


210

AFNetworkingコードにステップインしようとすると、次の警告が生成されます。

[Project Name] was compiled with optimization - stepping may behave oddly; variables may not be available.

そしてもちろん、コードをデバッグすることはできません。具体的には、UIImageView+AFNetworking不可能と思われるカテゴリをデバッグしようとしています。コードを変更しても効果はありません(試行済みNSLogなど)。コンパイラをステップインしようとすると、アセンブリコードに移動UIImageView+TVASTAFNetworkingし、コードベースのどこにも存在しないカテゴリ名として表示されます。

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

Xcode 7を使用。iOS9および8. Cocoapods(フレームワークなし)

更新 オプティマイザーがnoneリリースとデバッグの両方の設定に設定されていることを言及するのを忘れており、実際にはDebugconfig を使用しています。

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

アップデート2

Strip Debug Symbols オフでもあります。


ある種の「ストリップデバッグシンボル」オプションがあることを思い出します。それはおそらくこの問題を引き起こすでしょう。オフですか?
NobodyNada

1
@NobodyNadaはいStrip Debug Symbolsオフです。
Mojtaba

奇妙なことに、ストリップデバッグシンボルをオンにしようとしたところ、警告が表示されなくなりました8- |
Gomino、2015年

@Mojtabaねえ、あなたは問題を解決する方法を見つけましたか?Xcode 7に更新してから同じ問題で立ち往生しています
Hadu

@Hadu:残念ながらありません
Mojtaba

回答:


175

プロジェクトでSwiftを使用している場合、プロジェクト/ターゲット構成には2つの異なる「最適化レベル」設定があります。

両方を正しく設定してください。

  1. Project Navigatorペインでプロジェクトを選択します
  2. 「PROJECT」ツリーからプロジェクトの設定を選択します
  3. 「ビルド設定」タブをクリックします
  4. 「最適化レベル」を検索すると、LLVM用とSwift用の2つの設定が表示されます。
  5. 問題のビルド構成に適切な設定(None [-O0]LLVMおよびNone [-0none]Swiftの場合)を設定します。

最適化ステップを使用してコンパイルされた場合、奇妙な動作をする場合があります

これを行うことで、警告が解決されました。


1
混合言語プロジェクトとは...?
2018

LLVMとSwiftの違いは何ですか?それは、スウィフトは、私がプロジェクトに書いたものであり、私のようなデバッガつまり、物事には、デバッグに関してでやっている何のためにLLVMがあるということですかpopexpr...?
Honey

124

プロジェクトはリリースモードのようです。リリースモードは多くの最適化を使用してアプリをコンパイルしますが、デバッガーは最適化を嫌うため、アプリを確実にデバッグするには、アプリをデバッグモードに切り替える必要があります。デバッグモードに切り替えるには:

  • Xcodeの左上隅にあるスキームをクリックします。

Xcodeの左上隅にあるスキームをクリックします。

  • 「スキームの編集...」を選択します

「スキームの編集...」を選択します

  • 「ビルド構成」ドロップダウンをクリックします。デバッグモードに変更します。

「ビルド構成」ドロップダウンをクリックします。


8
デバッグを使用しています。オプティマイザがオフになっていることを確認してください。
Mojtaba

これは面白かった。また、私はそれがに設定されていたので、リリース、いくつか他の人がヒット_(ツ)_ /¯なっていた間、私のブレークポイントの一部がヒットを取得していなかったモード
ハニー

59

この警告は、ブレークポイントにヒットし、ソースが最適化が有効になっているプロジェクトにある場合にのみ表示され、実際の変数値を監視できません(そうでない場合でも、すべてのオブジェクトはnilとして表示されます)。

私の場合、それはcocoapodの依存関係を段階的にデバッグするときにのみ発生しました。

したがって、メインターゲットとプロジェクト設定が正しく設定されていても(ストリップデバッグシンボル=オフ、最適化レベルなし)、ブレークポイントに到達するポッドプロジェクトと同じであることを確認する必要があります。

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


他の答えを読んでください、彼らは同じことを示唆しています。しかし、それらはすべて私のプロジェクト(別名None [-O0])でオフになっています
Mojtaba

2
私の場合と同じように、プロジェクトでオフになっていると言っていましたが、ポッドの依存関係プロジェクトの構成を確認しましたか?
Gomino、2015年

Xcode 7でも同じ問題が発生します。おそらく、trachkerbirdライブラリを使い始めたときに問題が発生したと考えられます。しかし、ブレークポイントは自分のコード内にあります。
Mike

1
ポッドプロジェクトの場合、「プロジェクト」最適化レベル設定を「なし」に変更します。(ポッドターゲットは変更されません)。
おっと2016

2
これは誤りです。あなたがpod install再びするとき、それは上書きされます。このように変更してください。
Iulian Onofrei 2017

13

古いプロジェクト(Xcode 7.x +)を新しいXcode 8.3(8E162)にインポートした後、おそらくコンパイラの最適化が原因で、Swiftコンパイラ-最適化レベルがデフォルトでFast、Single-File Optimizationに設定されていることがわかります。

前

なしに変更して、問題を解決しました:

後


やったよ。私のために働いていません。Unityで生成されたiOSビルドでこの問題に直面しています。
チャンドニー

11

Editor-> Validate Settingsすべての変更を確認します。その後、あなたは得るべきですSwiftコンパイラー最適化レベルが設定されている

Debugをに設定しNoneます。


1
やったよ。私のために働いていません。Unityで生成されたiOSビルドでこの問題に直面しています。
チャンドニー

9

これが私にとっての解決策でした...

giminoの答えの行に沿って、cocoapodsを使用している場合は、次のような行をPodfileに追加します。

xcodeproj 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug

またはcocoapodsバージョン> = 1.0(Diejmonに感謝)

project 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug

MyProjectには、標準の「Debug」に加えて、デバッグ構成として「Debug-local」、「Debug-staging」、「Debug-PRODUCTION」があります。

デフォルトでは、cocoapodsは通常、リリースとしてポッド構成を生成します。このPodfile行により、デバッグであることを伝えることができます。


9

今日、同じ問題に遭遇し、それを理解しました(少なくとも私の場合は)。私はCocoaPodsも使用しており、テストターゲット(SwiftとObjCを混合)を実行するとこの問題が発生しました。

Xcode 7.2とiOS 9.2 SDKを使用しています。

下の画像では、変更前のターゲットとプロジェクトの最適化を確認できます。

変更前の最適化レベル

驚くべきことに、解決された最適化はなし[-O0]ですが、プロジェクト設定を-Osから-O0に変更した後にのみ、コンパイラーはターゲットの最適化を停止しました。

以下に、私の最終設定を示します。

変更後の最適化レベル


7

久しぶりに解決しました。そこ第三最適化フラグはありませんLTOか、Link Time Optimizationと驚くべきことに、誰もそれをここで言及しているし、いくつかの理由で、私はどちらかそれに注意を払っていません。Optimization Levelここに掲載されている多くのスクリーンショットでわかるように、設定のすぐ上にあります。

要約すると、デバッグのためにオフにする3つの異なる最適化フラグがあります。

  • LLVMリンク時間最適化(-flto
  • LLVM最適化レベル(-O
  • Swiftコンパイラの最適化レベル

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

LTOの詳細:http : //llvm.org/docs/LinkTimeOptimization.html


2
やったよ。私のために働いていません。Unityで生成されたiOSビルドでこの問題に直面しています。
チャンドニー

@チャンドニ、ここで私は同じ問題に直面しました、あなたは解決策を見つけましたか?
ランジャニ

2

デバッグできるようにSwiftポッドの最適化を無効にする必要がある場合は、以下をに追加しますPodfile。これにより、デバッグビルドのみの最適化が無効になります。

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      if config.name == "Debug"
        config.build_settings["SWIFT_OPTIMIZATION_LEVEL"] = "-Onone"
      end
    end
  end
end

1

デバッグ構成でコードが最適化されていませんか?デバッグ構成の最適化を誤って有効にしたようです。ターゲットの設定から無効にしてください。


3
最適化はすべてオフです。念のためビルドをリリースすることも
Mojtaba

@Mojtbaしかし、リリースモードは最適化をオンにします!
NobodyNada

0

このエラーは私に2回発生しましたが、いずれの場合も、サービスのリクエストに使用されたURLパラメータの誤りが原因でした。1つのケースでは、URLのポートセクションにスペースがあり、もう1つのケースでは、オプション値の一部がラップされていませんでした。

したがって、修正は、リクエストのURLが正しい形式であることを確認することでした。私の事件についてのより多くの情報、および同様の報告はここにあります


0

私がしたことはProduct > Clean、プロジェクトをクリーンアップ()して再度実行することだけです


0

これは単純化しすぎるかもしれませんが、リリース用に構築しているのですか、それとも最適化(SwiftまたはLLVMからシンボルを削除する)を使用して構築しているのですか?その場合は、スキームを編集してデバッグに切り替えるか、迅速またはLLVM最適化のビルド設定を編集してなし(0)にします。


0

内部でCライブラリを使用するポッドをデバッグしているときに誰かがこの問題に直面した場合に備えて、スレッドにリストされている他のすべてに加えて、プロジェクト設定を変更して機能させる必要があります。

ポッドプロジェクト設定-> Cを使用するターゲット->ビルド設定-> Apple Clang-カスタムコンパイラフラグ->その他のCフラグに移動し、-O3何らかの方法でそこに到達したフラグを削除します。

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