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文件
相关推荐
ITKEY_15 小时前
appstore上架-预览和截屏
ios·appstore
阿捏利15 小时前
详解Mach-O(三十三)Mach-O __mod_term_func节
macos·ios·c/c++·mach-o
2501_9160074717 小时前
提高开发效率的尝试,用快蝎(kxapp)完成 iOS 项目的创建、调试与构建
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
2501_9151063218 小时前
如何在 Mac 上面代理抓包和数据流分析
android·macos·ios·小程序·uni-app·iphone·webview
blackorbird18 小时前
Coruna 间谍软件活动持续扩散,苹果破例为旧版iOS设备推送双版本安全补丁
macos·ios·objective-c·cocoa
for_ever_love__18 小时前
Objective-C 学习 单例模式
学习·ios·单例模式·objective-c
cola_wh18 小时前
避免团队多人 cocopods 冲突未验证
ios
2501_9159214318 小时前
在 Linux 上通过命令行上架 iOS APP,Fastlane + AppUploader(开心上架)
android·linux·运维·ios·小程序·uni-app·iphone
2501_9159214319 小时前
从构建到 IPA 保护,Flutter iOS 包如何做混淆与安全处理
android·安全·flutter·ios·小程序·uni-app·iphone
2501_9160088919 小时前
iPhone 手机硬件组件使用耗能历史记录查看,能耗查看
android·ios·智能手机·小程序·uni-app·iphone·webview