Xcode 8宏NSLocalizedString的模糊扩展

m.y*_*m.y 7 unit-testing bundle nslocalizedstring ios xcode8

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

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

现在,我得到了警告

Ambiguous expansion of macro NSLocalizedString 
Run Code Online (Sandbox Code Playgroud)

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

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

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

@testable import ProjectName
Run Code Online (Sandbox Code Playgroud)

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

File 'MyFile.swift' is part of module 'ProjectName'; ignoring import.
Run Code Online (Sandbox Code Playgroud)

m.y*_*m.y 2

我最终让一切又恢复正常了。

\n\n

让\xe2\x80\x99s 假设我们的项目名为Panda,它由 Obj-C 和 Swift 文件组成。所有这些文件都在我们的PandaPandaTests目标中。

\n\n

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

\n\n

步骤 2:确保您的Panda项目将“构建设置”->“启用可测试性”设置为“是”

\n\n

步骤 3:确保您的PandaTests项目的“构建设置”->“产品模块名称”设置为 PandaTests

\n\n

第 4 步: \n按住“选项”按钮,然后单击“产品”,进行一次彻底的清理。您应该会看到“清理构建文件夹”选项。

\n\n

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

\n