web-dev-qa-db-ja.com

デバッグできませんSwift Objective-Cアプリに埋め込まれたモジュール/フレームワーク

代替タイトル(検索を支援するため)

  • 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。に組み込まれているアプリにリンクする場合、これは発生しません。

29
rjstelling

tl:dr

アプリターゲットの[ビルド設定]の下にユーザー定義の設定を追加します。

Swift_VERSION = 2.3

Swift_VERSION = 2.3 — Build Settings

詳細情報

これが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長いです。

6
rjstelling

私にとっては、痛みを伴うだけでなく時間もかかりました。

import SDWebImage問題となった。フレームワークの1つにSDWebImageが既にパックされていて(そしてそれを見ることができませんでした)、そのフレームワークはObjective-Cであり、アプリはSwiftでした。また、SDWebImageをプロジェクトに追加しました。これは、作成するクラスで使用しているため、Xcodeデバッガーが処理できなかった混乱を引き起こしたためです。したがって、基本的に、何も複製されていないことを確認してください。たとえば、SDWebImageのような一般的なものをチェックします。

18
Tim Friedland

デバッグにはfr vの代わりにpoを使用してください

さらにデバッグする場合 https://www.codeproject.com/Articles/1181358/Debugging-with-Xcode

11

WWDC 2017でSeanという名前のAppleエンジニアとこの問題について話し合いました。

私のチームはこれを理解しようとして数週間を費やしましたが、それはAppleのコンパイラのバグになってしまいました。また、非常に簡単な回避策があります。

コンパイルフラグがフレームワークとプロジェクトから集計される方法にバグがあり、「純粋なObjective-C」プロジェクトがそれを「アクティブ化」します。

解決策:Objective-Cプロジェクトに1つの空のSwiftファイル( "Whatever.Swift"、または何でも))を追加して、not-pure-objective-c(new-> file ->スイフトファイル、ブリッジングヘッダーは作成しないでください。ファイルにはFoundationのインポートのみが含まれます。

以上です。問題が解決しました。

9
fredericouimet

9.3シミュレータでデバッグしようとしたときに、error in auto-import: failed to get module 'XYZ' from AST contextメッセージに遭遇しました。 10.2シミュレータに切り替えることで問題は解決しました。

2
Jason Moore

Carthageでフレームワークを構築するときに、これに遭遇しました。デバッグしようとすると、Obj-Cフレームワークの依存関係を参照するエラーが出力されます。

私はこれを見つけました ブログ投稿 私のプロジェクトに次のユーザー定義のビルド設定を追加することを提案しました:

デバッグ用:REMOVE_HEADERS_FROM_EMBEDDED_BUNDLES = NO

リリースの場合:REMOVE_HEADERS_FROM_EMBEDDED_BUNDLES = YES

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

2
Austin

私の場合、ビルド設定ファイルからObjective-C Bridging headerを削除する必要がありました。私のブリッジングヘッダーファイルは何もしませんでした。

2

Xcodeを再起動してください。私の場合、問題は解決しました。

1
saltwat5r

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

0
micmdk

常にprintコマンドを使用して解決およびデバッグするのに2日かかりました。今、私は問題を得ました:

私のプロジェクトはSwiftであり、Swiftのポッドにインポートされたのと同じobjective-Cライブラリを使用していました(以前のObjective-Cプロジェクトはこれにマージされました)、インポートIQKeyboardManagerとインポートを使用していましたIQKeyboardManager.h "ヘッダーも同様です。それが競合し、ヘッダーの1つを削除すると、問題がようやく解決しました。このタイプの重複をライブラリで確認できます。

0
Taranjeet Kaur

私の場合、LLDBで報告された「C」コードにコンパイラエラーがあり、エラーを修正した後、LLDBが再び動作を開始しました。

0
mbonness