一般我们iOS项目会默认两种编译环境,一种是Debug环境(也就是测试环境),一种是Release环境(也就是正式环境),我们在开发工作中经常跑的项目是Debug环境,因为这种环境会有调试信息,可以打断点等,方便我们测试coding时候的各种信息反馈。而Release环境没有这些相关信息,但是Release环境下软件包会相对比较小运行速度也比较快。我们平常开发中通常会涉及到多种环境,比如说test环境,UAT环境,Release环境,打包时候可能会有BaseUrl的切换,如果在打包时候有一次忘了切换了,那基本上就GG了。配置环境变量能很好的解决环境切换时候引起的这些问题。
下面来介绍一下设置环境变量的方法,这次介绍的是用Build Configuration设置环境变量,也当自己做一次笔记,也希望能给后来人做个参考。(为了测试用随手建了个项目叫ceshi,不要介意哈)。
1.新建Build Configuration
打开项目,点击project,在info里找到configuration,然后点击+号,选择添加,里面系统默认的会有Debug和Release两个环境,我们根据需要选择复制哪个环境,两个环境区别上边介绍过了,可以根据自己需要选择。
我选择复制的是Debug,修改名称为TestRelease,所以我这里点+号会有三个,复制之后点开折叠会发现testrelease里面Configuration Set 默认是你复制的那个(我的是XXX.Debug),而且只有Debug和Release两个可选。
不要急,这个时候我们打开终端,终端打开项目根目录,输入 pod install 回车 pod会给我们生成xcconfig文件,点开项目根目录下Pods文件夹可查看,多了一个Pods-ceshi.testrelease.xcconfig文件
再次回到configurations,点击选择对应的xcconfig
这个时候在我们项目的project已经设置configuration,但是Pod项目并没有,选中pod项目,新建并选择对应的configuration
2.新建Scheme
上边configuration已经新建并配置完成,接下来我们要为新建的configuration新建编译Scheme。
点击NewScheme,名称设置成我们刚刚建的configuration(其实这只是一个命名,怎么命都行,不过为了方便尽量保持一致,以免出错),新建完成之后把Scheme的Run和Achieve都改成刚刚建的Configuration。
如果是团队开发app 的话,一定要把shared勾选上,这样通过git等协同开发的其他人才能看到我们新建的Scheme,可以点shared旁边的Manage Schemes按钮查看所有Schemes选中状态。
3.新建User-Defined Setting
schemes操作完成之后,回到项目的project,点击Build Setting,选择+号按钮,点击Add User-Defined Setting 我们来配置标示符
配置不同的bundleID和AppName,我添加的字段是CostomAppBundleId和CustomProductName,对应的Scheme填写上BundleID和ProductName,如果不想做区分,也可填写一样的。
4.修改info.plist,显示不同的appName和图标
找到我们app根目录中的info.plist文件,修改bundleName、BundleDisplayName和Bundleidentifier。修改后编译时候,编译器会根据我门设置好的Scheme去选择不同的AppName和BundleID
设置到这一步名字已经根据不同的Scheme有不同的显示了,那么我们来设置一下不同scheme下显示不同的appIcon。找到我们项目中的Assets.xcassets,点击+号选择App Icons & Launch image->New iOS App Icon 。文件命名根据自己来,我还是用的和configuration相同的命名。
新建完成之后,添加icon(我这里只放了一张图片,为了测试)再回到Target 的Build Setting里找到Asset Catalog Compiler里,把刚刚新建的appIcon分别设置对应的Scheme。
已经配置好环境了,那要怎么使用呢?这里把一个前辈的建议给大家共同学习,我也是从大神这里学习并做的这个笔记:“这里分享一下我分好这些环境的心得。一切切记,每个环境都要设置好Debug 和 Release!千万别认为线上的版本只设置Release就好,哪天需要调试线上版本,没有设置Debug就无从下手了。也千万别认为测试环境的版本只要设置Debug就好,万一哪天要发布一个测试环境需要发Release包,那又无从下手了。我的建议就是每个环境都配置Debug 和 Release,即使以后不用,也提前设置好,以防万一。注意这里一定要把Scheme的名字和编译方式区分开,选择了一个Scheme,只是相当于选择了一个环境,并不是代表这Debug还是Release。”
5.配置和获取环境变量
使用GCC预编译参数GCC_PROEPROCESSOR_DEFINITONS
在Target的Build Settings 中搜索preprocessor 找到Preprocessor Macros
双击点击弹出框的+号,添加对应的标识符,我这里就用项目名的首字母简写加上对应的Scheme名称,各位小伙伴在添加时候一定要按自己公司的规范,其主要目的是为了好分辨。
设置好标识符那我们就去试用一下是否能够使用,在代码中添加如下一段代码,通过不同的标识符来改变view的背景色,运行之后是可以根据不同的标识符来切换颜色,本文只是进行背景色设置,在开发中我们可以根据标识符切换我们项目中其他的设置,最常用的就是根据不同的环境切换我们调试的BaseUrl,只要在pch或者base类中写好,我们就可以不用动其他代码自由切换环境更换不同的URL,也不会因为疏忽导致项目上线了,发现URL忘了改了这种尴尬的局面。
文章到此为止,是我用来做笔记用的,如果看到这里对你有用那更好,相互学习。本文是借鉴大神一缕殇流化隐半边冰霜的文章的学习笔记,大神文章有更多的配置和获取环境变量方法,如有需求请去大神那参阅。此为学习笔记,如有错误欢迎指出,免得误导他人。谢谢,溜了溜了》〉》〉》〉》〉