【问题标题】:Xcode 8 Ambiguous expansion of macro NSLocalizedStringXcode 8 宏 NSLocalizedString 的模糊扩展
【发布时间】:2016-09-22 09:44:53
【问题描述】:

我的单元测试 .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.

【问题讨论】:

    标签: ios unit-testing bundle xcode8 nslocalizedstring


    【解决方案1】:

    我最终让这一切都恢复了。

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

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

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

    第 3 步:确保您的 PandaTests 项目的 Build Settings -> Product Module Name 设置为 PandaTests

    第 4 步: 按住选项按钮,然后单击产品,进行一次漂亮的清洁。您应该会看到 Clean Build Folder 选项。

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

    【讨论】:

    • 这真的摆脱了“宏 NSLocalizedString 的模糊扩展”警告吗?我有同样的警告,但我的项目只是 Objective C。我的产品模块名称设置为 Panda,而不是 PandaTests,但我的设置似乎匹配。
    【解决方案2】:

    在您的项目构建设置中,将-Wno-ambiguous-macro 添加到Other C Flags

    它解决了问题(警告消失了),但不确定有什么副作用。

    【讨论】:

      猜你喜欢
      • 2013-09-26
      • 2016-07-08
      • 1970-01-01
      • 2011-12-14
      • 2016-11-30
      • 2017-01-17
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      相关资源
      最近更新 更多