前言
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
复制一份
- 选中默认的Target右键
- 点击Duplicate
复制的xxx copy这个Target即为从默认Target复制了一份
配置Target
下面我将复制的Target配置为一个Beta版App
修改名称
- 点击xxx copy回车后修改为xxx-beta
- 点击xxx copy-Info.plist文件回车后修改为xxx-Info-beta.plist
- 打开Build Settings 搜索packaging,将Info.plist File对应的值修改为 xxx-Info-beta.plist,如下图所示
- 修改该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这个宏是一个全局宏,在所有/整个工程的代码中都是有效的,通过它添加宏来区分不同的环境
-
Build Settings中搜索preprocessor macros
-
给Preprocessor Macros添加Environment_mode=1
-
依次为每个Target的Preprocessor Macros添加Environment_mode,等于号后面设置为不同的值用以区分不同的环境
-
通过代码即可对不同环境配置不同的接口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开发的文章,后续有时间我会陆续发布更多文章。