iOS開發(fā)調(diào)試技巧之在App設(shè)置中切換服務(wù)器環(huán)境

在日常的App開發(fā)中,會(huì)有正式服務(wù)器與測(cè)試服務(wù)器兩種不同的環(huán)境鸽捻,調(diào)試或測(cè)試時(shí)經(jīng)常需要在不同的環(huán)境中切換呼巴。

在使用Xcode調(diào)試時(shí)泽腮,可能需要運(yùn)行兩次以測(cè)試不同的服務(wù)器環(huán)境,而在打包測(cè)試時(shí)衣赶,則需要導(dǎo)出兩個(gè)不同的ipa包以進(jìn)行安裝測(cè)試诊赊。

對(duì)于想省事的我,想著能不能做個(gè)開關(guān)來進(jìn)行不同環(huán)境的切換府瞄。其實(shí)想想碧磅,是可以在App的某個(gè)頁面中添加一個(gè)開關(guān)、按鈕或其他方式來進(jìn)行不同環(huán)境的切換控制遵馆,但想想這種方式其實(shí)還是有點(diǎn)影響了App的顯示效果鲸郊,因此就想通過其他方式來實(shí)現(xiàn)。

由于之前了解過iOS App的設(shè)置束 - iOS Settings Bundle 货邓,因此就想著通過 Settings Bundle 來實(shí)現(xiàn)不同服務(wù)器環(huán)境的切換功能秆撮。

1. Demo演示

Demo演示

2. 實(shí)現(xiàn)流程

1. 添加 Settings.bundle
選擇 Settings Bundle
創(chuàng)建 Settings Bundle

Settings.bundle 文件放在工程目錄下即可,放到自己在工程目錄下創(chuàng)建的文件夾中也可以换况。

2. Settings.bundle 的目錄結(jié)構(gòu)

目錄結(jié)構(gòu)

其中en.lproj是用來進(jìn)行國際化的职辨,想要添加其他語言,可復(fù)制en.lproj文件夾戈二,然后修改.lproj文件夾名稱為相應(yīng)語言的名稱即可舒裤。如添加簡(jiǎn)體中文:
簡(jiǎn)體中文:zh-Hans.lproj

3. Root.plist 文件內(nèi)容
3.1 添加選項(xiàng)

先點(diǎn)擊 Root.plist 打開該文件,然后再點(diǎn)擊Preference Items條目的加號(hào)觉吭,進(jìn)行開關(guān)選項(xiàng)(Toggle Switch)的添加:

添加開關(guān)項(xiàng)

同理再添加多值選項(xiàng)(Multi Value)腾供,如下圖所示:

添加多值項(xiàng)

3.2 選項(xiàng)的配置

添加完成后,對(duì)兩個(gè)選項(xiàng)進(jìn)行配置鲜滩,配置內(nèi)容如下:


兩個(gè)選項(xiàng)的配置內(nèi)容

其中選項(xiàng)的TitleIdentifier可自己進(jìn)行修改台腥。

  1. Title可進(jìn)行國際化,只需在相應(yīng)的國際化文件夾.lproj中的Root.strings中進(jìn)行國際化文本的添加即可绒北。
  2. Identifier就是使用NSUserDefaults保存數(shù)據(jù)時(shí)的key值黎侈,在代碼中使用時(shí),需要保持和此處填寫的一致闷游。
  3. Default Value可自己進(jìn)行修改峻汉。
  4. 多值選項(xiàng)的TitlesValues根據(jù)需求自己進(jìn)行設(shè)置,Titles同樣可以進(jìn)行國際化脐往,Values也相當(dāng)于key值休吠。
4. 代碼實(shí)現(xiàn)
4.1 宏定義文件Common.h
#ifndef Common_h
#define Common_h


#pragma mark - 文件引用

#import "BWConstant.h"


#pragma mark - 不同服務(wù)器環(huán)境的配置

#define URL_HEAD_PRODUCT     @"http://www.google.cn"
#define URL_HEAD_DEVELOP     @"https://www.baidu.com"
#define URL_HEAD_JIANSHU     @"http://www.reibang.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 - 開發(fā)調(diào)試相關(guān)的宏定義

/// 是否在App設(shè)置中開啟了調(diào)試開關(guān)
#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文件中相應(yīng)條目的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即對(duì)應(yīng)服務(wù)器地址,在代碼中進(jìn)行使用业簿。
當(dāng)在App設(shè)置中進(jìn)行服務(wù)器環(huán)境切換后瘤礁,代碼中APP_URL_HEAD對(duì)應(yīng)的值也會(huì)改變,因此就達(dá)到了不同服務(wù)器環(huán)境切換的效果梅尤。

3. Demo代碼

???????? Demo地址:BWSwitchServer

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末柜思,一起剝皮案震驚了整個(gè)濱河市岩调,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赡盘,老刑警劉巖号枕,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異陨享,居然都是意外死亡葱淳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門抛姑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赞厕,“玉大人,你說我怎么就攤上這事定硝∶笊#” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵喷斋,是天一觀的道長唁毒。 經(jīng)常有香客問我蒜茴,道長星爪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任粉私,我火速辦了婚禮顽腾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诺核。我一直安慰自己抄肖,他們只是感情好岖研,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布比规。 她就那樣靜靜地躺著,像睡著了一般膊爪。 火紅的嫁衣襯著肌膚如雪入客。 梳的紋絲不亂的頭發(fā)上管毙,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音桌硫,去河邊找鬼夭咬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛铆隘,可吹牛的內(nèi)容都是我干的卓舵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼膀钠,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼掏湾!你這毒婦竟也來了裹虫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤忘巧,失蹤者是張志新(化名)和其女友劉穎恒界,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砚嘴,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡十酣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了际长。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耸采。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖工育,靈堂內(nèi)的尸體忽然破棺而出虾宇,到底是詐尸還是另有隱情,我是刑警寧澤如绸,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布嘱朽,位于F島的核電站,受9級(jí)特大地震影響怔接,放射性物質(zhì)發(fā)生泄漏搪泳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一扼脐、第九天 我趴在偏房一處隱蔽的房頂上張望岸军。 院中可真熱鬧,春花似錦瓦侮、人聲如沸艰赞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽方妖。三九已至,卻和暖如春罚攀,著一層夾襖步出監(jiān)牢的瞬間党觅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工坞生, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仔役,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓是己,卻偏偏與公主長得像又兵,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容