1

该项目的文档说只需添加框架和链接器标志,您就可以开始了。经过数小时和数小时的浪费时间后,我发现这不是真的。如果这样做,项目将看不到头文件。你必须把框架放在某个地方,编译器才能找到头文件。就我而言,当我将框架放入 /Developer/Library/Frameworks 并告诉它递归搜索该框架目录(不要摆弄标题搜索目录)时,这有效。

然后我得到的问题是链接失败并显示消息:

ld: framework not found OCHamcrestIOS

我注意到该项目的文档说它已针对 Xcode 4 进行了更新。我在检查了代码后拉下了框架的二进制文件,并浪费了大量时间无法构建框架的 IOS 版本。

文档在这里

我还在该文档中注意到可可说明告诉您将复制文件阶段放入构建中。我试过了。没有改变结果。

上次我掉进水坑是因为库是 C++ 代码。也许这仍然是问题所在。

除非这里有一个快速的解决方案,否则我将重新使用 STAsserts,尽管这种前景令人作呕,但情况要糟糕得多。


更新:重新安装 Xcode。还是不行。有一些便宜的方法可以使这项工作,例如将头文件添加到项目中。做了一篇关于这个的博客文章,带出了一个有同样经历的人。

4

2 回答 2

1

我在我的项目中使用了许多框架。有些是别人的,有些是我的。查看文档,我建议复制阶段的内容不适用于 iOS 开发。所以我不会那样做。我从https://github.com/jonreid/OCHamcrest下载了最新的 zip ,它似乎包含一个准备就绪的 iOS 静态库。(不在我的 Mac 上,所以我无法测试确认)。

无论如何,我包含静态库的方式是

  • 选择项目(XCode 4)。
  • 选择我要将库添加到的目标。
  • 选择构建阶段选项卡。
  • 展开 Link binary with Libraries。
  • 单击 [+] 按钮添加框架。
  • 单击 [Add Other ...] 按钮并导航到包含<lib>.framework目录的目录并选择该目录。

就这样。目标搜索路径将更新为包括框架目录,并且框架将列在项目下方的左侧。展开它将显示标题。

你提到的问题听起来像几件事。首先,未找到的框架听起来像是该框架尚未包含在目标中。当您在左侧的项目列表中选择框架时,您应该能够看到它的Target Membership显示在右侧。检查它是否为您正在编译的目标打开。

其次,构建框架并不是一项简单的任务,所以除非你有脚本来做,否则不要尝试它。我这样说是因为构建一个 iOS 静态框架意味着为模拟器和设备编译,将编译的 lib 文件组合成一个通用的,然后将它和头文件存储在特定的目录结构中。

不过,从 OCHamcrest 下载的 zip 似乎包含正确的 OCHamcrestiOS.framework。因此,如果您将该目录存储在某处并使用我上面概述的步骤链接到它,它应该可以正常工作。

于 2011-06-20T00:27:55.737 回答
0

所以我现在采用的解决方案,经过多次折腾,是将框架包含在项目中。

  1. 在 Xcode 项目中创建一个名为 Third Party 的组。
  2. 将其链接到名为第三方的文件夹。
  3. 转到 Xcode 中的添加文件并选择框架。
  4. 将其拖到依赖项上。
  5. 运行测试,他们通过了!

无论如何,这可能更可取,因为在 /System/Library/Frameworks 中引用它会带来一些版本控制问题,并且可以非常快速地设置。此外,我们有一个持续集成服务器,并且每当发生变化时必须进入那里并同步版本并不是那么好。

谢谢你检查,德里克。

于 2011-06-20T20:13:51.423 回答