在日常的App开发中,会有正式服务器与测试服务器两种不同的环境,调试或测试时经常需要在不同的环境中切换。

在使用Xcode调试时,可能需要运行两次以测试不同的服务器环境,而在打包测试时,则需要导出两个不同的ipa包以进行安装测试。

对于想省事的我,想着能不能做个开关来进行不同环境的切换。其实想想,是可以在App的某个页面中添加一个开关、按钮或其他方式来进行不同环境的切换控制,但想想这种方式其实还是有点影响了App的显示效果,因此就想通过其他方式来实现。

由于之前了解过iOS App的设置束 - iOS Settings Bundle ,因此就想着通过 Settings Bundle 来实现不同服务器环境的切换功能。

1. Demo演示

2. 实现流程

1. 添加 Settings.bundle

Settings.bundle 文件放在工程目录下即可,放到自己在工程目录下创建的文件夹中也可以。

2. Settings.bundle 的目录结构


其中en.lproj是用来进行国际化的,想要添加其他语言,可复制en.lproj文件夹,然后修改.lproj文件夹名称为相应语言的名称即可。如添加简体中文:

3. Root.plist 文件内容
3.1 添加选项

先点击 Root.plist 打开该文件,然后再点击Preference Items条目的加号,进行开关选项(Toggle Switch)的添加:

同理再添加多值选项(Multi Value),如下图所示:

3.2 选项的配置

添加完成后,对两个选项进行配置,配置内容如下:

其中选项的TitleIdentifier可自己进行修改。

  1. Title可进行国际化,只需在相应的国际化文件夹.lproj中的Root.strings中进行国际化文本的添加即可。
  2. Identifier就是使用NSUserDefaults保存数据时的key值,在代码中使用时,需要保持和此处填写的一致。
  3. Default Value可自己进行修改。
  4. 多值选项的TitlesValues根据需求自己进行设置,Titles同样可以进行国际化,Values也相当于key值。
4. 代码实现
4.1 宏定义文件Common.h
#ifndef Common_h
#define Common_h#pragma mark - 文件引用#import "BWConstant.h"#pragma mark - 不同服务器环境的配置#define URL_HEAD_PRODUCT     @"http://www.google.cn"
#define URL_HEAD_DEVELOP     @"https://www.baidu.com"
#define URL_HEAD_JIANSHU     @"https://www.jianshu.com"
#define URL_HEAD_BOKEYUAN    @"https://www.cnblogs.com"#define APP_URL_HEAD \
({ \NSString *url = URL_HEAD_PRODUCT; \if (APP_SETTINGS_DEBUG_ENABLE) { \NSString *environment = [[NSUserDefaults standardUserDefaults] objectForKey:UserDefaultsAppServerKey]; \if ([environment isEqualToString:ServerProductKey]) { \url = URL_HEAD_PRODUCT; \} else if ([environment isEqualToString:ServerDevelopKey]) { \url = URL_HEAD_DEVELOP; \} else if ([environment isEqualToString:ServerJianshuKey]) { \url = URL_HEAD_JIANSHU; \} else if ([environment isEqualToString:ServerBokeyuanKey]) { \url = URL_HEAD_BOKEYUAN; \} \} \(url); \
}) \
#pragma mark - 开发调试相关的宏定义/// 是否在App设置中开启了调试开关
#define APP_SETTINGS_DEBUG_ENABLE \
({ \BOOL enable = [[NSUserDefaults standardUserDefaults] boolForKey:UserDefaultsAppDebugEnableKey]; \(enable); \
}) \
#endif /* Common_h */
4.2 常量类BWConstant

.h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>UIKIT_EXTERN NSString *const UserDefaultsAppDebugEnableKey;
UIKIT_EXTERN NSString *const UserDefaultsAppServerKey;UIKIT_EXTERN NSString *const ServerProductKey;
UIKIT_EXTERN NSString *const ServerDevelopKey;
UIKIT_EXTERN NSString *const ServerJianshuKey;
UIKIT_EXTERN NSString *const ServerBokeyuanKey;

.m

#import "BWConstant.h"// 注意: key值要与Settings.bundle中Root.plist文件中相应条目的Identifier保持一致
NSString *const UserDefaultsAppDebugEnableKey = @"AppDebugEnableIdentifier";
NSString *const UserDefaultsAppServerKey = @"AppServerEnvironmentIdentifier";NSString *const ServerProductKey = @"ServerProductIdentifier";
NSString *const ServerDevelopKey = @"ServerDevelopIdentifier";
NSString *const ServerJianshuKey = @"ServerJianshuIdentifier";
NSString *const ServerBokeyuanKey = @"ServerBokeyuanIdentifier";
4.3 最终的使用

