【问题标题】:Code Coverage on Xcode 4.4.1Xcode 4.4.1 上的代码覆盖率
【发布时间】:2012-08-21 12:42:09
【问题描述】:

我一直在尝试在 Xcode4.4.1 上对 Mac 应用程序进行代码覆盖测试,该应用程序是 10.8 应用程序,因此该应用程序只能通过 Xcode4.4.1 构建和运行。但是在使用 Xcode4.4.1 时找不到 /Developer/usr/lib/libprofile_rt.dylib 库。有没有更好的工具在 Xcode4.4.1 上运行代码覆盖?

寻找一些代码覆盖工具,适用于 Xcode4.4.1 上的 mac 和 iOS 应用程序

【问题讨论】:

    标签: macos ios5 code-coverage xcode4.4


    【解决方案1】:

    您不需要在 xCode 4.4.1 中运行项目时包含 *libprofile_rt.dylib* 并使用 *-profile_rt* 标志(像魅力一样与 iOS 模拟器一起工作)只需设置这些标志:

    Generate Test Coverage Files: YES
    Instrument Program Flow: YES
    

    构建并运行。如果您运行应用程序的测试目标,*.gcda 文件会自动创建,因为测试的应用程序终止,如果运行常规目标,*.gcda 文件会在您明确终止应用程序时创建(另一种方法是设置 UIApplicationExitsOnSuspend = YES in .plist)

    请注意,它在使用 xCode 4.4.1 创建的新项目上经过了很好的测试

    【讨论】:

    • 除了 iOS 应用,这个解决方案是否适用于 Mac 应用?
    • 是的,我也验证了这一点。有用。似乎 DerivedData 目录位置已更改为 /User//Library/DerivedData for Xcode4.4.1
    • 在 xCode 4.4.1 中,我无法弄清楚如何添加 UIApplicationExitsOnSuspend。我已编辑 Info.plist 以添加 UIApplicationExitsOnSuspend,但是当我按下主页按钮时,日志显示“检测到尝试调用 iPhone 上不存在的系统库中的符号: fopen$UNIX2003 从图像 MyApp 中的函数 llvm_gcda_start_file 调用。(lldb)。我创建了一个新问题here
    • 如果我禁用它,我会得到链接错误,我是否必须在禁用它的情况下重新编译目标,以便在与库链接时,我不需要这个依赖项。
    【解决方案2】:

    您只需要在 Build Settings 中设置以下内容:
    生成测试覆盖率文件:是
    仪器程序流程:是

    .gcda 文件只会在应用退出时输出,因此对于 iOS 构建,您应该在 Info.plist 中将 'UIApplicationExitsOnSuspend' 设置为 YES。

    代码覆盖率文件将输出到/Build/Intermediates/.build//.build/Objects-normal/i386

    【讨论】:

      【解决方案3】:

      似乎使用 LLVM 和 CoverStrory 的代码覆盖在 Xocde4.4.1 中被破坏了,

      https://devforums.apple.com/message/717814#717814 - 苹果开发者论坛中讨论此问题的链接。

      【讨论】:

        猜你喜欢
        • 2016-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-15
        • 1970-01-01
        • 1970-01-01
        • 2012-06-30
        • 2012-02-02
        相关资源
        最近更新 更多