【问题标题】:Issue testing and using Cocoapods in a Swift project在 Swift 项目中问题测试和使用 Cocoapods
【发布时间】:2014-10-19 03:40:55
【问题描述】:

我正在使用 XCode 6 Beta-6 在 Swift 中编写应用程序。 我正在使用 Cocoapods,并且正在创建一些单元测试。

问题是这样的:显然不可能有一个项目包含:

1) 用 Swift 编写的项目

2) 一些使用 cocoapods 安装的 pods

3)一个Objective-C桥头文件,导入一些pods

4) 单元测试

这听起来很奇怪,但请按照我的步骤操作:运行 pod install 后,创建 Objective-C 桥头并导入一个 pod:一切正常。 现在写一些测试:为了测试你自己的类,你必须导入名为“作为你的项目”(或者更好,“作为主要目标”)的模块:在我的“MyAwesomeApp”项目中我必须写import MyAwesomeApp在我的测试文件中。

不幸的是,在这一步 XCode 不会编译: 在我的import MyAwesomeApp 行中出现错误“无法导入桥接头 '/path/to/MyAwesomeApp/MyAwesomeApp/MyAwesomeApp-Bridging-Header.h”;
并且 Bridging-Header 文件中出现错误“xxx.h file not found”,排除了导入 pod 的可能性。

另外,如果我不在 Obj-c 桥接文件中导入 pod,项目将编译正常。

看起来在导入 Objective-C 桥头文件(Objective-C 文件取自工作区中的不同子项目)和用于测试的“主模块”时存在冲突。

你知道有没有解决办法?我错过了什么? 谢谢

注意:作为一种解决方法,我可以在 Objective-C 桥头文件中导入 pod,而不是在我的测试中包含主模块,而是在我的“测试”目标中添加我想要测试的所有类。 这会起作用,但它不是最干净的解决方案(我认为)

【问题讨论】:

    标签: xcode unit-testing swift cocoapods


    【解决方案1】:

    如果您查看您的主要目标构建设置,您会看到为“标题搜索路径”设置列出了一堆目录。

    您要么需要复制测试目标下的这些值,要么可以尝试修改 Podfile 以同时包含主目标和测试目标,然后重新运行 install

    platform :ios, '7.0' 
    link_with 'mainapp', 'mainappTests'
    ...
    

    还要注意任何其他可能需要且与 CocoaPods 无关的标头路径。

    不要忘记,你的类应该有公共方法,无论你想对它们进行单元测试。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      也许你已经在项目级别配置了“Objective-C Bridging Header”设置,所以“Test”目标继承了该值,并且这个“Test”目标可能没有与 Cocoapods 链接。

      按照@sergio 的建议使用link_with,或在“Project->Info->Configuration”处为“Test”目标设置“Pods*.debug/release”配置。

      【讨论】:

        【解决方案3】:

        除了我的 Podfile 中的 link_with 命令之外,我还必须在测试文件中导入我的主项目模块。这样类和方法就不必公开。

        注意特殊的@testable annotation

        @testable import my_tutorial_app

        另外,我的主要项目名称中包含非字母数字字符,我必须将它们替换为下划线 _

        【讨论】:

          猜你喜欢
          • 2013-11-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-27
          • 2015-06-22
          • 1970-01-01
          • 1970-01-01
          • 2011-06-12
          相关资源
          最近更新 更多