宏定义APP_URL_HEAD即对应服务器地址,在代码中进行使用。
当在App设置中进行服务器环境切换后,代码中APP_URL_HEAD对应的值也会改变,因此就达到了不同服务器环境切换的效果。

3. Demo代码

iOS开发调试技巧之在App设置中切换服务器环境相关推荐

  1. 27个iOS开发小技巧

    <span style="word-wrap: normal; word-break: normal; line-height: 1.5em; font-size: 14px; out ...

  2. iOS开发小技巧 -- tableView-section圆角边框解决方案

    iOS开发小技巧 -- tableView-section圆角边框解决方案 参考文章: (1)iOS开发小技巧 -- tableView-section圆角边框解决方案 (2)https://www. ...

  3. iOS开发几年了,你清楚OC中的这些东西么!!!?

    iOS开发几年了,你清楚OC中的这些东西么!!!? 前言 几年前笔者是使用Objective-C进行iOS开发, 不过在两年前Apple发布swift的时候,就开始了swift的学习, 在swift1 ...

  4. 网易云播放失败,请在设置中切换输出设备 解决方案

    网易云播放音乐莫名报错:播放失败,请在设置中切换输出设备 如下: 2.在搜索框搜索控制面板,打开控制面板 找到控制面板的管理工具,点击 点击服务,进入 找到Windows Audio ,右键关闭→右键 ...

  5. 播放失败,请在设置中切换输出设备

    声卡驱动正常,但是使用播放器(网易云音乐.qq音乐.wmplaer)都会出现报错:"播放失败,请在设置中切换输出设备". 无论是重启服务还是重新安装声卡驱动都无效.在网络上找到原因 ...

  6. 【iOS开发】跳转到『设置App』的任意条目

    有时候,我们为了让用户方便地设置一些内容,希望可以让用户点击一个按钮,就可以跳转到 设置->通用,或 设置->�Safari,等『设置App』中的详细条目,这样,下面这条常见的语句就不足以 ...

  7. iOS各种调试技巧豪华套餐

    转载http://www.cnblogs.com/daiweilai/p/4421340.html#biyouji 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Globa ...

  8. IOS各种调试技巧豪华套餐(好东西)

    目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Global BreakPoint) 条件断点(Condational Breakpoints) 打印的艺术 NSLog 开启 ...

  9. iOS开发小技巧总结

    tip 1 :  给UIImage添加毛玻璃效果 func blurImage(value:NSNumber) -> UIImage { let context = CIContext(opti ...

最新文章

  1. hive sql 报错后继续执行_Hive迁移Presto的技术实践
  2. SpringCloud(一):深入理解Eureka
  3. android与html注册登录,Android登录注册源码
  4. 汽车行业持续亏损?奥迪:不存在的
  5. Yii 2.0 权威指南 (6) 请求处理
  6. ActivityMQ入门案例
  7. Android作业四
  8. 数据结构—顺序表基本操作的实现(C语言)
  9. 计算机软件怎么装,电脑拷贝的软件怎么安装
  10. 5ecsgo启动失败2错误代码2,5E打开csgo说csgo客户端需要更新 然后进不去游戏怎么回事?...
  11. 如何用python画房子_用python画一个小房子
  12. NYOJ-366:D的小L
  13. 详解电源反接使用MOS管保护电路原理及其优势
  14. vue中下载图片跨域
  15. VirtualBox安装Extention Pack教程
  16. iOS身份证的正则验证
  17. CMT2300A 是一款超低功耗,高性能,适用于各种 127 至 1020 MHz 无线应用
  18. NFC与其他近距离通信技术的比较
  19. IE已经阻止此站点以不安全的方式使用ActiveX控件的解决
  20. 计算机专业职业生涯规划书word,计算机专业职业生涯规划书word文档

热门文章

  1. 通讯录的实现(C语言)
  2. MathorCup大数据挑战赛第一届A题-移动通信基站流量预测赛题解析
  3. 多功能的small_vmt_hook
  4. mysql 统计七日留存率_移动APP中,7日留存率到底如何定义?
  5. MATLAB 彩色图转灰色图处理
  6. MATLAB的乘法函数,Matlab乘法函数
  7. 计算机桌面有去不掉的框,电脑右下角有个白色方框去不掉
  8. 《信号与系统学习笔记》—连续时间博里叶变换(一)
  9. android代码精华 各路大神写的代码精华,大家一起分享
  10. iOS项目集成unity(2020+ 版本)