当我使用 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 版本顺便说一句。我尝试在框架目标中启用模块,确保部署目标相同(10.11),禁用符号剥离。我添加了一个桥接 header 并在其中#imported了 TilemapKit 框架(在这种情况下删除 Swift 导入仍然会给我提供不可调试的应用程序,因此我如何或在何处导入框架似乎并不重要)。
是否有人对可能导致此行为的原因以及我如何解决它有任何建议 - 或者至少我如何尝试缩小问题范围?
罪魁祸首是否更有可能与项目的build设置和框架的build设置有关?我是否需要在应用程序项目中启用某些功能才能使其与 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 beta 中得到修复(在 beta 3 中仍然出现)。