2

我曾在 Xcode 项目中使用机器 A,该项目链接到 bitbucket git repo。所有最新且已提交的单元测试运行良好。

现在我想在机器 B 上处理它。我启动 Xcode,克隆存储库,所有文件都在我的项目中。我按 cmd-U 运行单元测试,它们以闪电般的速度“通过”,或者更确切地说,它们根本不运行。这是我收到的错误消息:

objc[6434]: GC: forcing GC OFF because OBJC_DISABLE_GC is set
2013-06-11 10:20:05.935 otest[6434:303] The test bundle at /Users/oliver/Library/Developer/Xcode/DerivedData/TextToolsSystem-celmxjqlddjrjvblrklrnvdpytux/Build/Products/Debug/TextToolsSystemTests.octest could not be loaded because a link error occurred. It is likely that dyld cannot locate a framework framework or library that the the test bundle was linked against, possibly because the framework or library had an incorrect install path at link time.
2013-06-11 10:20:05.942 otest[6436:203] *** NSTask: Task create for path ' TextToolsSystemTests' failed: 22, "Invalid argument". Terminating temporary process.

该项目不使用任何额外的框架或库,并且在机器 A 上运行良好。上述目录的列表产生

total 192 -rwxr-xr-x 1 oliver staff 96604 11 Jun 10:20 TextToolsSystemTests

那个文件是一个Mach-O 64-bit bundle x86_64.

机器 A:MBP,OS X 10.8.2,Xcode 4.6.2
机器 B:MBA,OS X 10.7.5,Xcode 4.6.2
构建项目没有错误(它还没有可以运行的可执行文件)

我是否需要调整任何设置以使其工作,而克隆没有延续?

4

1 回答 1

0

好的,经过一番挖掘,我找到了解决方案:

  1. 我曾经otool -L列出目标引用的所需库(感谢this question for reference)。

  2. 然后我手动添加了所有库/框架,即使它们是 CoreFoundation 等,通常不需要。但是,它也包括libobjc.A.dylib. 现在我得到了一个不同的错误,dyld: lazy symbol binding failed: Symbol not found: _objc_setProperty_atomic这是该库中预期的。

  3. 然后我搜索了那个错误消息,它把我带到了这个问题,它没有被接受的答案,但是在评论中说我的问题是我有一个包含在部署目标 6.0 中的框架。使用部署目标 5.0 重新编译后,所有项目和子项目都使用部署目标 5.0 构建,一切正常。

  4. 我检查了 OS X 部署目标,它被设置为 10.8——但机器 B 只运行 10.7!所以我将目标更改为 10.7,然后它工作了。

因此,总结一下:问题在于部署目标设置为高于当前机器的操作系统版本。呸!

于 2013-06-16T21:30:49.507 回答