多环境配置

963 阅读3分钟

参考链接1

参考链接2

1. 概念区分

  • Xcode Workspace

    包含多个Project和其他文档文件

  • Xcode Project

    Project就是一个个的仓库,里面会包含属于这个项目的所有文件,资源,以及生成一个或者多个软件产品的信息。

    每一个project会包含一个或者多个 targets,而每一个 target 告诉我们如何生产 products。 project 会为所有 targets 定义了默认的 build settings,每一个 target 也能自定义自己的 build settings,且 target 的 build settings 会重写 project 的 build settings。

  • Xcode Target

    target 会有且唯一生成一个 Product, 它将构建该 Product 所需的文件和处理这些文件所需的指令集整合进 build system 中。Projects 会包含一个或者多个 targets,每一个 target 将会产出一个 Product。

  • Build Settings

    build setting 中包含了 product 生成过程中所需的参数信息。project 的build settings会对于整个project 中的所有targets生效,而target的build settings是重写了Project的build settings,重写的配置以target为准

    一个 build configaration 指定了一套 build settings 用于生成某一 target 的 product,例如Debug和Release就属于build configaration。

  • Xcode Scheme

    一个Scheme就包含了一套targets(这些targets之间可能有依赖关系),一个configuration,一套待执行的tests。

2. 多环境配置方式

  • 利用Build Configuration来配置

  • 利用xcconfig 文件来配置多环境

  • 利用Targets 来配置多环境

3. 利用 Build Configuratio 配置

1. 新建 Build Configuration

点击Project 找到Configuration,系统默认一个Debug,一个Release。 我们需要选择复制一个 Debug 或 Release。

两者的区别是,Release是不能调试程序,因为默认是屏蔽了可调试的一些参数, 具体可以看BuildSetting里 面的区别,而且Release编译时有做编译优化, 会比用Debug打包出来的体积更小一点。

我们新增一个 Configuration 名字为 Test

注意:刚刚新建完Build Configuration之后,这时如果有pod,请立即执行一下 pod install

2. 新建 Scheme

为新的Configuration新建一个编译Scheme

新建完成后就可以编辑新建的 Schemem,可以把 Run 模式和 Archive 都改成新建的Scheme

注意:如果是使用了Git这些协同工具的可以考虑把刚刚新建的Scheme共享出去,否则其他人看不到这个Scheme。选择“Manage Schemes”

3. 新建 User-defined Build Settings

在 Project的Build Settings里面来,Add User-Defined Setting

然后加入参数,我们可以为不同的环境配置不同的Bundle id 或 ProductName,示例新增 CustomProductName

User-Defined 下面可能还会有 Build_dir 这些目录其实是Pods 自己生成的,之前执行过Pod install 后会自动配置好的,不需要再改动。

4. 修改 info.plist 文件和Images.xcassets

将info.plist里面的Bundle display name修改成我们自定义的字符串。

编译过程中,编译器会根据我们设置好的Scheme去自己选择Debug,Release,Test分别对应的ProductName。

在Images.xcassets里面新添加2个New iOS App Icon,名字最好和scheme的名字相同,这样便于区分。 并在Build Setting中找到 Asset Catalog Compiler 里设置这几种模式下的 App Icon set.

5. 配置并获取环境变量

示例使用GCC 预编译头参数 GCC_PREPROCESSOR_DEFINITIONS

在Build Settings里面找到Apple LLVM Preprocessing,
进一步找到Preprocessor Macros在这里,我们是可以加一些环境变量的宏定义来标识符。
例如可以为Test 新增 EW_TEST 宏

#ifdef EW_DEVELOP

    baseURL = @"http:/192.168.2";

#elif EW_TEST
    
    baseURL = @"http://www.baidu.com";

#else

    baseURL = @"http://sina.com";
    
#endif