Skip to main content
 首页 » 编程设计

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

2024年04月18日70sharpest

当我使用 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 中仍然出现)。