用于指定API目标的自动测试和Xcode配置文件

用于指定API目标的自动测试和Xcode配置文件,xcode,xcodebuild,ios-ui-automation,Xcode,Xcodebuild,Ios Ui Automation,因此,我正在编写从命令行运行的自动化测试,以测试iOS应用程序的UI。我使用bash脚本清理和构建项目,并运行UI自动化测试 问题是,我希望命令行脚本能够在我的Xcode项目中更改一个C标志,该标志确定我的应用程序指向哪个服务器。例如: ./run-test -target "Debug-Server" 将C标志服务器\u地址的值更改为调试\u服务器,同时: ./run-test -target "QA-Server" 将C标志服务器地址的值更改为QA_服务器 为了做到这一点,我计划创建一个

因此,我正在编写从命令行运行的自动化测试,以测试iOS应用程序的UI。我使用bash脚本清理和构建项目,并运行UI自动化测试

问题是,我希望命令行脚本能够在我的Xcode项目中更改一个C标志,该标志确定我的应用程序指向哪个服务器。例如:

./run-test -target "Debug-Server"
将C标志服务器\u地址的值更改为调试\u服务器,同时:

./run-test -target "QA-Server"
将C标志服务器地址的值更改为QA_服务器

为了做到这一点,我计划创建一个.xcconfig文件,该文件被馈送到xcodebuild中,该文件将在代码中设置C标志以指向正确的服务器。大概是这样的:

xcodebuild -target <TARGET_NAME> -configuration Debug-QA.xcconfig -sdk "$DEVICE_SLUG""$CURRENT_SDK" DSTROOT=. clean build
xcodebuild-target-configuration Debug-QA.xcconfig-sdk“$DEVICE\u SLUG”“$CURRENT\u sdk”DSTROOT=。干净利落
我对.xcconfig文件一点也不熟悉,所以我对它们有一些问题

  • 我必须描述.xconfig文件中的每个构建设置吗?或者是否存在Xcode使用的某种“默认”值
  • 有更好的方法吗

  • 我找到了答案,使用了.xconfig和#ifdef语句的组合:

    在我声明服务器的配置文件中:

    #ifdef USE_DEV
    #define SERVER_ADDRESS   DEV_SERVER_ADDRESS   //USED IN AUTOMATED TESTING DEBUG SERVERS
    
    #elif defined USE_QA
    #define SERVER_ADDRESS   QA_ADDRESSS          //USED IN AUTOMATED TESTING STAGING SERVERS 
    
    #elif defined USE_LIVE
    #define SERVER_ADDRESS   LIVE_SERVER_ADDRESS  //USED IN AUTOMATED TESTING LIVE SERVERS
    
    #else
    #define SERVER_ADDRESS   DEV_SERVER_ADDRESS   //DEFAULT VALUES
    #endif
    
    然后,我使用了三个.xcconfig文件,其中说明了以下内容:

    dev.xconfig: QA.xcconfig: LIVE.xconfig:
    GCC_PREPROCESSOR_DEFINITIONS = USE_DEV
    
    GCC_PREPROCESSOR_DEFINITIONS = USE_QA
    
    GCC_PREPROCESSOR_DEFINITIONS = USE_LIVE