我开始使用Xcode 4.2,但我在生成代码覆盖时遇到了问题。
Xcode 4.2不包含GCC 4.2编译器,但它已被LLVM GCC 4.2编译器取代。 第一个需要在以前版本的Xcode中生成代码覆盖率。
我按照CoverStory website上的'教程'进行了操作,但结果如下:
a)当我完成所有步骤时,没有覆盖文件 b)当我将libprofile_rt.dylib链接到我的项目时,应该失败的测试不再失败。
有没有人遇到过这个问题?你是怎么解决的?
由于
答案 0 :(得分:4)
This Blog有一个很好的教程,介绍如何使用LLVM实现与gcc兼容的覆盖结果。
覆盖功能在当前的LLVM前端中可用,但因为它似乎没有暴露 在XCode附带的当前版本中。
我同意作者的说法,它可以成为编译您自己的版本以进行覆盖的解决方案 目的并坚持最终二进制生成的发货版本。
我还值得注意他的教程声称:
Since Clang outputs these files in the same format as GCC,
they are compatible with tools such as CoverStory.
也许这对你有用。
答案 1 :(得分:3)
以下是在 xcode 4.2 中使用 gcc 4.2 进行编译的方法。这主要通过命令行完成,因此当您看到以[ 15:30 jon@MacBookPro / ]$
开头的行时,您需要打开 Terminal.app 并运行在$
之后启动的命令。
此过程中没有文件或目录被删除或已删除,因此如果您将来需要使用LLVM进行编译,则很容易撤消。
下载 - 但不安装 - xcode_4.1_for_lion.dmg或xcode_4.1_for_snow_leopard.dmg
现在,按照以下步骤将Xcode 4.1安装到/Developer-4.1
:
备份工作/Developer
目录(安装Xcode 4.2的地方)
[ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer /Developer-4.2
使用默认安装位置(/Developer
)运行Xcode 4.1安装程序
将新的Xcode 4.1安装移至/Developer-4.1
:
[ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer /Developer-4.1
将Xcode 4.2开发人员目录移回/Developer
:
[ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer-4.2 /Developer
编辑Xcode 4.2 GCC 4.2.xcspec
文件,使gcc 4.2显示在编译器选项 [1] 列表中:
[ 15:30 jon@MacBookPro / ]$ sudo vi "/Developer/Library/Xcode/PrivatePlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/GCC 4.2 (Plausible Blocks).xcplugin/Contents/Resources/GCC 4.2.xcspec"
从此处更改 41 和 42 行:
ShowInCompilerSelectionPopup = NO;
IsNoLongerSupported = YES;
To This:
ShowInCompilerSelectionPopup = YES;
IsNoLongerSupported = NO;
备份Xcode 4.2 iOS /模拟器框架usr
目录:
[ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer/Platforms/iPhoneOS.platform/Developer/usr /Developer/Platforms/iPhoneOS.platform/Developer/usr.backup
[ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer/Platforms/iPhoneSimulator.platform/Developer/usr /Developer/Platforms/iPhoneSimulator.platform/Developer/usr.backup
将Xcode 4.1 iOS / Simulator Framework usr
目录复制到Xcode 4.2:
[ 15:30 jon@MacBookPro / ]$ sudo cp -rv /Developer-4.1/Platforms/iPhoneOS.platform/Developer/usr /Developer/Platforms/iPhoneOS.platform/Developer/usr
[ 15:30 jon@MacBookPro / ]$ sudo cp -rv /Developer-4.1/usr /Developer/Platforms/iPhoneSimulator.platform/Developer/usr
将gcc
和info
iOS SDK库目录从Xcode 4.1复制到Xcode 4.2 [2] :
[ 15:30 jon@MacBookPro / ]$ sudo cp -rv /Developer-4.1/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/gcc /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/gcc
[ 15:30 jon@MacBookPro / ]$ sudo cp -rv /Developer-4.1/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/info /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/info
使用gcc-4.2进行编译!
[1] 如果从命令行打开(使用vi
,emacs
,nano
之类的东西等),请确保封闭路径在引号“/ long path / with spaces / in / file.xcspec”或转义空格 / some / long \ path / with \ spaces / in \ it / file.xcspec < / KBD>
[2] 这是必要的,因为iPhoneOS.platform SDK有自己独立的/usr/lib
目录,但iPhoneSimulator.platform SDK没有
答案 2 :(得分:2)
Xcode 4.2的默认编译器是LLVM 3.0。 Apple正在从LLVM转移到GCC 4.2,它仍然可以选择。然而,GCC 4.2已经不复存在了。
我认为除了找到适用于LLVM 3.0(最好)或LLVM GCC 4.2的不同代码覆盖解决方案之外别无选择,或者等到有人提供这样的工具。毕竟,Xcode 4.2相对较新,代码覆盖相对重要,所以我相信最终会有一个可行的解决方案。