美文网首页iOS开发(OC)iOS常用关于app安全性
【转】iOS开发调试技巧通过Settings Bundle在Ap

【转】iOS开发调试技巧通过Settings Bundle在Ap

作者: 爱恨的潮汐 | 来源:发表于2021-01-28 16:32 被阅读0次

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

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

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

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

    1. Demo演示

    image

    2. 实现流程

    1. 添加 Settings.bundle
    image image

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

    2. Settings.bundle 的目录结构
    image

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

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

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

    image

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

    image
    3.2 选项的配置

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

    image

    其中选项的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

    原文链接:https://www.jianshu.com/p/757501e33d82

    其他类似功能地址:https://www.jianshu.com/p/b22212f2ccd7

    相关文章

      网友评论

        本文标题:【转】iOS开发调试技巧通过Settings Bundle在Ap

        本文链接:https://www.haomeiwen.com/subject/zwcxtltx.html