当我使用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应用程序中的相同框架可以调试得很好。
6条答案
按热度按时间beq87vna1#
我从一个苹果开发人员那里收到一条消息,说他们已经发现了这个问题,可以通过将.framework移到项目的子文件夹中来解决。
显然,只有当.framework与.xcodeproj(即
$(PROJECT_DIR)
)位于同一个文件夹中时,才会出现module .. was built in directory
错误。然而,将框架移到一个子文件夹并没有解决我的问题,但它仍然值得一试,直到这个问题在一个新的Xcode 7测试版中得到解决(仍然发生在测试版3)。
w6mmgewl2#
在我的例子中,这是因为我的项目中有冗余的
import
语句。我的项目混合了swift和objc文件,所以我在
bridging_header.h
文件中有import语句。在我的
bridging_header.h
中,我有#import blah.h
在其中一个swift文件中,我从框架
@import blah // From blah.framework
中导入了一个冗余的头文件我从swift文件中删除了多余的导入,这似乎已经修复了它。
xuo3flqw3#
我可以确认Xcode Version 7.0 beta 4(7A165t)中也会发生这种情况。我必须删除我的ObjC框架才能返回调试值。如果不能删除框架,那么print方法是老式的调试方法,但仍然可以工作。
oiopk7p54#
不久前我遇到了这个问题。在我的例子中,Prefix.pch被包含在Bridging-Header.h中。这不是一个问题,但是在我的Prefix.pch中有很多C包含,使得lldb无法导入Bridging-Header。所以我从Bridging-Header中删除了“#import Prefix.pch”,只将“#include”复制到我需要在Swift中使用的obj-c文件中。
mwyxok5s5#
1.在方案编辑器的Run action settings窗格中,Build Configuration弹出式菜单被设置为Release。在Xcode中,通过选择Product〉Scheme〉Edit Scheme...打开方案编辑器,在方案操作窗格中为您的应用选择Run action,然后将Build Configuration设置为Debug,如图3所示。
qvtsj1bj6#
转到左上角的编辑方案。
如果是
版本,则将配置更改为Debug