多环境配置
Project:包含了项目所有的代码,资源文件,所有信息
Target:对指定代码和资源文件的具体构建方式
Scheme:对指定Target的环境
方式一
在TARGETS
选中APP右击Duplicate
复制一份APP,并重命名如LoginAPP-Dev
开发版APP。修改LoginAPP-Dev
下的Bundle Identifier,后面加个-Dev
进行区分,产生新的plist
文件名修改同理。
这里可以看出我只是复制了一种构建模式,并没有产生新的代码。
增加区分也可以通过图标进行区分
预先定义宏
在
Debug
模式下自定义宏DEV=1
,Release
模式下自定义宏DEV=0
并可以生效。
swift环境下,找到Other Swift Flags
配置-DEV
变量
在swift代码里进行判断
在操作的过程中,发现要在LoginApp
与LoginApp-Dev
来回配置,甚至还要修改info.plist
,让其生效,配置过程繁琐难免忽略出现差错。
缺点
- 生成多个
info.plist
文件 - 配置繁琐易混乱
方式二
这里需要选中PROJECT
-Info
-Configurations
创建自己想要的编译环境如Beta
其实是与
Edit Scheme
是相通的,打开Scheme
发现多了Beta
一般开发中,存在内网外网,甚至多个,像
debug
对应一个host url,bate
对应一个host url,通过这种方式我们来创建一个。首先选中Build Settings
跳到最下面,点击+
选Add User-Defined Setting
。
定义自己的
scheme
这个时间发现
HOST_URL
下也是对应的Beta
、Debug
、Release
这三个。
然后根据你的需求在每个下面配置你的host url
要想在项目使用,还需把
HOST_URL
创建到info.plist
文件中,通过变量的形式配置,并暴露出来。
在
AppDelegate.m
文件里读取info.plist
文件,调试。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
// 读取info.plist文件
NSString *path = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary *infoDic = [[NSDictionary alloc] initWithContentsOfFile:path];
NSLog(@"HOST_URL ------ > %@", infoDic[@"HOST_URL"]);
return YES;
}
如我在Beta Scheme
下编译,是不是打印出来的就是对应的Beta
的HOST_URL
,从而达到一个多环境的配置。
Scheme
配置相比方式一配置,不需要我们过多的在多个Target
的Build Settings
去配置,只需在一个Target
的Build Settings
里配置
方式三
平常我们通过cocoapods
引用三方库的时候,对应的Targets
的Build Settings
如Other Links Flags
、Search Paths
里面都有一些参数,还是需要我们不停的在Build Settings
去配置
当我们用cocoapods导入文件的时候,会给我们生成两个文件
Pods-LoginApp.debug.xcconfig
、Pods-LoginApp.release.xcconfig
,文件里有很多对应的是key-value形式的变量。使用可以查看PROJECT
的Info
文件如下图所示。
首先新建一个Config
文件,在改文件下Command+N
,创建xcconfig
文件命名一般是“目录+App+环境”
在
PROJECT
-Info
-Configuration
里面选择相应的模式
在对应的
xcconfig
文件里设置如host url
写进
info.plist
文件
比如在
Debug
模式下运行,HOST_URL
是不是就是我在Debug.xcconfig
设置的URL
这种方式设置相比较之前的显得更加清晰,所以的配置都是在这个文件下进行配置,不需要跑到
Build Settings
里进行配置。
xcconfig
文件还有一点便洁的,它可以控制Build Settings
里的选项,比如我们在配置动态库或者静态库的时候,一般需要去Other Linker Flags
配置,但我们有xcconfig
文件,可以在文件里写。
这个样子写完后,并没有在Build Settings
里生效
进行编译(注意因为我们是在Debug.xcconfig
文件里写的,所以我们切换到Debug
模式下)
是不是生效了~
OTHER_LDFLAGS
其实是缩写,这里可以参考xcodebuildsettings网址
比如我们想在xcconfig
文件里添加Header Search Paths
,去该网址搜索,MTL-
去掉
HEADER_SEARCH_PATHS = /user/info/inclue/Bepa
通过
xcconfig
文件实现了多个环境配置,并且把Build Settings
也剥离开了,配合Scheme
根据你项目的需求就可以进行多环境开发。
总结
- 通过scheme+xcconfig进行多环境配置
- xcconfig配置相比其他两种方式美观且易操作
- 多环境配置可以更好的处理相关环境出现的问题
解决xcconfig冲突