将 OCHamcrest 添加到 IOS 项目

Posted

技术标签:

【中文标题】将 OCHamcrest 添加到 IOS 项目【英文标题】:Adding OCHamcrest to an IOS Project 【发布时间】:2011-06-19 23:23:20 【问题描述】:

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

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

ld: framework not found OCHamcrestios

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

文档是here。

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

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

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


更新:重新安装 Xcode。还是不行。有一些便宜的方法可以使这项工作,例如将头文件添加到项目中。对此进行了blog post 的处理,从而发现了具有相同经历的人。

【问题讨论】:

【参考方案1】:

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

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

选择项目 (XCode 4)。 选择我要添加库的目标。 选择构建阶段选项卡。 使用库扩展链接二进制文件。 单击 [+] 按钮添加框架。 单击 [Add Other ...] 按钮并导航到包含 .framework 目录的目录并选择该目录。

仅此而已。目标搜索路径将更新为包括框架目录,框架将列在项目下方的左侧。展开它将显示标题。

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

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

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

【讨论】:

它没有。我就是这么做的。我使用了 OCHamcrestIOS.framework,因为这就是文档所说的。我以前用的是静态库,因为没有IOS框架。但是框架不起作用。这就是我在这里发帖的原因。 嗨 Rob,我刚刚拿起我的 Mac 并按照我上面所说的做了 - 下载了 1.5 版本,包括 OCHamcrestIOS.framework,添加了 #define OC_SHORTHAND 和 #include 一个断言,一切正常。我还使用“-ObjC -all_load”链接器标志。我不需要修改任何其他内容或将框架放在任何特定目录中。我猜你的设置不太对劲。但我不知道是什么。 是的,我刚刚在这台机器上安装了 Xcode。也许我会核对它并重新开始。谢谢! 重新安装 Xcode。还是不行。这里发生了一些非常不正常的事情。【参考方案2】:

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

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

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

感谢您查看,德里克。

【讨论】:

以上是关于将 OCHamcrest 添加到 IOS 项目的主要内容,如果未能解决你的问题,请参考以下文章

OCMockito / OCHamcrest 验证数组包含对象属性

OCHamcrest 匹配器参数与验证时的 Mockito 模拟不兼容

将 tvOS Parse SDK 添加到现有 iOS 项目

将 TICoreDataSync 添加到 ios/mac 项目

将 .a 文件添加到代号一个 iOS 项目

iOS - 将项目添加到 plist