如何在Xcode 6上testing应用程序扩展

有谁知道如何执行应用程序扩展目标的unit testing,特别是键盘扩展目标?

我试过了什么(在unit testing目标中):

  • 在“常规”水龙头中,将其目标设置为扩展目标而不是容器应用程序。
  • 将“Bu​​ndle Loader”设置为扩展目标二进制文件的path,该文件看起来像$(BUILT_PRODUCTS_DIR)/com.mycompany.keyboard.appex/com.mycompany.keyboard
  • 将“testing主机”设置为$(BUNDLE_LOADER)
  • 在“构build阶段”点击,将“目标依赖项”设置为容器应用程序和扩展。

完成这些事情之后,我可以成功构build它,但是总会得到“testing失败”(Test Failed Test target SogouInputTests encountered an error (Test session exited(1). without checking in. If you believe this error represents a bug, please attach the log file at /tmp/TestStatus-UXfvxw.log)

我正在使用Xcode 6 beta 3。

我已经向苹果报告了这个错误。 可悲的是,答案是现在键盘扩展不支持unit testing。 答案来自苹果:

  • 目前不支持在应用程序扩展中运行unit testing
  • 相反,将要testing的代码放入框架并在其中testing代码
  • 将框架链接到您的扩展

刚刚遇到类似的问题,试图unit testing扩展。 独立做了与Bundle Loader指向.appxpath的作者完全一样的东西,当然没有成功。 我真的不喜欢为testing创build一个单独的框架的想法,所以我最终将可testing源添加到扩展testing目标。 如果你的扩展中没有太多的源文件,那真的很简单:

  1. 在项目设置中select您的扩展testing目标
  2. 去build立阶段
  3. 展开编译源
  4. 点击+
  5. 添加可testing代码的源文件。
  6. build立testing

为什么它的作品:

一旦将扩展源添加到扩展testing目标中,XCode将双倍引用它们中的每一个,并在正常的扩展构build和testing构build中进行编译,从而消除链接问题。

有什么缺点吗?

您将不得不手动同步扩展testing目标中的源文件列表。 无论何时在扩展目标中添加/删除文件,都可能需要在其testing目标中执行相同的操作。