web-dev-qa-db-ja.com

Swift ObjCフレームワークのインポート時にデバッガーが変数値を表示しない

Sprite Kitを使用して新しいOS X「ゲーム」プロジェクトを作成し、ブレークポイントを任意の場所に設定すると、変数値が正常に表示されます。

enter image description here

次に、コードを変更して、純粋なObjective-Cフレームワークである独自のフレームワーク(TilemapKit)をインポートします。

import SpriteKit
import TilemapKit

class GameScene: SKScene {
    override func didMoveToView(view: SKView) {
        print("dang!")
    }
}

他の変更はありません。 TilemapKitコードを使用していません(まだ)。ブレークポイントがトリガーされると、次のように表示されます。

enter image description here

変数値を監視する限り、プロジェクト全体のデバッグは停止します。この動作は完全に一貫しています。フレームワークのインポートがなければ、再度デバッグできます。

私はXcode 7ベータ版(7A121l)とOS X 10.11開発者プレビュー版を使用しているため、これは単に(一時的な)バグである可能性があることを知っています。

コマンドラインタイルは、Xcode 7.0バージョンbtwを使用するように設定されています。フレームワークターゲットでモジュールを有効にし、展開ターゲットが同じ(10.11)であることを確認し、シンボルストリッピングを無効にしました。ブリッジングヘッダーを追加し、その中にTilemapKitフレームワークを#importしました(その場合にSwiftインポートを削除すると、デバッグ不能なアプリが引き続き提供されるため、どのように問題になるか、フレームワークをインポートします)。

誰がこの動作を引き起こす可能性があるのか​​、どのように修正するのか、少なくとも問題を絞り込む方法を提案していますか?

犯人は、プロジェクト対フレームワークのビルド設定に関係している可能性が高いですか? ObjCフレームワークと互換性を持たせるために、アプリプロジェクトで何かを有効にする必要がありますか? (他のリンカーフラグで-ObjCを既に取得しています)


更新:

po selfデバッグコンソールでこの通知を見つけました。

<built-in>:3:6: error: module 'TilemapKit' was built in directory '/TilemapKit.framework' but now resides in directory './TilemapKit.framework'
#define __clang_major__ 7
     ^
missing required module 'TilemapKit'
Debug info from this module will be unavailable in the debugger.

フレームワークのビルドディレクトリが変更されたのはなぜですか?そして、なぜそれが重要で、これを修正する方法ですか?

PS:新しいObjCアプリの同じフレームワークをうまくデバッグできます。

39
LearnCocos2D

私はApple開発者からこの問題を観察したこと、そして.frameworkをプロジェクトのサブフォルダに移動することで修正できることを示すメッセージを受け取りました。

どうやら_module .. was built in directory_エラーは、.frameworkが.xcodeproj別名$(PROJECT_DIR)と同じフォルダーにある場合にのみ表示されます。

ただし、フレームワークをサブフォルダーに移動しても問題は解決しませんでしたが、新しいXcode 7ベータ版で修正されるまで試してみる価値はあります(ベータ3でも発生します)。

22
LearnCocos2D

私の場合、これは私のプロジェクトのimportステートメントが重複しているために発生していました。

私のプロジェクトはSwiftとobjcファイルをミックスするので、bridging_header.hファイル。

私のbridging_header.h私は#import blah.h

Swiftファイルの1つで、フレームワークから冗長ヘッダーをインポートしていました@import blah // From blah.framework

Swift=ファイルから冗長なインポートを削除しました。それは修正されたようです。

16
Hugo

私はしばらく前にこの問題を抱えていました。私の場合、Prefix.pchはBridging-Header.h内に含まれていました。これ自体は問題ではありませんが、私のPrefix.pchの中には、lldbがBridging-Headerのインポートを失敗させる多くのCインクルードがありました。そこで、ブリッジングヘッダーから「#import Prefix.pch」を削除し、「#includes」だけをSwiftで使用する必要があるobj-cファイルにコピーしました。

0
Charles Barros
  1. 最適化レベルは、デバッグ構成の[なし]に設定されていません。図1に示すObjective-Cアプリと、図2に示すSwiftアプリの場合は必ずNoneに設定してください。

Figure 1 & Figure 2

  1. [ビルド構成]ポップアップメニューは、スキームエディターの[実行アクション設定]ペインで[リリース]に設定されています。 Xcodeで、製品>スキーム>スキームの編集…を選択してスキームエディターを開き、スキームアクションペインでアプリの実行アクションを選択し、図3に示すようにビルド構成をデバッグに設定します。

Figure 3

0
Ar No

これはXcodeバージョン7.0ベータ4(7A165t)で発生していることを確認できます。デバッグ値を返すには、ObjCフレームワークを削除する必要がありました。フレームワークの削除がオプションではない場合、印刷方法は昔ながらのデバッグですが、それでも機能します。

0
Justin Domnitz