01---xcode多环境配置 多target 多config 多xconfig

[toc]

前言

创建一个项目在xcode中有以下三项,在平时开发不是很大型的项目,很少会注意这些问题。

6ba7f9506ad8bb9c3067cbf814382ebd

Xcode配置

  • Project :包含了项⽬所有的代码,资源⽂件,所有信息
  • Target:对某些代码和资源文件的构建方式
  • Scheme:对指定的Targe的配置

真正打工干事就是target。

多环境管理 一套代码多app管理

开发环境 预发布环境 正式环境使用的地址都是不同的每次打包都需手动切换是很麻烦的一件事,有么有一键配置好所有的内容,打包切换一下target呢?

肯定有解决方案

方案一 Duplicate

  1. 选择Duplicate,发现项目中多一个list文件高级技巧01 copy-Info.plist
14930f20a90143580fe59f6c7262d72f
  1. 配置宏
707aecf0909e1fe30904f97835786db9
7ccdc2b8f990274ae7f732e3f76399b5

3.项目中使用,定义一个宏,将工程切换到高级技巧01 copy,打印

9b7174473b0438244a6eb720829f024b

这种修改适用于代码改动不大,只是改了一写接口,第三方申请key等都可以在一个地址集中修改,但是这样还是不够方便

方案二 configurations

  • 配置Configuration的目的是为了增加或删除编译环境对于不同编译环境下的参数需求可以到xcconfig中进行设置。
  • 以下例子未使用xconfig。
  1. 增加一个配置Debug_pre
00f2cd15318e660c5475af4f832d12bc
  1. 在这里修改bundle ID根据项目开发需要
5d9c40eda024eb857eff768900b854ab
  1. 设置对应的域名
01e895326ebab6af2c389c213b6be38b
  1. info.plist文件设置key去build seting里面对应key所对应的值
408cbc0546678e8667d2ecb04efe8848
  1. 创建scheme打到多环境,每个scheme对应一个环境
28897bee7d6980da4fb8ab7a725db4ac
39f507094a2570be0d1fe816b9f02504
  1. APPdelegate配置获取HOSt_URL的路径,切换scheme查看打印结果
  • debug
dcfd557a7b496f692c68623bdf2cb5a6
  • debug_pre
995b6e5862a0a5126b31d38d55912536
  • release
d1225923d8b86e4baaab2b7baddf90c3

上面方式基本可以满意开发需求,但是针对于pod项目还是需求另一种解决方案。

方案三 Configuration+xcconfig

  • 配置xcconfig

xcconfig文件的修改实际上是修改build setting中的参数。相关缩写看Xcode.Build Setting 里的关键字含义

  • 现在配置debug和releas环境

命名规范目录+app名称+环境+xcconfig后缀

1.选择文件


7fc390fc88a32adcfe21dca58a76b682

2.命名,配置

7832146b29062e36f50e5f35c3b25596

3.如果使用pod,在执行pod install会报以下错误

9ff5c695ba44ce78e6868a65b261e1f6

[百度的解释,具体博客作者忘记了] 大概意思是你需要你配置的xcconfig文件中导入pod配置文件的路径。在完成一次pod install之后,Pods工程会为每一个环境生成一个xcconfig文件,包括默认的debug环境,如果我们的目标工程对应的环境没有配置xcconfig文件,那么就会在当前工程工程下拷贝一份对应的xcconfig文件并自动在环境中完成配置,这种配置让工程能够使用pod
我们只需要在其他xcconfig文件中导入相关的pod下的xcconfig就好了,记得使用相对路径,否则在其他电脑上就不能运行了:

  • XXXXXX文件名称
#include "Pods/Target Support Files/XXXXXX.xcconfig"

key也可以知道环境模拟器架构

OTHER_LDFLAGS[config=Debug][sdk=iphonesimulator*][arch=x86_64]=-framework "AFN"

xconfig编写指南

xcconfig文件的语法比较简单,每个配置文件都由一系列键值分配组成,这些键值分配具有以下语法:

BUILD_SETTING_NAME = value
注释

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

include导入其他设置
  • 在创建xcconfig文件的时候,可以根据需求,创建多个。也就意味着,可以通过include关键字导入其他的xcconfig内的配置。通过include关键字后接上双引号:
#include "Debug.xcconfig"
  • 在搜索引入的文件时,如果是以/开头,代表绝对路径,例如:
// 表示确切的文件位置
#include "/Volumes/zed/iOS\ dsb/iOS\ 高级技巧\ 练习/高级技巧01/Pods/Target\ Support\ Files/Pods-高级技巧01/Pods-高级技巧01.debug.xcconfig"
  • 或者通过相对路径,以${SRCROOT}路径为开始:
#include "Pods/Target Support Files/Pods-LoginApp/Pods-LoginApp.debug.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=Cat
TEACHER=$(VALUE)-${VALUE}
  1. 条件变量,根据SDK、ArchConfigration对设置进行条件化,例如:
// 指定`Configration`是`Debug`
// 指定`SDK`是模拟器,还有iphoneos*、macosx*等
// 指定生效架构为`x86_64`
OTHER_LDFLAGS[config=Debug][sdk=iphonesimulator*[arch=x86_64]= $(inherited) -framework "test"

注意⚠️:在Xcode 11.4及以后版本,可以使用default,来指定变量为空时的默认值:

$(BUILD_SETTING_NAME:default=value)

优先级(由高到低)
  1. 手动配置Target Build Settings
  2. Target中配置的xcconfig文件
  3. 手动配置Project Build Settings
  4. Project中配置的xcconfig文件

参考

Xcode多种Build Configuration配置使用
Xcode使用xcconfig文件配置环境

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容