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

eivnm1vs  于 2022-11-06  发布在  Swift
关注(0)|答案(6)|浏览(183)

当我使用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测试版(7A 121 l)和OSX 10.11开发者预览版上,我知道这可能只是一个(临时的)bug。
命令行Tiles被设置为使用Xcode 7.0版本btw。我尝试在框架目标中启用模块,确保部署目标相同(10.11),禁用了符号剥离。我添加了一个桥接头,并在其中#导入了TilemapKit框架(在这种情况下,删除Swift导入仍然会给予我一个不可调试的应用程序,所以我如何或在哪里导入框架似乎并不重要)。
有没有人对导致这种行为的原因以及我如何解决它有什么建议?或者至少我如何缩小问题的范围?
罪魁祸首更可能连接到项目的构建设置还是框架的构建设置?我是否需要在应用项目中启用某些内容以使其与ObjC框架兼容?(我已经在Other Linker标志中获得了-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应用程序中的相同框架可以调试得很好。

beq87vna

beq87vna1#

我从一个苹果开发人员那里收到一条消息,说他们已经发现了这个问题,可以通过将.framework移到项目的子文件夹中来解决。
显然,只有当.framework与.xcodeproj(即$(PROJECT_DIR))位于同一个文件夹中时,才会出现module .. was built in directory错误。
然而,将框架移到一个子文件夹并没有解决我的问题,但它仍然值得一试,直到这个问题在一个新的Xcode 7测试版中得到解决(仍然发生在测试版3)。

w6mmgewl

w6mmgewl2#

在我的例子中,这是因为我的项目中有冗余的import语句。
我的项目混合了swift和objc文件,所以我在bridging_header.h文件中有import语句。
在我的bridging_header.h中,我有#import blah.h
在其中一个swift文件中,我从框架@import blah // From blah.framework中导入了一个冗余的头文件
我从swift文件中删除了多余的导入,这似乎已经修复了它。

xuo3flqw

xuo3flqw3#

我可以确认Xcode Version 7.0 beta 4(7A165t)中也会发生这种情况。我必须删除我的ObjC框架才能返回调试值。如果不能删除框架,那么print方法是老式的调试方法,但仍然可以工作。

oiopk7p5

oiopk7p54#

不久前我遇到了这个问题。在我的例子中,Prefix.pch被包含在Bridging-Header.h中。这不是一个问题,但是在我的Prefix.pch中有很多C包含,使得lldb无法导入Bridging-Header。所以我从Bridging-Header中删除了“#import Prefix.pch”,只将“#include”复制到我需要在Swift中使用的obj-c文件中。

mwyxok5s

mwyxok5s5#

  1. Debug配置的Optimization级别没有设置为None。请确保将Objective-C应用程序(如图1所示)和Swift应用程序(如图2所示)的Optimization级别设置为None。

1.在方案编辑器的Run action settings窗格中,Build Configuration弹出式菜单被设置为Release。在Xcode中,通过选择Product〉Scheme〉Edit Scheme...打开方案编辑器,在方案操作窗格中为您的应用选择Run action,然后将Build Configuration设置为Debug,如图3所示。

qvtsj1bj

qvtsj1bj6#

转到左上角的编辑方案。
如果是

版本,则将配置更改为Debug

相关问题