美文网首页
iOS 生产/发布多版本控制

iOS 生产/发布多版本控制

作者: 山已几孑 | 来源:发表于2024-05-20 09:47 被阅读0次

一般,我们做版本控制的时候,都是使用宏定义来做,这样在程序在编译的时候,就可以根据宏定义去做匹配,如下:

// 定义 宏定义,0开发,1灰度,2生产
#define PRODUCTMODE 0

使用:

#if PRODUCTMODE == 0 
    //do something in dev
#else
    //do something in gray or production
#endif
  • 最近项目的新需求 *
    新需求,要求,生产和测试,使用不同的配置文件,使用不同的SDK版本,这样以来,当切换版本的时候,不但需要修改宏定义,还去要去响应的替换配置文件和SDK,这些东西都是在编译之前进行的。

因此,想出一个解决办法

  1. 宏定义前置,
  2. 使用script进行配置文件的替换和SDK的替换

宏定义前置

  1. 在build setting 中,添加用户自定义配置
    如:PRODUCT_MODE: 0
    这里的配置可以被buildSetting 和Build Phases 获取;
  2. 在build setting 中的 Apple Clang - Preprocessing - Preprocessor Macros 中的后面,添加属性:PRODUCTMODE=$(PRODUCT_MODE)
    意思是通过预定义,定义一个的宏PRODUCTMODE,使其值等于用户定义的环境变量PRODUCT_MODE;
    项目中可以直接使用PRODUCTMODE, 而无需使用#define在进行定义。
#if PRODUCTMODE == 0 
    //do something in dev
#else
    //do something in gray or production
#endif
  1. 在build Phases 中,添加RunScript,具体参数如下
    说明一下,配置文件的存放路径:
1- 项目总路径
  2- 项目路径  # 这个是项目的根目录的上一级
    3- 项目.xcodeproj
    3- target名
        4- SDKS
          5- sdks # 这个是目标
        4- Paas
          5- meta.config # 这个是目标
  2- 配置    # 这个是源配置文件
    3- 测试环境  
     4 - meta.config
      4- SDKs
        5- sdk1
        5 - sdk2
    3- 生产环境
      4- meta.config
      4- SDKs
        5- sdk1
        5- sdk2

Shell 代码如下

# Type a script or drag a script file from your workspace to insert its path.
# 定义项目文件夹, 包含了 配置文件夹
projectPathRoot="$(cd ..; pwd)"

configFolder="配置/测试环境"
# 定义 配置文件1的原始路径
configPath=""
# 定义 配置文件1在项目中的路径
finalConfigPath="${projectPathRoot}/项目名/项目名/Resources/SDKS/"
# 定义 配置文件2的原始路径
paasConfig=""
# 定义 配置文件2在项目中的路径
finalPaasConfigPath="${projectPathRoot}/项目名/项目名/Resources/meta.config"

# 这个 PRODUCT_MODE 是我们在buildSetting 中,用户自定义的环境变量
# 这里判断,PRODUCT_MODE 不等于0 时,使用生产的配置
if [ ${PRODUCT_MODE} -ne 0 ];then
    echo '----PRODUCT_MODE----1,2,3,4,5'
    configFolder="配置/生产环境/SDKs/"
    configPath="${projectPathRoot}/${configFolder}"
    
    paasConfig="${projectPathRoot}/配置/生产环境/meta.config"

else
    echo '----PRODUCT_MODE----0'
    configFolder="配置/测试环境/SDKs/"
    configPath="${projectPathRoot}/${configFolder}"
    paasConfig="${projectPathRoot}/配置/测试环境/meta.config"
fi

# 把 configPath中的东西 拷贝到 finalConfigPath
cp -R $configPath $finalConfigPath
# 把 paasConfig 中的文件内容,复制到finalPaasConfigPath
cat $paasConfig > $finalPaasConfigPath

至此可以通过修改配置文件,在编译时,把配置文件写入进去

但目前有一个问题,copy时机上控制的还有问题,编译两次最是稳妥

相关文章

  • iOS系统各版本发布日期整理

    iOS系统各版本发布日期

  • GCloud版本更新测试案例

    iOS 当前版本:1.18.58.0上传预发布版本的应用:1.18.68.0上传预发布版本的应用:1.18.78....

  • iOS 包签名及重签名

    本文章主要介绍iOS 版本发布的两个相关功能。 一 : iOS 开发出的版本发布安装 用两种方式 : 二:iOS...

  • iOS版本控制

    关于版本控制的网上已经写的足够多,在这里总结一下,方便查找 http://www.cocoachina.com/i...

  • iOS - 版本控制

    今天更新了一下版本控制, 方法有很多,直接上代码 根据我们自己的逻辑来的, - (BOOL)xpf_compare...

  • 简述iOS权限测试设计

    1. 背景 iOS系统自2007年发布至今,已发布了12个版本,自iOS7.0之后,不同阶段的系统版本的权限...

  • Kettle生态群

    Kettle开发和版本 GA(一般发布)版本 Kettle最稳定的版本,可以在生产环境中使用。事实上,在生产环境里...

  • 低版本xcode调试高iOS系统

    分享:老版本Xcode调试新版本iOS的通用方法 苹果发布iOS新系统, 开发跟进适配, 低版本xcode又不能调...

  • iOS13 静默推送填坑之旅

    iOS 13系统版本发布后,发现静默类型的通知在iOS 13设备上无法正常接收到,但是在iOS 13之前的系统版本...

  • python多版本控制

    可以看我的博客 lmwen.top 或者订阅我的公众号 简介有稍微接触python的人就会知道,python中...

网友评论

      本文标题:iOS 生产/发布多版本控制

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