在Swift项目中发布测试和使用Cocoapods

JJS*_*olo 32 xcode unit-testing cocoapods swift

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

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

1)用Swift编写的项目

2)使用cocoapods安装的一些吊舱

3)导入一些pod的Objective-C桥头文件

4)单元测试

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

不幸的是,在这一步XCode将无法编译:在我的import MyAwesomeApp行中出现错误"无法导入桥接头'/path/to/MyAwesomeApp/MyAwesomeApp/MyAwesomeApp-Bridging-Header.h";
并且错误"找不到xxx.h文件"出现在Bridging-Header文件中,不包括导入pod的可能性.

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

看起来存在冲突导入Objective-C桥接头(使用从工作空间中的不同子项目获取的Objective-C文件)和用于测试的"主模块".

你知道是否有解决方案吗?我错过了什么?谢谢

注意:作为一种解决方法,我可以在Objective-C Bridge Header中导入pod,而不是在我的测试中包含主模块,在我的"test"目标中添加我想要测试的所有类.这将有效,但它不是最干净的解决方案(我认为)

ser*_*gio 32

如果您查看主要目标Build Settings,您将看到为"Header Search Paths"设置列出了一堆目录.

您需要在测试目标下复制这些值,或者您可以尝试修改Podfile以包含主目标和测试目标并重新运行install:

platform :ios, '7.0' 
link_with 'mainapp', 'mainappTests'
...
Run Code Online (Sandbox Code Playgroud)

还要处理可能需要且与CocoaPods无关的任何其他标头路径.

并且不要忘记,无论您希望对哪些类进行单元测试,您的类都应具有公共方法.

希望这可以帮助.


小智 7

也许您已在项目级别配置了"Objective-C Bridging Header"设置,因此"Test"目标继承了该值,并且可能此"Test"目标未与Cocoapods链接.

使用link_with如@sergio暗示或设置为"测试"目标"豆荚*的.debug /发布"配置,在"项目- >信息- >配置".