美文网首页
iOS开发--浅入浅出环境变量(二)

iOS开发--浅入浅出环境变量(二)

作者: 番茄炒西红柿啊 | 来源:发表于2018-09-20 22:47 被阅读27次

    接上篇

    3.1.2 xcconfig文件的关联

    创建好了配置文件,接下来就是将其和项目环境关联起来
    点击工程 -> Project -> Info -> Configuration


    1.png
    3.1.3 xcconfig文件的编辑以及代码中对其内容的使用

    这里还是以不同运行环境下服务器地址不同为例:

    • DEBUG环境对应的Config.xcconfig文件内容如下:
    GCC_PREPROCESSOR_DEFINITIONS = $(inherited) Base_Url='$(Base_Url)'
    Base_Url = @"我是测试版本地址"
    
    • PreRelease环境对应的Config2.xcconfig文件内容如下:
    GCC_PREPROCESSOR_DEFINITIONS = $(inherited) Base_Url='$(Base_Url)'
    Base_Url = @"我是预测试版本地址"
    
    • 两个配置文件我都定义了一个Base_Url. 第一行 GCC_PREPROCESSOR_DEFINITIONS 是固定写法,其作用是将文件里面定义的字段变成预编译的宏,这样我们在代码中就可以直接访问配置文件里面字段对应的值.
    • 代码中使用如下:
    - (void)viewDidLoad {
        [super viewDidLoad];
        NSLog(@"%@", Base_Url);
    }
    
    • 直接访问即可,编译器会根据当前的运行环境获取到其对应的值.妈妈再也不担心我们需要写环境判断的代码了.所以这里不同的运行环境,log打印出的base_url的值是不一样的.

    3.2 如果你是swift项目

    前面的所有步骤同OC项目无异.也最后一步有差异.


    2.png
    • 同上.新建了2个配置文件并关联对应的运行环境后,内容分别如下:
    // DebugConfig.xcconfig
    Base_url = 我是测试地址
    
    // PreReleaseConfig.xcconfig
    Base_url = 我是预发布地址
    
    • 你会发现我并没有添加 GCC_PREPROCESSOR_DEFINITIONS, 因为swift是不支持宏编译的.所以加了也不会有效果.也就是说我们在xcconfig中添加的字段,并不能通过代码直接获取.
    • 这里我采取的是借用了系统Info.plist来访问的,如果你有更好的方法,还请不吝赐教.
    • 我在plist里面添加了一个类型为Dictionary的Config字段,如下图:


      3.png
    • 然后将配置文件中的字段迁移到Config中: 格式为 key = 字段名, value = ${字段名}, 如下图:


      4.png
    • 最后我们就能够通过代码来读取config中的内容了,代码如下:
    if let info = Bundle.main.infoDictionary, let config = info["Config"] as? Dictionary<String, Any>
            {
                let base_url = config["Base_url"]
                print("\(base_url!)")
            }
    
    • 这样就能过根据不同的运行环境获取到不同的base_url.同OC项目效果一样,不需要再添加手动判断的代码了.当然实际项目中读取config的这一部分逻辑可以封装一下,方便在项目中使用和查看.这里不做示范.

    至此,文章over !!

    相关文章

      网友评论

          本文标题:iOS开发--浅入浅出环境变量(二)

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