2010-03-18 82 views
6

当我从命令行运行iPhone应用程序时,将框架添加到我的项目时遇到一些困难。 我的最终目标是从自动构建过程中运行应用程序测试。dyld:Library not loaded - 当应用程序从命令行运行时

当我运行在Xcode我的应用程序:

我添加了一个“复制文件”构筑阶段我的目标和一切顺利。 副本设置为$(BUILT_PRODUCTS_DIR)为“绝对路径”

当我从终端运行我的应用程序(使用iphonesim项目)我得到这个错误:

dyld: Library not loaded: @rpath/OCMock.framework/Versions/A/OCMock 

UIKitApplication:indemnisation[0xb894][26380]  Referenced from: /Users/Admin/Library/Application Support/iPhone Simulator/User/Applications/CD5729B5-A674-49B2-91F6-AD398094B6F8/indemINT.app/indemINT 

什么我不明白的是,复制构建阶段只是将框架文件复制到与应用程序相同的目录中。

当我从命令行运行应用程序时,框架文件已经在同一个目录中。有谁知道它为什么不起作用?

我也尝试添加OCMock.framework在以下目录中(没有成功):提前

/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library 

/Library/Frameworks 

/Users/Admin/Library/Application Support/iPhone Simulator/User/Applications/CD5729B5-A674-49B2-91F6-AD398094B6F8 

感谢, 文森特。

回答

2

iPhone不支持传统的Mac OS X框架。尽管iPhone确实使用以“.framework”结尾的文件夹,但这些文件夹的结构与典型的Mac OS X框架不同。最值得注意的是,iPhone框架只允许使用静态库,而典型的Mac OS X框架则是动态加载的。该消息来自dyld表示您正在使用共享库;但是,针对iPhone的应用程序可能只能静态链接。

+1

请注意,如果你想这样做的OSX,您的目标应设定为«框架»,没有子路径,在«复制文件»建设阶段,因此包含在框架中的应用(有它在与应用程序相同的文件夹不是解决方案)。 – Macmade 2010-03-18 17:51:08

8

我在Lion上的Xcode 4.2(4D199)中只有这个相同的确切错误。我将OCMock.framework文件夹拖放到我的项目中,然后选中“复制文件”复选框。我看到了上面的答案,并意识到我忽略了添加“复制文件”构建阶段来移动框架。我添加了一个并在编译文件构建阶段之后立即将其拖动,并尝试再次运行我的测试。直到我将“复制文件”阶段中的目的地更改为“产品目录”后,我才能完成工作。使用“框架”或“共享框架”不起作用。

+0

谢谢你的指针! – 2013-04-02 16:01:10

0

OCMock是作为一个框架分发的,iPhone不允许你构建自己的任意框架(在只有128MB内存且没有交换的设备上有足够的理由这样做)。

我在网络上很多地方看到的解决方案是将OCMock.framework放入/ Library/Frameworks或标准框架搜索路径中的任何其他位置。这不是一个很好的解决方案:您的构建系统现在取决于您的特定机器的状态。不好。

另一种选择是将OCMock的源代码添加到您的单元测试目标中。这可以工作,但是没有必要,因为你的测试永远不会在iPhone上运行,所以为什么要为ARM构建它们呢?为iPhone模拟器构建的可执行文件(Mac OS X二进制文件)可以很好地链接到动态库。我们可以利用这个优势。

接下来的是什么,我相信是获得OCMock与iPhone项目工作的最佳方式:

首先,添加OCMock.framework到您的项目。确保将其添加到您的单元测试目标中,而不是您的应用程序。

接下来,将文件复制阶段添加到您的单元测试的目标。设置它像这样:

目标:绝对路径 完整路径:$(BUILT_PRODUCTS_DIR)

现在,拖OCMock.framework到新的文件复制阶段将其添加到文件列表中被复制。

最后,拖动文件复制阶段,这是我给它改名为“复制OCMock”,在编译源代码和二进制链接与图书馆阶段之间。

这就是它!运行(通过运行我的意思是构建)你的测试,一切都应该正常工作。

相关问题