将虚拟对象添加到项目中

时间:2015-09-29 19:39:20

标签: ios objective-c xcode build-settings

我想在项目中添加虚拟对象以进行测试,但我不希望它们包含在我的最终版本中。所以我有我的AppDelegate课程和导入课程:

#ifdef TESTING
#import "DummyBeaconLocationManager.h"
#else
#import "BeaconLocationManager.h"
#endif

后来:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
#ifdef TESTING
    [[DummyBeaconLocationManager sharedInstance] startRanging];
#else
    self.beaconLocationManager = [BeaconLocationManager sharedInstance];
    [self.beaconLocationManager startRanging];
#endif
    return YES;
}

但问题是我必须将其包含在我的Target Membership中,而不是我的测试目标中。有没有办法不在我的主目标中包含这些文件,但仅限于Test目标?

编辑: 需要做的是在发布后测试我的应用程序。我想在模拟器上测试它,但是使用信标的app。所以我创建了代表信标的虚拟对象并模拟了位置管理器。当应用程序以TESTING选项启动时,它不会启动测距信标,而是将虚拟对象替换为信标。

3 个答案:

答案 0 :(得分:7)

按照这些步骤操作后,您将能够将具有测试功能的测试类添加到构建中。要使用测试功能运行您的应用程序,您应该选择下面配置的测试方案。

Xcode项目配置(使用Xcode 7.0.1)

要使条件导入和功能对测试有效,您需要以下成分:

  1. 测试配置
  2. 测试目标
  3. 测试方案
  4. 方案,目标和构建配置的简短说明

    • 方案指向目标和配置。
    • 可以使用不同的构建设置配置目标。
    • 可以添加配置,以分支出目标构建设置。

    以下是步骤:

    <强> 1。复制配置以进行测试

    在Project Navigator中选择项目文件后,请按照下列步骤操作:

    1. 选择项目目标
    2. 选择信息
    3. 选择+以添加配置
    4. Duplicate a project configuration

      1. 选择复制“调试”配置 Duplicate "Debug" Configuration

      2. 重命名新配置,然后将其拖动到重新排序 Rename project configuration and drag to re-order

      3. <强> 2。复制目标以进行测试

        现在您已拥有测试配置,请添加测试目标。使用项目导航器中的项目文件选择,请按照下列步骤操作:

        1. 右键单击或按住Option键单击现有目标,然后选择“复制”。 Duplicate an existing target

        2. 点按新目标以重命名,然后拖动它以重新排列目标。 Rename and drag new target

        3. 第3。管理方案

          现在您已拥有测试目标和配置,您可以添加指向新目标和配置的方案。

          1. 点击方案(停止按钮旁边),然后选择管理方案... Select Manage Schemes...

          2. 在Schemes manager弹出窗口中,如果您已选择自动创建方案,则已列出新方案。否则,您可以在弹出窗口中点击+以添加方案。每个方案都可以共享,如下所示: Configure new scheme

          3. 点击新方案重命名,然后拖动它重新排序: Rename and reorder schemes

          4. 要编辑新方案,请确保选中该方案,然后点按编辑... Edit scheme

          5. 在编辑面板中,选择测试构建配置 Select Testing build configuration

          6. 通过点击“可执行文件”下拉列表,确保该方案指向“测试目标”: Point to Testing Target for Run action

          7. 确保方案指向正确的构建配置,以用于其他操作,例如自动化测试: Point to Testing Target for Test action

          8. <强> 4。配置目标的构建设置

            现在您已将测试方案设置为指向测试配置,它将与Debug配置完全相同,直到您修改构建设置。请按照以下步骤更改测试配置的构建设置:

            1. 对于大多数构建设置,每个配置都有一个选项。选择要在设置中使用的配置时,请确保选择了主目标: Select main target

            2. 预处理器宏位于标题为“Apple LLVM 7.0 - 预处理”的部分下: Preprocessor Macros

            3. 点击一行,选择它,点击回车键进行编辑并提交更改,使用箭头键向上或向下移动。为所有配置定义所有预处理器宏是一个好习惯,如下所示: Define preprocessor macros

            4. <强> 5。将类添加到测试目标

              现在,测试方案指向一种与Debug配置不同的配置。您现在应该可以从方案下拉菜单中选择测试方案,并运行您的测试配置。

              您可以通过以下两种方式之一修改类的目标成员资格。

              1. 当您创建新文件时,您可以选择位置的第三个面板,底部有选项,用于每个目标:
              2. Choose target membership

                1. 在Project Navigator中选择文件时,File Inspector具有Target Membership面板,您可以在其中进行修改: Modify target membership
                2. 方案

                  通常将方案配对以构建配置。一个好的做法是为每个需要不同版本的构建的受众制定计划/配置。以下是一些通常需要单独配置的基本受众群体:

                  • 开发人员&gt; DEBUG
                  • 开发人员&gt;测试
                  • 内部测试&gt;发
                  • Beta测试人员/制作&gt; APP STORE

                  子类

                  如果要修改测试模式中的任何功能,可以使用子类,只将子类添加到测试目标。

答案 1 :(得分:0)

好吧,如果我做对了,你应该:

  • a)创建一个单独的目标来测试porposes(如@Carl Veazey和 @Rainer Schwarze建议使用几乎与主要代码库相同的代码库 目标。
  • b)我建议嘲笑你的位置经理和信标 通过BeaconLocationManager和YourBeacon的子类化对象 (例如)。然后,你只需覆盖你的实际行为 模拟器特定的行动。

在一天结束时,与主要目标相比,您的测试目标将只包含2个类(模拟信标管理器和模拟信标)。不需要对项目结构或代码语义进行其他更改。祝你好运。

答案 2 :(得分:0)

我可能在这方面容易出错,但我猜这可能有用:

与使用cocoapods时一样,在创建pod文件时,取消选择目标(Project Name)。如果你这样做,那么选择目标(Project NameTests)

enter image description here