代替タイトル(検索を支援するため)
- Xcode 8でObjective-CアプリにリンクされたSwift 2.3フレームワークをデバッグできません
error in auto-import: failed to get module 'XYZ' from AST context
Xcode 8- Xcode 8はデバッグできませんSwiftフレームワーク
warning: Swift error in module <XYZ>
- 回避策; XcodeデバッガーはObjective-Cのみで記述されたアプリをデバッグできませんが、Swiftのみで記述されたフレームワークに対してリンクします。(28312362)
Swift 2.x.で書かれたいくつかのモジュール(フレームワーク)に対してリンクするObjective-Cで書かれたアプリがあります。
すべて(デバッグなど)は xcode7 で正常に動作しますが、 xcode8 に移動し、使用するモジュールを更新する場合 Swift2. できませんでしたモジュールをデバッグします。
LLDBは次のエラーを報告しました。
warning: Swift error in module XYZ.
Debug info from this module will be unavailable in the debugger.
error: in auto-import:
failed to get module 'ABC' from AST context
モジュールをSwift 2.3。に組み込まれているアプリにリンクする場合、これは発生しません。
アプリターゲットの[ビルド設定]の下にユーザー定義の設定を追加します。
Swift_VERSION = 2.3
これがXcode 8のバグなのか、それともAppleポリシー(開発者にSwift 3.0 ??デフォルトでは、Xcode 8はSwift 3.0バージョンの標準Swift=ランタイムライブラリをインストールします。
LLDMでのデバッグに関しては、Swift 2.3モジュールはロードに失敗します(Swift 3.0ランタイムに)。
アプリにSwift 2.3(またはレガシーSwift as Apple call it))の使用を強制すると、問題が修正されます。
Swiftアプリにはこの設定がXcodeによって公開されていますが、Objective-Cアプリの場合は手動で追加する必要があります。
Swift 2.3コードをできるだけ早くSwift 3.0に移植してください。Appleは2.x長いです。
私にとっては、痛みを伴うだけでなく時間もかかりました。
import SDWebImage
問題となった。フレームワークの1つにSDWebImageが既にパックされていて(そしてそれを見ることができませんでした)、そのフレームワークはObjective-Cであり、アプリはSwiftでした。また、SDWebImageをプロジェクトに追加しました。これは、作成するクラスで使用しているため、Xcodeデバッガーが処理できなかった混乱を引き起こしたためです。したがって、基本的に、何も複製されていないことを確認してください。たとえば、SDWebImageのような一般的なものをチェックします。
デバッグにはfr vの代わりにpoを使用してください
さらにデバッグする場合 https://www.codeproject.com/Articles/1181358/Debugging-with-Xcode
WWDC 2017でSeanという名前のAppleエンジニアとこの問題について話し合いました。
私のチームはこれを理解しようとして数週間を費やしましたが、それはAppleのコンパイラのバグになってしまいました。また、非常に簡単な回避策があります。
コンパイルフラグがフレームワークとプロジェクトから集計される方法にバグがあり、「純粋なObjective-C」プロジェクトがそれを「アクティブ化」します。
解決策:Objective-Cプロジェクトに1つの空のSwiftファイル( "Whatever.Swift"、または何でも))を追加して、not-pure-objective-c(new-> file ->スイフトファイル、ブリッジングヘッダーは作成しないでください。ファイルにはFoundationのインポートのみが含まれます。
以上です。問題が解決しました。
9.3シミュレータでデバッグしようとしたときに、error in auto-import: failed to get module 'XYZ' from AST context
メッセージに遭遇しました。 10.2シミュレータに切り替えることで問題は解決しました。
Carthageでフレームワークを構築するときに、これに遭遇しました。デバッグしようとすると、Obj-Cフレームワークの依存関係を参照するエラーが出力されます。
私はこれを見つけました ブログ投稿 私のプロジェクトに次のユーザー定義のビルド設定を追加することを提案しました:
デバッグ用:REMOVE_HEADERS_FROM_EMBEDDED_BUNDLES = NO
リリースの場合:REMOVE_HEADERS_FROM_EMBEDDED_BUNDLES = YES
これで問題が解決しました。
私の場合、ビルド設定ファイルからObjective-C Bridging header
を削除する必要がありました。私のブリッジングヘッダーファイルは何もしませんでした。
Xcodeを再起動してください。私の場合、問題は解決しました。
Timが示唆したとおり https://stackoverflow.com/a/41876400/1840269 問題の根本原因は重複の問題でした。
Obj-cとSwiftの両方から使用されるSDWebImageのobj-cラッパーカテゴリがありました。 Swiftからカテゴリをインポートするとき、SDWebImageポッドは既にSwiftモジュールとして自身を公開しているため、再定義/重複インポートのためにすべてが爆発しました。
ソリューション? obj-cカテゴリをSwift拡張として再実装しました。拡張の前に@objc
を追加することにより、Swiftとobj-cの両方から使用し続けました。 obj-cから#import "product-Swift.h"
ファイルをインポートします。
そして、おそらくチェックから始めます: https://developer.Apple.com/library/content/qa/qa1947/_index.html 。
常にprintコマンドを使用して解決およびデバッグするのに2日かかりました。今、私は問題を得ました:
私のプロジェクトはSwiftであり、Swiftのポッドにインポートされたのと同じobjective-Cライブラリを使用していました(以前のObjective-Cプロジェクトはこれにマージされました)、インポートIQKeyboardManagerとインポートを使用していましたIQKeyboardManager.h "ヘッダーも同様です。それが競合し、ヘッダーの1つを削除すると、問題がようやく解決しました。このタイプの重複をライブラリで確認できます。
私の場合、LLDBで報告された「C」コードにコンパイラエラーがあり、エラーを修正した後、LLDBが再び動作を開始しました。