iOS工程中开发环境和发布环境的切换以方便测试

目前需求是:在APP中设置列表中加一行针对特殊账号专门用于切换服务器环境的cell,可以自由的切换开发、测试,以及正式环境。

目前全局的宏定义都写在了PCH文件中,想用NSUserDefault或者Singleton去维护环境变量集合,但是没有实现效果。但是利用Build Configuration来配置多环境、利用xcconfig文件来配置多环境,以及利用Targets来配置多环境,这些方法都会打包多个APP并且配置过程并不简单。其实就是实现一个多环境切换的小功能应该有更简单的方法来实现。希望感兴趣的同学解答一下。

阅读 6.5k
2 个回答

服务器环境切换

//用NSUserDefault来实现

//1.提前在PCH文件中写好宏定义

//服务器
#define serverIP [[NSUserDefaults standardUserDefaults] objectForKey:@"server"]

//网页服务器
#define webServerIP [[NSUserDefaults standardUserDefaults] objectForKey:@"webServer"]

//2.此处点击切换服务器


- (void)switchServerWith:(NSInteger )index{


    //开发环境
    if (index == 0) {

        [[NSUserDefaults standardUserDefaults] setObject:@"http://xxx/" forKey:@"server"];
        [[NSUserDefaults standardUserDefaults] setObject:@"http://xxx/" forKey:@"webServer"];
        
        
        //测试环境
    } else if (index == 1) {
        
        [[NSUserDefaults standardUserDefaults] setObject:@"http://test.xxx/" forKey:@"server"];
        [[NSUserDefaults standardUserDefaults] setObject:@"http://test.xxx/" forKey:@"webServer"];
        
        //正式环境
    } else if (index == 2) {
        
        [[NSUserDefaults standardUserDefaults] setObject:@"http://api.xxx/" forKey:@"server"];
        [[NSUserDefaults standardUserDefaults] setObject:@"http://www.xxx/" forKey:@"webServer"];
        
    }
    


}

借鉴了前一位同学的回答,整理了一个方法,注意当第一次安装应用时需要初始化一个默认的服务器地址,然后跟后台约定并设置某些账号拥有开发者权限的才会出现可选的开发者选项,完美解决。要记得每次切换环境都要调一下退出登录的方法。

图片描述

用NSUserDefault,然后宏定义APIHost根据NSUserDefault值来判断给值

#define ServerHost [[NSUserDefaults standardUserDefaults] objectForKey:@"xxxxx"]?releaseHost:debugHost
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题