Xcode / iOS:单元测试、方案和配置

6
我的iOS项目有五个方案: 本地开发,集成,QA,演示和生产。每个方案使用不同的配置来控制诸如网络轮询频率、API端点、分析等内容。
同样地,我们有五个相应的目标: 本地开发,集成,QA,演示和生产。每个目标都有几个用户定义的构建设置,其中包含API密钥、计时的数字值等内容。
我们应用程序的Info.plist文件使用应用程序变量,例如${SOME_ENDPOINT_URL},以引入相应的用户定义的构建设置。
为了检索变量,我做以下操作:
[[[NSBundle mainBundle] infoDictionary] valueForKey:@"Some Endpoint URL"]

这相当于用户定义的构建设置,就像这样:

"Some Endpoint URL" = ${SOME_ENDPOINT_URL}

我现在正在研究如何适当地配置项目以执行单元测试和逻辑测试。
为了构建测试来确定环境是否正确配置,我不确定最佳实践是什么。
- 建立五个额外的测试特定目标对于每个环境是正确的吗? - 还是更好地覆盖每个方案的测试组件的“运行操作参数”设置,并提供类似于指定我们正在查看哪个方案的参数? - 是否有任何现有参考资料可用于配置具有多个环境的iOS项目的单元测试和逻辑测试?这个项目的复杂性似乎超出了大多数文档的范围。

苹果公司一直在对整个Targets/Schemes系统进行不向后兼容的更改 - 我认为你找不到文档的原因是苹果公司打算/期望未来会有更多这样的更改,并希望避免他们将收到的批评。苹果公司似乎特别讨厌Targets,所以我个人会选择“使用参数”的方法 - Targets可能即将被削弱(再次 :( )。 - Adam
3
与其拥有如此多不同的目标,为何不只设置一个目标和五种配置呢?取代Debug和Release,你可以设置LocalDev、Integ、QA、Demo和Prod。然后你可以创建五个方案来构建相同的目标,但使用不同的配置。 - Jacob Lukas
@JacobLukas,你知道一个好的教程来描述你所说的吗?我一直避免使用Scheme,但听起来它们可以非常有用。 - DogCoffee
这是一个关于如何在Xcode中创建配置的链接:https://developer.apple.com/library/mac/recipes/xcode_help-project_editor/Articles/BasingBuildConfigurationsonConfigurationFiles.html - Jacob Lukas
现在的首选方式是使用Targets和Schemes,而不是使用不同的配置。很多东西都依赖于Debug和Release配置 - 不要走这条路,否则你会遭遇困难。@Kevin - 为什么你需要测试每个目标?我有一个类似的设置,但只在develop/internal目标上进行单元测试,因为测试其他目标是多余的。 - Jessedc
1个回答

1
以下是我所做的事情。

Info.plist

  • 创建一个主Info.plist文件
  • 为每个scheme编写一个运行脚本(Shell脚本),通过修改主Info.plist中的设置生成特定于环境的Info.plist(使用PlistBuddy -c)
  • 将运行脚本添加到构建阶段(在“编译源代码”之上)

.h文件

  • 在.h文件中定义配置设置(例如config.h)

    #if defined (CONFIG_FILE) 
    #import CONFIG_FILE
    #endif
    
  • 在代码中导入config.h

  • 使用预处理宏为每个方案选择目标.h文件。

    -DCONFIG_FILE=local-env-config.h
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接