Xcode 8宏NSLocalizedString的模糊扩展

我在unit testing.pch文件中有以下内容,以允许我的unit testing找到正确的本地化文件包,这一点工作正常,直到我升级到Xcode8。

#undef NSLocalizedString #define NSLocalizedString(key, comment) [[NSBundle bundleWithIdentifier:@"Tests-Unit"] localizedStringForKey:(key) value:@"" table:nil] 

现在,我得到了警告

 Ambiguous expansion of macro NSLocalizedString 

这可以解释为什么我的unit testing失败,因为他们无法再找到本地化的字符串值。

有什么想法吗? 我现在需要做些什么不同的事情吗?

编辑:我觉得它与我的所有源文件在2个目标中有关,即一个用于项目,一个用于unit testing,这是我们设置它的方式。 我正在尝试清理它并从unit testing目标中删除所有源文件并添加了

 @testable import ProjectName 

而是unit testing文件,以便能够访问我的代码进行测试,但我现在得到

 File 'MyFile.swift' is part of module 'ProjectName'; ignoring import. 

我终于把它全部搞定了。

让我们假装我们的项目叫做Panda ,它包含Obj-C和Swift文件。 所有这些文件都在我们的PandaPandaTests目标中。

第1 确保所有文件都具有正确的目标成员资格,即Panda目标:仅源文件,开发框架,图像等和PandaTests目标:仅测试文件,测试框架,模拟数据等

第2步:确保您的Panda项目的Build Settings – > Enable Testability设置为Yes

第3 确保您的PandaTests项目将构建设置 – >产品模块名称设置为PandaTests

步骤4:按住Option按钮,然后单击Product,进行干净的清洁。 您应该看到一个Clean Build Folder选项。

第5 @testable import Panda 对于Swiftunit testing,添加@testable import Panda 。 由于我们现在已经从PandaTests目标中删除了所有源代码文件,因此unit testing需要一种访问我们项目文件的方法。 这使我们的Swiftunit testing能够访问我们的Panda-Bridging-Header.h中包含的所有Swift文件和Obj-C文件。

看起来像是解决了这个问题,但不确定是什么副作用。

Xcode构建设置和设置

其他C标志-Wno-ambiguous-macro

HTH