美文网首页工程架构
动态修改iOS app的环境变量(Jenkins+Cocoapo

动态修改iOS app的环境变量(Jenkins+Cocoapo

作者: Koson | 来源:发表于2017-04-01 17:32 被阅读1435次

    简而言之,这一次是通过修改 Podfile 文件内容来实现动态修改 pod 模块的全局宏定义(Preprocessor Macros)。

    Cocoapods 模块化架构中,子模块使用到一个全局宏定义,但是这个全局宏定义是动态的,还不能在 podspec 文件中这样子固定下来:

    s.xcconfig = { "GCC_PREPROCESSOR_DEFINITIONS" => '$(inherited) UAT_Release=1' }

    因为 UAT_Release 这个定义取决于 Jenkins 参数化构建时选择的环境。
    那么就需要动态去修改 Xcconfig 配置文件,加入全局宏定义的 Build setting,这里是配合 Jenkins 进行自动化部署,使用 shell 脚本来达到动态修改的目的,在构建(Build)步骤中的Execute shell中加入如下脚本:

    Command.png

    说明:
    1、${Configuration}是Jenkins中的参数(This project is parameterized),例如:UAT_Debug、UAT_Release、AppStore_Debug、AppStore_Release 等不同的环境,第一行只是打印出了当前的参数值;

    2、sed 命令往 Podfile 文件中追加内容,这里需要注意的是,与Linux不同,sed -i 后面需要加入 "" 用以备份原文件,不然执行会出错;

    3、/pod 'JJSEventAspect'/ 这一句则是匹配 pod 'JJSEventAspect' 所在的行;

    4、a 表示新增内容,\ 则是换行;

    5、最后的 Podfile 指文件名;

    6、追加完成 hook 的代码之后执行 pod install 就很好理解了;

    7、要追加进去的 hook 代码:
    post_install do |installer|
    installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
    config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = '$(inherited) UAT_Release=1 COCOAPODS=1'
    end
    end
    end
    其中 UAT_Release 是参数化的结果,这个值是动态的。这一段 hook 执行后,子模块(pod)的build setting的全局宏定义(Preprocessor Macros)也都全部修改完成,如果是需要有选择性的修改,可以在 hook 中加入判断逻辑即可。

    修改完成的 Podfile 文件是这样的:

    Podfile screen.png

    最后,测试人员只需要选择需要的打包环境,轻松的点一下 Build 按钮就可以拿到想要的包了。

    Build.png

    相关文章

      网友评论

        本文标题:动态修改iOS app的环境变量(Jenkins+Cocoapo

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