iOS多环境配置(转)

基本概念

  • Project:包含了项⽬所有的代码,资源⽂件,所有信息。
  • Target:对指定代码和资源⽂件的具体构建方式。
  • Scheme:对指定Target的环境配置。

通过不同的方式配置多环境

通过Duplicate Target方式配置

  • 通过上述操作之后会多生成一个target,也会多出来一个info.plist
  • 可以定义一个宏的方式,对代码做一些差异化的配置

  • oc在build setting->Preprocessor Macros

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

  • 这种方式配置起来缺点

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

通过配置Scheme的方式

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

使用场景举例

  • 在日常开发中,不同环境下的host url的地址都会有不同的差异,通过定义一个宏的方式
  • 再通过info.plist文件暴露出来
  • 使用方式如下
ini 复制代码
NSString *path = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@".plist"];
NSDictionary *infoDict = [[NSDictionary alloc] initWithContentsOfFile:path];
NSLog(@"host url:%@",infoDict[@"HOST_URL"]);
复制代码

xcconfig文件

xcconfig指南

  • xcconfig文件的语法比较简单,每个配置文件都由一系列键值分配组成,这些键值分配具有以下语法:
ini 复制代码
BUILD_SETTING_NAME = value
复制代码

注释

  • xcconfig文件只有一种注释方式\。

include导入其他设置

  • 在创建xcconfig文件的时候,可以根据需求,创建多个。也就意味着,可以通过include关键字导入其他的xcconfig内的配置。通过include关键字后接上双引号:
arduino 复制代码
#include "Debug.xcconfig"
复制代码
  • 在搜索引入的文件时,如果是以/开头,代表绝对路径,例如:
arduino 复制代码
// 表示确切的文件位置
#include "/Users/xx/Desktop/.../xxx.xcconfig"
复制代码
  • 或者通过相对路径,以${SRCROOT}路径为开始:
arduino 复制代码
#include "Pods/Target Support Files/xxx.xcconfig"
复制代码

变量

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

  • 变量有三种特殊情况:

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

优先级(由高到低):

    1. 手动配置Target Build Settings
    1. Target中配置的xcconfig文件
    1. 手动配置Project Build Settings
    1. Project中配置的xcconfig文件
相关推荐
白玉cfc26 分钟前
【iOS】weak底层原理
macos·ios·cocoa
2501_9160088912 小时前
iOS应用开发工具全面解析:如何选择与优化开发效率
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
a44931536212 小时前
iPhone Face ID 故障的分层诊断——原深感系统与主板加密配对机制
macos·ios·电脑·cocoa·iphone
白玉cfc13 小时前
【iOS】内存五大分区
macos·ios·cocoa
二流小码农17 小时前
鸿蒙开发:以登录案例了解代码架构MVVM
android·ios·harmonyos
GitLqr18 小时前
别在 Flutter 的 main() 里乱锁屏幕方向,小心 iPad 分屏功能被你搞没了
android·flutter·ios
a4493153621 天前
iPhone 基带故障诊断——无服务/搜索不到网络的芯片级维修实录
网络·macos·ios·电脑·iphone
Summer-Bright1 天前
消费者 AI 变现竞争:从“一家独大“到“iOS vs Android“,谁在为 AI 买单?
android·人工智能·ios·ai·自然语言处理·agi
a4493153621 天前
iPhone 充电故障的全链路诊断——从 Lightning/USB-C 接口到 Tristar 充电 IC
c语言·macos·ios·电脑·硬件架构·iphone