导入ObjC框架

时间:2015-07-04 10:12:43

标签: xcode debugging frameworks swift2 xcode7-beta2

当我创建一个新的OS X" Game"使用Sprite Kit进行项目,并在任何地方设置一个断点,我可以看到变量值就好了:

enter image description here

然后我更改代码以导入我自己的框架(TilemapKit),这是一个纯粹的Objective-C框架:

import SpriteKit
import TilemapKit

class GameScene: SKScene {
    override func didMoveToView(view: SKView) {
        print("dang!")
    }
}

没有进行任何其他更改。我甚至都没有使用任何TilemapKit代码。当断点触发时,我看到了:

enter image description here

只要观察变量值,整个项目就会停止调试。这种行为完全一致。没有框架导入,我可以再次调试。

由于我在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应用程序中的相同框架可以调试得很好。

6 个答案:

答案 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)

  1. 调试配置的优化级别未设置为“无”。 对于Objective-C应用程序,请确保将其设置为None,如图1所示,对于Swift应用程序,如图2所示。
  2. Figure 1 & Figure 2

    1. “构建配置”弹出菜单在方案编辑器的“运行操作设置”窗格中设置为“发布”。 在Xcode中,选择Product&gt;打开方案编辑器。方案&gt;编辑方案...,在方案操作窗格中选择应用程序的运行操作,然后将构建配置设置为调试,如图3所示。
    2. Figure 3

答案 5 :(得分:-4)

转到左上角的编辑方案。

将配置更改为Debug,如果它是re​​lease here