40

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

在此处输入图像描述

然后我更改代码以导入我自己的框架(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 应用程序中的相同框架可以很好地调试。

4

6 回答 6

23

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

显然,module .. was built in directory仅当 .framework 与 .xcodeproj aka 位于同一文件夹中时,才会出现错误$(PROJECT_DIR)

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

于 2015-07-16T13:35:54.723 回答
16

就我而言,这是因为我的项目中有多余的import陈述而发生的。

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

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

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

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

于 2016-04-18T23:45:57.280 回答
0
  1. 调试配置的优化级别未设置为无。对于如图 1 所示的 Objective-C 应用程序和如图 2 所示的 Swift 应用程序,请务必将其设置为 None。

图 1 & 图 2

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

图 3

于 2018-03-19T03:38:03.880 回答
0

我前段时间遇到过这个问题。就我而言,Prefix.pch 被包含在 Bridging-Header.h 中。这本身不是问题,但在我的 Prefix.pch 中有许多 C 包含使 lldb 无法导入桥接头。因此,我从 Bridging-Header 中删除了“#import Prefix.pch”,并将“#includes”复制到我需要在 swift 中使用的 obj-c 文件中。

于 2017-05-04T18:49:12.897 回答
0

我可以确认这发生在 Xcode 版本 7.0 beta 4 (7A165t) 中。我必须删除我的 ObjC 框架才能让调试值返回。如果删除你的框架不是一个选项,打印方法是老式的调试,但仍然有效。

于 2015-08-18T12:25:45.430 回答
-4

转到左上角的编辑方案。

并将配置更改为调试,如果是发布这里

于 2015-07-10T06:23:11.793 回答