iOS项目多环境配置
iOS项目因为真机调试需要苹果开发证书,不同编译环境证书也不一样,我们遇到很多时候上线App Store时与开发测试配置不一样,需要频繁手动修改,那么我们怎样优雅便捷的去做这个事情呢?
三种常见的多环境配置方式,可以结合使用。
首先清楚一个概念:
Project:包含了项目所有代码,资源文件,所有信息;
Target:对指定代码和资源文件的具体构建方式;
Scheme:对指定Target的环境配置。
意思就是,Project需要指定Target编译构建,可以有多个不同的target,每个target可以有多个Scheme,比如Debug、Release、ADHoc等,选对应的配置进行打包。
一、第一种方式:多Target
1、新建target,打开项目,左边栏选中Project->>选中Targets下面的target,右键Duplicate拷贝一份target,会生成一个target和一个info.plist文件
2、对新建的target进行配置,比如:不同的appIcon、bundleID、名称、宏定义、cocoapods等
多个target,独立配置资源和代码比较方便。
二、第二种方式:Scheme
1、新建Configurations配置:
左边栏选中Project->>选中Project,Configurations下面+,新建一个环境,图片示例我新建了一个名为ADHoc的环境
2、新建Scheme,图片示例我新建了一个名为ADHoc的Scheme
3、可以根据Configurations环境配置不同证书、bundleID、分开各种配置等等操作
4、配置Scheme,将Scheme与环境关联起来,Xcode左上角Edit Scheme去配置
这样就可以根据不同Scheme运行不同配置项目
三、第三种方式:利用.xcconfig配置文件
1、新建.xcconfig文件,Xcode新建文件,选中macOS,搜索config,选中ConfiguationSettings File,新建配置文件
2、配置.xcconfig文件,Configurations下各环境对应选择.xcconfig文件
3、配置后,怎样xcconfig定义变量及取值?
两种方式,一种通过info.plist配置取值
代码中使用:
NSString *path = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary *infoDic = [[NSDictionary alloc] initWithContentsOfFile:path];
NSLog(@"%@",infoDic[@"APP_CONFIG"]);
宏定义配置
编译后,Xcode,buildsettings Preprosser Macros会生成对应的变量
项目中直接可以使用
NSLog(@"%s",URL_STRING);
三种方式都可以多环境配置,可以结合使用。
现在很多公司为方便统一管理苹果账户,专门负责管理账户的,开发是拿不到公司账号,不能开发调试。那么开发iOS应用时,必须分为App Store版本和开发测试版本,此时就需要多环境配置项目了。
基于这个应用场景,我们来结合上述方法配置多环境,方便打包测试和上线。
我的配置是,利用多target和.xcconfig文件结合使用,多target可以使用不同pods库、infoplist,可以进行独立配置。
网络环境可以利用本地存储一个值,判断需要配置哪种环境域名,方便测试切换网络环境。
利用脚本打包,可以分为App Store打包脚本、测试打包脚本,测试脚本直接上传蒲公英等测试平台,让测试直接下载进行测试。