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

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

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

對于想省事的我,想著能不能做個開關(guān)來進(jìn)行不同環(huán)境的切換。其實(shí)想想,是可以在App的某個頁面中添加一個開關(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)語言的名稱即可。如添加簡體中文:
簡體中文:zh-Hans.lproj

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

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

添加開關(guān)項

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

添加多值項

3.2 選項的配置

添加完成后,對兩個選項進(jìn)行配置,配置內(nèi)容如下:


兩個選項的配置內(nèi)容

其中選項的TitleIdentifier可自己進(jìn)行修改。

  1. Title可進(jìn)行國際化,只需在相應(yīng)的國際化文件夾.lproj中的Root.strings中進(jìn)行國際化文本的添加即可。
  2. Identifier就是使用NSUserDefaults保存數(shù)據(jù)時的key值,在代碼中使用時,需要保持和此處填寫的一致。
  3. Default Value可自己進(jìn)行修改。
  4. 多值選項的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.itdecent.cn"
#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即對應(yīng)服務(wù)器地址,在代碼中進(jìn)行使用。
當(dāng)在App設(shè)置中進(jìn)行服務(wù)器環(huán)境切換后,代碼中APP_URL_HEAD對應(yīng)的值也會改變,因此就達(dá)到了不同服務(wù)器環(huán)境切換的效果。

3. Demo代碼

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容