Sprite Kitを使用して新しいOS X「ゲーム」プロジェクトを作成し、ブレークポイントを任意の場所に設定すると、変数値が正常に表示されます。
次に、コードを変更して、純粋なObjective-Cフレームワークである独自のフレームワーク(TilemapKit)をインポートします。
import SpriteKit
import TilemapKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
print("dang!")
}
}
他の変更はありません。 TilemapKitコードを使用していません(まだ)。ブレークポイントがトリガーされると、次のように表示されます。
変数値を監視する限り、プロジェクト全体のデバッグは停止します。この動作は完全に一貫しています。フレームワークのインポートがなければ、再度デバッグできます。
私は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アプリの同じフレームワークをうまくデバッグできます。
私はApple開発者からこの問題を観察したこと、そして.frameworkをプロジェクトのサブフォルダに移動することで修正できることを示すメッセージを受け取りました。
どうやら_module .. was built in directory
_エラーは、.frameworkが.xcodeproj別名$(PROJECT_DIR)
と同じフォルダーにある場合にのみ表示されます。
ただし、フレームワークをサブフォルダーに移動しても問題は解決しませんでしたが、新しいXcode 7ベータ版で修正されるまで試してみる価値はあります(ベータ3でも発生します)。
私の場合、これは私のプロジェクトのimport
ステートメントが重複しているために発生していました。
私のプロジェクトはSwiftとobjcファイルをミックスするので、bridging_header.h
ファイル。
私のbridging_header.h
私は#import blah.h
Swiftファイルの1つで、フレームワークから冗長ヘッダーをインポートしていました@import blah // From blah.framework
Swift=ファイルから冗長なインポートを削除しました。それは修正されたようです。
私はしばらく前にこの問題を抱えていました。私の場合、Prefix.pchはBridging-Header.h内に含まれていました。これ自体は問題ではありませんが、私のPrefix.pchの中には、lldbがBridging-Headerのインポートを失敗させる多くのCインクルードがありました。そこで、ブリッジングヘッダーから「#import Prefix.pch」を削除し、「#includes」だけをSwiftで使用する必要があるobj-cファイルにコピーしました。
これはXcodeバージョン7.0ベータ4(7A165t)で発生していることを確認できます。デバッグ値を返すには、ObjCフレームワークを削除する必要がありました。フレームワークの削除がオプションではない場合、印刷方法は昔ながらのデバッグですが、それでも機能します。