谈到多环境,现在经常用到2-3个环境,比如Test环境,User Acceptance Test用户验收测试环境,Release环境等等。当需要开发打多个包的时候,一般常见做法就是直接代码里面修改环境变量,改完之后Archive一下就打包了。
Xcode已经提供了两种配置:Debug和Release,想要添加一个环境则需要通过Build Configuration来配置。
1,选择你的Xcode项目,找到info-Configuration,然后点击+,选择Duplication”Debug” Configuration 或Duplication”Release” Configuration ,添加一个新的配置
2,如果此时项目里面有cocopods的话,刚刚新建完Build Configuration之后,请立即执行一下
pod installpod安装完成之后会自动生成xcconfig文件,如果你手动新建这个xcconfig,然后把原来的debug和release对应的pod xcconfig文件内容复制进来,这样做是无效的,需要pod自己去生成xcconfig文件才能被识别到。
3,设置配置构建方案 选择项目的Manage Schemes,选择当前的应用程序,点击左下角的小齿轮,然后点击Duplicate,该应用程序构建方案具有相同的名称并且作为项目默认设置 《1》如果是多人开发项目,他们将不会看到你的新方案,因为你没有分享它。如果你选择你的方案,并且右侧点击share复选框,然后提交到你的源代码管理系统,其他人将能够使用这些方案了 《2》在新的对话框中,更改方案的名称,这里可以把Run模式和Archive都改成新建Scheme。若更改方案的名称,例如你的App名称+AdHoc,然后选择Archive选项并且设置Configuration为AdHoc,完成之后点击close按钮
4, 新建User-defined Build Settings 再次回到PRoject的Build Settings里面来,Add User-Defined Setting。
我们这里新加入2个参数,CustomAppBundleld是为了之后打包可以分开打成多个包,这里需要3个不同的Id,建议是直接在原来的Bundleld加上Scheme的名字即可。
CustomProductName是为了app安装到手机上之后,手机上显示的名字,这里可以按照对应的环境给予描述,比如测试服,UAT,等等。如下图。
5, 修改info.plist文件和Images.xcassets 先来修改一下info.plist文件。 由于我们新添加了2个CustomAppBundleld 和 CustomProductName,这里我们需要把info.plist里面的Bundle display name修改成我们自定义的这个字典。编译过程中,编译器会根据我们设置好的Scheme去自己选择Debug,Release,TestRelease分别对应的ProductName。 我们还需要在Images.xcassets里面新添加2个New iOS App Icon,名字最好和scheme的名字相同,这样好区分。
新建完AppIcon之后,再在Build Setting里面找到Asset Catalog Compiler里面,然后把这几种模式下的App Icon set Name分别设置上对应的图标。如上图。
既然我们已经新建了这几个scheme,那接下来怎么把他们都打包成app呢??这里有一份官方的文档Troubleshooting application Archiving in Xcode这里面详细记录了我们平时点击了Archive之后是怎么打包的。
每个环境都要设置好Debug 和 Release!每个环境都配置Debug 和 Release,即使以后不用,也提前设置好,以防万一。
我建议Scheme只配置环境,而进来的Run和Archive来配置Debug和Release,我建议每个Scheme都按照上图来,Run对应的Debug,Archive对应的Release。
配置好上述之后,就可以选择不同环境运行app了。可以在手机上生成不同的环境的app,可以同时安装。
6, 配置和获取环境变量
使用GCC预编译头参数GCC_PREPROCESSOR_DEFINITIONS 我们进入到Build Settings里面,可以找到Apple LLVM Preprocessing,这里我们可以找到Preprocessor Macros在这里,我们是可以加一些环境变量的宏定义来标识符。Preprocessor Macros可以根据不同的环境预先制定不同定义的宏。
如上图,圈出来的地方其实就是一个标识符。
有了这些我们预先设置的标识符之后,我们就可以在代码里面写入如下的代码了。
#ifdef DEVELOP#define searchURL @"http://www.baidu.com"#define sociaURL @"weibo.com"#elif UAT#define searchURL @"http://www.bing.com"#define sociaURL @"twitter.com"#else#define searchURL @"http://www.google.com"#define sociaURL @"facebook.com"#endif新闻热点
疑难解答