iOS添加多个Target,实现打包不同版本

前言

App开发到测试再到发布这一系列过程中,我们回经过开发环境、测试环境、生成环境、UAT环境等,每一中环境都可能对应如下不同配置

  • 不同的Bundle ID
  • 不同的接口Host地址
  • 不同的App Name
  • 不同的AppIcon

等等……

我们不可能每次都修改这些配置,虽然也可以通过git贮藏进行替换的简介操作,或者其他文件替换的操作方式。但是这些都不是最好的方式,其实iOS也可以像Android一样通过buildTypes和productFlavors来配置不同的版本。
就是通过添加多个Target

但是不得不说,还是Android通过纯代码的方式更为高大上
下面是Android通过productFlavors配置不同版本的代码

productFlavors {
             armv7 {
                 applicationId "com.xxx.xxx.dev"
                 versionCode cdvVersionCode ?: defaultConfig.versionCode + 2
                 manifestPlaceholders = [app_name:"xxx-Dev"]
                 ndk {
                     abiFilters "armeabi-v7a"//,"armeabi"
                 }
             }
             Beta{
                applicationId "com.xxx.xxx.beta"
                versionCode cdvVersionCode ?: defaultConfig.versionCode + 2
                manifestPlaceholders = [app_name:"xxx-Beta"]
//                resValue("string" , "baseUrl","xxxxxxx")
//                versionCode 2
//                versionName "1.0.2"
                ndk {
                    abiFilters "armeabi-v7a"//,"armeabi"
                }
            }
            Online{
//                applicationId "com.xxx.xxx"
                versionCode cdvVersionCode ?: defaultConfig.versionCode + 2
                manifestPlaceholders = [app_name:"xxx"]
//                resValue("string" , "baseUrl","xxxxxxx")
//                versionCode 1
//                versionName "1.0.3"
                ndk {
                    abiFilters "armeabi-v7a"//,"armeabi"
                }
            }
        }

言归正传,下面进入正题

添加Target

有两种方式添加Target,一种新建一份,另一种是复制一份,本文介绍使用的复制一份这种方式

新建一份

操作步骤为File->New->Target->选择一个模板
新建一份这种方式创建出来的会拥有自己的AppDelegate和main

复制一份

  1. 选中默认的Target右键
  2. 点击Duplicate
    复制的xxx copy这个Target即为从默认Target复制了一份
    在这里插入图片描述

配置Target

下面我将复制的Target配置为一个Beta版App

修改名称

  1. 点击xxx copy回车后修改为xxx-beta
  2. 点击xxx copy-Info.plist文件回车后修改为xxx-Info-beta.plist
  3. 打开Build Settings 搜索packaging,将Info.plist File对应的值修改为 xxx-Info-beta.plist,如下图所示在这里插入图片描述
  4. 修改该Target Scheme的名称。进入Manage Schemes页面,将xxx copy修改xxx-beta

以上操作完成后,选中xxx-beta这Scheme,编译下,看是否有报错

‘xxx-Swift.h‘ file not found

接下来我们编译一下,报错了,报错信息为
‘xxx-Swift.h‘ file not found
如没有这个报错,请直接跳过这里
这个问题一般在OC和Swift混编的时候出现
解决办法如下
6. 在Build Settings中搜索swift complier - general
7. 将 Object-C Generated Interface Header Name对应的值修改为xxx-Swift.h
在这里插入图片描述

配置不同的环境的接口Host

Preprocessor Macros这个宏是一个全局宏,在所有/整个工程的代码中都是有效的,通过它添加宏来区分不同的环境

  1. Build Settings中搜索preprocessor macros

  2. 给Preprocessor Macros添加Environment_mode=1

  3. 依次为每个Target的Preprocessor Macros添加Environment_mode,等于号后面设置为不同的值用以区分不同的环境
    在这里插入图片描述

  4. 通过代码即可对不同环境配置不同的接口Host,如下图所示

#ifdef Environment_Mode

#if Environment_Mode == 0

    #define APP_HOST  @"https://xxx0"

#elif Environment_Mode == 1

    #define APP_HOST  @"https://xxx1"

#elif Environment_Mode == 2

    #define APP_HOST  @"https://xxx2"

#endif

#endif

这是在CSDN上写的第一篇关于iOS开发的文章,后续有时间我会陆续发布更多文章。

猜你喜欢

转载自blog.csdn.net/oHaiKuoTianKong1682/article/details/107766372