Xcode 8宏NSLocalizedString的模糊扩展

时间:2016-09-22 09:44:53

标签: ios unit-testing bundle xcode8 nslocalizedstring

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

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

现在,我收到了警告

Ambiguous expansion of macro NSLocalizedString 

这可以解释为什么我的单元测试失败,因为它们无法再找到本地化的字符串值。

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

修改 我觉得它与我在 2个目标中的所有源文件有关,即一个用于项目,一个用于单元测试,这是我们设置它的方式。我正在尝试清理它并从单元测试目标中删除所有源文件并添加

@testable import ProjectName

而不是单元测试文件,以便能够访问我的代码进行测试,但我现在正在

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

2 个答案:

答案 0 :(得分:1)

我最终让它全部恢复了工作。

让我们假设我们的项目名为 Panda ,它包含Obj-C和Swift文件。所有这些文件都在我们的 Panda PandaTests 目标中。

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

第2步:确保您的 Panda 项目具有构建设置 - >启用可测试性设置为是

第3步:确保 PandaTests 项目具有构建设置 - >产品模块名称设置为PandaTests

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

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

答案 1 :(得分:0)

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

Xcode构建设置和设置

其他C标志-Wno-ambiguous-macro

HTH