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

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

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

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

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

1. Demo演示

Demo演示

2. 实现流程

1. 添加 Settings.bundle
选择 Settings Bundle
创建 Settings Bundle

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

2. Settings.bundle 的目录结构

目录结构

其中en.lproj是用来进行国际化的,想要添加其他语言,可复制en.lproj文件夹,然后修改.lproj文件夹名称为相应语言的名称即可。如添加简体中文:
简体中文:zh-Hans.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代码

👉👉👉👉 Demo地址:BWSwitchServer

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容