当我创建一个新的OS X" Game"使用Sprite Kit进行项目,并在任何地方设置一个断点,我可以看到变量值就好了:
然后我更改代码以导入我自己的框架(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应用程序中的相同框架可以调试得很好。
答案 0 :(得分:22)
我从Apple开发人员那里得到一条消息,说他们已经观察到了这个问题,并且可以通过将.framework移动到项目的子文件夹来修复它。
显然只有.framework与.xcodeproj aka module .. was built in directory
位于同一文件夹中时才会出现$(PROJECT_DIR)
错误。
然而,将框架移动到子文件夹并没有解决我的问题,但它仍然值得一试,直到在新的Xcode 7 beta中修复(仍然发生在beta 3中)。
答案 1 :(得分:16)
在我的情况下,由于我的项目中有多余的import
语句,这种情况正在发生。
我的项目混合了swift和objc文件,所以我在bridging_header.h
文件中有import语句。
在我的bridging_header.h
#import blah.h
在其中一个swift文件中,我从框架中导入了一个冗余头
@import blah // From blah.framework
我从swift文件中删除了冗余导入,似乎修复了它。
答案 2 :(得分:0)
我可以确认这是在Xcode Version 7.0 beta 4(7A165t)中发生的。我不得不删除我的ObjC框架以返回Debugging值。如果删除框架不是一个选项,打印方法是老式的调试,但仍然有效。
答案 3 :(得分:0)
我刚才有这个问题。在我的情况下,Prefix.pch被包含在Bridging-Header.h中。这不是一个问题,但在我的Prefix.pch中有许多C包含使lldb无法导入Bridging-Header。 所以我从Bridging-Header中删除了“#import Prefix.pch”,并将“#includes”复制到了我需要在swift中使用的obj-c文件。
答案 4 :(得分:0)
答案 5 :(得分:-4)
转到左上角的编辑方案。
将配置更改为Debug,如果它是release