在iOS开发期间,在多个环境中优雅地管理差异化设置
浏览:232 次

问题陈述
在开发过程中,我们经常需要满足一个需求,即我们需要在不同的开发环境之间切换以满足不同的发布需求
例如:
用于开发或内部测试构建-在iOS应用商店外发布开发版本
主机-devapi.project-name.com
API密钥-开发_密钥
客户端测试构建-在iOS应用商店外发布企业版
主持人-stgapi.project-name.com
API密钥-企业_密钥
为生产而构建-在App Store中分发
主机-api.project-name.com
API密钥-app_ store_密钥
最简单的方法是,我们可以使用DEBUG来管理两个设置
#如果调试
#定义API_ BASE_ URL@“https://devapi.project-name.com/api/v1 "
#定义API_KEY@“development_KEY”
#其他
#定义API_ BASE_ URL@“https://stgapi.project-name.com/api/v1 "
#定义API_KEY@“enterprise_KEY”
#结束
所以我们会遇到这样的问题
每次在企业发布(客户端测试)和iOS应用商店发布(生产)之间切换时,都需要修改代码。
用于企业分发
#如果调试
//调试设置
#其他
//企业设置
#定义API_ BASE_ URL@“https://stgapi.project-name.com/api/v1 "
#定义API_KEY@“enterprise_KEY”
#结束

用于App Store分发
#如果调试
//调试设置
#其他
//应用商店设置
#定义API_ BASE_ URL@“https://api.project-name.com/api/v1 "
#定义API_KEY@“app_store_KEY”
#结束
我们可以实施以下方法吗
#ifdef开发
#定义API_ BASE_ URL@“https://devapi.project-name.com/api/v1 "
#定义API_KEY@“development_KEY”
#elif企业
#定义API_ BASE_ URL@“https://stgapi.project-name.com/api/v1 "
#定义API_KEY@“enterprise_KEY”
#elifapp_存储
#定义API_ BASE_ URL@“https://api.project-name.com/api/v1 "
#定义API_KEY@“app_store_KEY”
#结束
所以我们需要解决这个问题
如何在不创建不同目标的情况下创建具有不同名称的三个构建?
ProductName-适用于App Store
ProductName Dev-用户内部开发和构建
ProductName Stg-用户客户端测试(企业版)生成
解决方案
创建个人配置
在项目设置(非目标)中,创建以下配置:
调试_开发
调试_暂存
调试_产品

发布_开发
发布_暂存
发布_产品
创建_配置
请注意,如果使用Cocoapods,您需要将配置设置回none,删除项目中Pods文件夹的内容,然后再次运行pod安装。
接下来,为每个环境创建一个场景
创建以下内容(复制原始内容)以替换MyApp解决方案:
创建_方案
MyApp_开发(开发)
MyApp_ Stg(暂存)
MyApp(生产)
在每个场景中,在适当的情况下使用关联的Debug_*和Release_*进行配置。
协会_环境
最后看起来像这样
创建_方案
然后,让我们添加预处理器宏来标识环境
添加额外的预处理器宏以确定要构建的环境。
在项目构造设置中,单击+号添加一个名称,如“环境”的“MYAPP_用户定义”设置。然后,在每个不同的环境组中添加不同的预处理宏,例如DEVELOPMENT=1、STATION=1和PRODUCTION=1
然后,使用$(MYAPP_ENVIRONMENT)将这个新的MYAPP添加到预处理器宏中(在项目级别,而不是目标目标级别)_环境设置。
最后看起来像下图
这样,开发环境的切换可以确定如下:
#ifdef开发
NSString*常量MyAppAPIBaseURL=@“https://api-dev.myapp.com/ ";
#elif阶段
NSString*常量MyAppAPIBaseURL=@“https://api-staging.myapp.com/ ";
#elif生产
NSString*常量MyAppAPIBaseURL=@“https://api.myapp.com/ ";
#结束
您还可以创建不同的用户定义生成设置来执行不同的操作,例如更改app的显示名称。
您可以创建一个名为MYAPP_DISPLAY_的文件。新的NAME设置(与用于标识环境的预处理器宏的创建相同),为每个配置设置正确的名称,然后单击info。

我希望这篇文章对你有帮助。如果你有什么问题,欢迎在评论区留言
完成项目-