ios - iOS 单元/应用程序测试目标如何与其宿主应用程序中的类进行链接?

标签 ios xcode clang xctest

我目前正在尝试向我的应用程序(一个非常老的项目......评论说 iOS 2.0)添加单元测试(精确的应用程序测试)并且总是偶然发现 undefined symbols for architecture当我尝试测试我的主机应用程序中的一个类时。由于明显的修复还没有奏效,我想深入了解整个过程。如果有人能透露一些信息,我们将不胜感激:)

从我目前收集到的:

  • 单元测试目标需要一个宿主应用程序。这在“TEST_HOST”中指定。此外,它还在 BUNDLE_LOADER 中指定。
  • 测试目标需要提供符号。所以“在复制期间剥离调试符号”应该是NO。
  • 需要启用要测试的目标才能测试“启用可测试性”= YES
  • 有些人需要将部署后处理设置为 NO
  • 在 testtarget 中,hostapp 应该“允许测试主机应用程序 API”

  • 当链接器链接测试文件时,它会在某处(指定此路径的确切位置)搜索来自主机应用程序的目标文件和符号。然后在成功链接后,它将单元测试“插件”部署到应用程序插件文件夹中并开始测试。

    如您所见,这是一个非常粗略的理解。因此,如果您能添加细节(无论多么微小),我将不胜感激。

    最佳答案

    我才发现我还没有回答这个问题...
    在我的情况下,丢失的符号是在将可见性设置为隐藏的情况下编译库的结果。如果是这种情况,测试将无法找到符号,因为 lib 不会向公众提供它们。更改用于测试的编译命令以将可见性设置为默认值会有所不同。

    关于ios - iOS 单元/应用程序测试目标如何与其宿主应用程序中的类进行链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53194158/

    相关文章:

    ios - 如何将 Firebase 快照转换为项目数组?

    docker - 如何通过 LLVM build_docker_image.sh 默认使用 libc++ 构建 clang?

    c++ - Windows 上的 Clang 和 CMake - clang.exe 损坏,程序不可执行

    ios - 游戏中心身份验证 View 未显示 - iOS

    ios - 嵌套的 UIScrollViews 和事件路由

    swift 3 : Watch app: if watch goes to sleep there's a delay between interface controllers

    xcode - 您如何看待 XCode Instruments 中负责内存分配的具体方法?

    objective-c - SMLoginItemSetEnabled-从使用沙盒登录开始-Xcode 6.3(插图)

    c++ - 用于 iOS 的 leptonica 1.69 交叉编译(armv7、armv7s 和 arm64)

    ios - 如何在 ios 中的 UIPickerview 上添加搜索选项?