Swift 调试器在导入 ObjC 框架时不显示变量值

Swift debugger does not show variable values when importing ObjC framework

当我使用 Sprite Kit 创建一个新的 OS X "Game" 项目,并在我可以看到变量值的任何地方设置断点时:

然后我更改代码以导入我自己的框架 (TilemapKit),这是一个纯 Objective-C 框架:

import SpriteKit
import TilemapKit

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

没有进行其他更改。我什至没有使用任何 TilemapKit 代码(目前)。当断点触发时,我看到这个:

就观察变量值而言,整个项目不再是可调试的。这种行为是完全一致的。没有框架导入我可以再次调试。

因为我正在使用 Xcode 7 beta (7A121l) 和 OS X 10.11 开发者预览版,所以我知道这可能只是一个(临时)错误。

命令行 Tiles 设置为使用 Xcode 7.0 版本 btw。我尝试在框架目标中启用模块,确保部署目标相同 (10.11),禁用符号剥离。我添加了一个 Bridging Header 并在其中 #imported TilemapKit 框架(在这种情况下删除 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 应用程序中可以很好地调试相同的框架。

转到左上角的编辑方案。

如果是release

,修改配置为Debug

我收到一位 Apple 开发人员的消息,说他们已经观察到这个问题,可以通过将 .framework 移动到项目的子文件夹来解决这个问题。

显然 module .. was built in directory 错误仅在 .framework 与 .xcodeproj aka $(PROJECT_DIR).

位于同一文件夹中时出现

然而,将框架移动到子文件夹并没有解决我的问题,但在较新的 Xcode 7 beta 中解决此问题之前,它仍然值得一试(仍然出现在 beta 3 中)。

我可以确认 Xcode 版本 7.0 beta 4 (7A165t) 中正在发生这种情况。我必须删除我的 ObjC 框架才能将调试值设置为 return。如果删除框架不是一个选项,打印方法是老派调试,但仍然有效。

在我的例子中,这是因为我的项目中有冗余的 import 语句。

我的项目混合了 swift 和 objc 文件,所以我在 bridging_header.h 文件中有导入语句。

在我的 bridging_header.h 我有 #import blah.h

在其中一个 swift 文件中,我从一个框架中导入了一个多余的 header @import blah // From blah.framework

我从 swift 文件中删除了多余的导入,似乎已经修复了它。

我刚才遇到过这个问题。在我的例子中,Prefix.pch 被包含在 Bridging-Header.h 中。这本身不是问题,但在我的 Prefix.pch 中有许多 C 包含导致 lldb 无法导入 Bridging-Header。 所以我从 Bridging-Header 中删除了“#import Prefix.pch”,只将“#includes”复制到我需要在 swift.

中使用的 obj-c 文件中
  1. 调试配置的优化级别未设置为 None。 对于 Objective-C 个应用程序(如图 1 所示)和 Swift 个应用程序(如图 2 所示),请务必将其设置为 None。

  1. 构建配置 pop-up 菜单在方案编辑器的 运行 操作设置窗格中设置为发布。 在 Xcode 中,通过选择 Product > Scheme > Edit Scheme… 打开方案编辑器,select 在方案操作窗格中为您的应用程序执行 运行 操作,然后将 Build Configuration 设置为 Debug,如图所示在图 3 中。