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

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

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

ld: framework not found OCHamcrestIOS

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

文档是here。

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

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

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


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

【问题讨论】:

    标签: xcode unit-testing ochamcrest


    【解决方案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】:

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

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

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

    感谢您查看,德里克。

    【讨论】:

      猜你喜欢
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 2012-09-18
      相关资源
      最近更新 更多