Xcode 8 宏 NSLocalizedString 的扩展不明确
Xcode 8 Ambiguous expansion of macro 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.
在您的项目构建设置中,将 -Wno-ambiguous-macro
添加到 Other C Flags
它解决了问题(警告消失),但不确定副作用是什么。
我终于恢复正常了。
假设我们的项目名为 Panda,它由 Obj-C 和 Swift 文件组成。所有这些文件都在我们的 Panda 和 PandaTests 目标中。
第 1 步: 确保所有文件都具有正确的目标成员资格,即 Panda 目标:仅源文件、开发框架、图像等和 PandaTests 目标:仅测试文件、测试框架、模拟数据等
第 2 步:确保您的 Panda 项目的 Build Settings -> Enable Testability 设置为 Yes.
第 3 步:确保您的 PandaTests 项目的 Build Settings -> Product Module Name 设置为 PandaTests.
第 4 步:
按住 Option 按钮,然后单击 Product,做一个很好的清洁。您应该会看到 Clean Build Folder 选项。
第 5 步:
对于 Swift 单元测试,添加 @testable import Panda
。由于我们现在已经从 PandaTests 目标中删除了所有源代码文件,因此单元测试需要一种访问项目文件的方法。这使我们的 Swift 单元测试能够访问我们所有的 Swift 文件和那些包含在我们的 Panda-Bridging-Header.h[=42= 中的 Obj-C 文件].
我的单元测试 .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.
在您的项目构建设置中,将 -Wno-ambiguous-macro
添加到 Other C Flags
它解决了问题(警告消失),但不确定副作用是什么。
我终于恢复正常了。
假设我们的项目名为 Panda,它由 Obj-C 和 Swift 文件组成。所有这些文件都在我们的 Panda 和 PandaTests 目标中。
第 1 步: 确保所有文件都具有正确的目标成员资格,即 Panda 目标:仅源文件、开发框架、图像等和 PandaTests 目标:仅测试文件、测试框架、模拟数据等
第 2 步:确保您的 Panda 项目的 Build Settings -> Enable Testability 设置为 Yes.
第 3 步:确保您的 PandaTests 项目的 Build Settings -> Product Module Name 设置为 PandaTests.
第 4 步: 按住 Option 按钮,然后单击 Product,做一个很好的清洁。您应该会看到 Clean Build Folder 选项。
第 5 步:
对于 Swift 单元测试,添加 @testable import Panda
。由于我们现在已经从 PandaTests 目标中删除了所有源代码文件,因此单元测试需要一种访问项目文件的方法。这使我们的 Swift 单元测试能够访问我们所有的 Swift 文件和那些包含在我们的 Panda-Bridging-Header.h[=42= 中的 Obj-C 文件].