基本概念

  • Project:包含了项⽬一切的代码,资源⽂件,一切信息。
  • Target:对指定代码和资源⽂件的详细构建方法。
  • Scheme:对指定Target的环境装备。

经过不同的方法装备多环境

经过Duplicate Target方法装备

iOS多环境配置(转)

  • 经过上述操作之后会多生成一个target,也会多出来一个info.plist

iOS多环境配置(转)

  • 能够界说一个宏的方法,对代码做一些差异化的装备

  • oc在build setting->Preprocessor Macros

  • swift在build setting->Other Swift Flags,需要留意的是swift中运用宏需要加上-D参数

  • 这种方法装备起来缺点

    • 生成多个info.plist
    • 需要装备的点比较多,比较乱

经过装备Scheme的方法

iOS多环境配置(转)

  • 再经过Edit Scheme->Manage Schemes新增不同环境的scheme
  • 再将不同的Scheme对应到不同的Build Configuration模式下

运用场景举例

  • 在日常开发中,不同环境下的host url的地址都会有不同的差异,经过界说一个宏的方法

iOS多环境配置(转)

  • 再经过info.plist文件露出出来

iOS多环境配置(转)

  • 运用方法如下
NSString *path = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@".plist"];
NSDictionary *infoDict = [[NSDictionary alloc] initWithContentsOfFile:path];
NSLog(@"host url:%@",infoDict[@"HOST_URL"]);
仿制代码

xcconfig文件

xcconfig攻略

  • xcconfig文件的语法比较简单,每个装备文件都由一系列键值分配组成,这些键值分配具有以下语法:
BUILD_SETTING_NAME = value
仿制代码
  • Build Settingvalue对应字段的缩写,Build Setting字段对应查询

注释

  • xcconfig文件只要一种注释方法\。

include导入其他设置

  • 在创立xcconfig文件的时候,能够根据需求,创立多个。也就意味着,能够经过include要害字导入其他的xcconfig内的装备。经过include要害字后接上双引号:
#include "Debug.xcconfig"
仿制代码
  • 在查找引进的文件时,假如是以/开头,代表绝对路径,例如:
// 表示切当的文件位置
#include "/Users/xx/Desktop/.../xxx.xcconfig"
仿制代码
  • 或者经过相对路径,以${SRCROOT}路径为开始:
#include "Pods/Target Support Files/xxx.xcconfig"
仿制代码

变量

  • 变量界说,按照OC命名规矩,仅由大写字母,数字和下划线(_)组成,原则上大写,也能够不。字符串能够是"也能够是'号。

  • 变量有三种特殊情况:

      1. xcconfig中界说的变量与Build Settings的共同,那么会发生覆盖。能够经过$(inherited),让当时变量承继变量原有值。例如:
    OTHER_LDFLAGS = -framework SDWebImage
    OTHER_LDFLAGS = $(inherited) -framework AFNetworking
    // OTHER_LDFLAGS = -framework SDWebImage -framework AFNetworking
    仿制代码
    
    留意⚠️:有部分变量不能经过xcconfig装备到Build Settings中,例如:配	 置PRODUCT_BUNDLE_IDENTIFIER不起作用。
    仿制代码
    
      1. 引证变量,$()${}两种写法都能够:VALUE=value
    TEACHER=$(VALUE)-${VALUE}
    仿制代码
    
      1. 条件变量,根据SDKArchConfigration对设置进行条件化,例如:
    // 指定`Configration`是`Debug`
    // 指定`SDK`是模拟器,还有iphoneos*、macosx*等
    // 指定生效架构为`x86_64`
    OTHER_LDFLAGS[config=Debug][sdk=iphonesimulator*[arch=x86_64]= $(inherited) -framework "Cat"
    仿制代码
    
    留意⚠️:在Xcode 11.4及以后版本,能够运用default,来指定变量为空时的默认值:
    $(BUILD_SETTING_NAME:default=value)
    仿制代码
    

优先级(由高到低):

    1. 手动装备Target Build Settings
    1. Target中装备的xcconfig文件
    1. 手动装备Project Build Settings
    1. Project中装备的xcconfig文件