引入
记得之前说过一遍关于通过配置xcconfig文件,各取Debug与Release同一个宏的参数值的文章,特别是在不同的环境,测试环境Api与正式环境Api的区别,但是如果一个项目,有线上版本,有内测版本,有开发版本等等,或者有各种不同环境的Api,不同的环境下,宏值的区分,这时候用多target最为合适不过;在发版时,选中生产Target编译打包;举个例子,如果一个项目Api有三个环境值要区分:
///生产 #define API_URL @"http://www.xkapi.com/" ///内测 #define API_URL @"http://www.xkapi0000.com/" ///本地 #define API_URL @"http://1.1.1.12:0000/"
你可能会将上面的代码写在PCH文件或者PCH引用的头文件里面,然后其他用不到的两个,注释掉,这种方式有一定的缺点:
每次修改PCH文件里面的引用与宏,项目重新编译会比较慢
频繁切换同一个宏,在正式发版打包时,会偶尔失误或者忘记是否变更到了生产Api
这时候可以为项目创建Target,用现有的默认Target作为生产环境,再分别创建一个内测、本地开发环境Target,打包时用生产Target直接打包,需要什么环境的Api,直接切换到不同的Target编译运行即可。
创建Target
点击项目名称,可以看到TARGETS里面的Target,默认一个,右键点击默认的Target名称,然后点击Duplicate,直接复制一个现有的Target,这里直接复制两个,然后对新建的两个Target分别重命名,用DEV作为本地开发环境,BETA作为内测环境,然后会发现,在新建Targe的同时,系统新创建了info.plist,其实不同的Target,可配置不同的info.plist文件,但是也可直接删除这两个info.plist文件,后面直接再引用默认的info.plist就行;
配置info.plist
新Target删除了默认的info.plist文件后,选中新Target会提示让选择info.plist文件,点击选择info.plist文件,会弹出选择框,只需要将项目一开始默认的Target的info.plist配置到新的Target上就可以了,选好后,切换下不同的Target就可以看到项目名称,版本号编译号等等;也可以通过选中Target 点击Build Settings,然后搜索 packaging,可以在info.plist File选中配置即可,将两个新建的Target都进行配置;
配置Target环境参数
为了能在使用不同的Target编译,让系统自动获取不同的Target环境下配置宏 Api 的值,我们需要为每一个Target配置一个共同的参数,并赋予不同的值,来区分不同的Target,参数名可自定义,但每个Target必须同一个参数名,这里使用 DEVELOP_ENV 参数作为示例,参数添加:
1、选中Target,点击Build Settings 搜索 preprocessing
2、找到 Preprocessor Macros
3、双击 Preprocessor Macros 后面的空白区域
4、在弹出的弹框中,点击下面的“+”号,添加 DEVELOP_ENV 参数并赋值
按照步骤为每一个Target都添加 DEVELOP_ENV 参数,生产环境参数值为1,本地开发环境参数值为0,内测环境参数值为2,至此环境参数宏配置完成
修改 Podfile 文件(未使用Pod忽略)
在未添加多Target时,pod只为一个Target服务,那么就需要稍微改一下 Podfile文件,让pod为每个Target服务
修改前的Podfile文件内容
platform :ios, '10.0'
source 'https://github.com/CocoaPods/Specs.git'
inhibit_all_warnings!
target 'XKProject' do
pod 'MJRefresh'
end
修改后的Podfile文件内容
platform :ios, '10.0'
source 'https://github.com/CocoaPods/Specs.git'
inhibit_all_warnings!
targets = ['XKProject','XKProject-DEV','XKProject-BETA']
#循环
targets.each do |t|
target t do
pod 'MJRefresh'
end
end
多Target使用
围绕刚开始的目的说说,不同环境,系统使用自定义宏 Api 的值不同,现在修改PCH或PCH引用的头文件里的 API宏
修改宏
修改前
///生产
#define API_URL @"http://www.xkapi.com/"
///内测
//#define API_URL @"http://www.xkapi0000.com/"
///本地
//#define API_URL @"http://1.1.1.12:0000/"
修改后
///生产、线上 - 对应Target DEVELOP_ENV参数值
#define ENV_PRO 1
///开发 - 对应Target DEVELOP_ENV参数值
#define ENV_DEV 0
///内侧 - 对应Target DEVELOP_ENV参数值
#define ENV_BETA 2
#if DEVELOP_ENV == ENV_PRO
///生产
#define API_URL @"http://www.xkapi.com/"
#elif DEVELOP_ENV == ENV_DEV
///开发
#define API_URL @"http://1.1.1.12:0000/"
#else
///内测
#define API_URL @"http://www.xkapi0000.com/"
#endif
编译测试
选中开发环境Target(XKProject-DEV),编译后运行,打印 API_URL
打印结果
http://1.1.1.12:0000/
选中内测环境Target(XKProject-BETA),编译后运行,打印 API_URL
打印结果
http://www.xkapi0000.com/
选中生产环境Target(XKProject),编译后运行,打印 API_URL
打印结果
http://www.xkapi.com/
注意事项
项目中使用多Target后,在创建类文件时,默认文件会自动添加到默认Target,需要手动勾选其他Target;
文章来源: 博客园
- 还没有人评论,欢迎说说您的想法!