[toc]
前言
创建一个项目在xcode中有以下三项,在平时开发不是很大型的项目,很少会注意这些问题。
6ba7f9506ad8bb9c3067cbf814382ebd
Xcode配置
-
Project:包含了项⽬所有的代码,资源⽂件,所有信息 -
Target:对某些代码和资源文件的构建方式 -
Scheme:对指定的Targe的配置
真正打工干事就是target。
多环境管理 一套代码多app管理
开发环境 预发布环境 正式环境使用的地址都是不同的每次打包都需手动切换是很麻烦的一件事,有么有一键配置好所有的内容,打包切换一下target呢?
肯定有解决方案
方案一 Duplicate
- 选择Duplicate,发现项目中多一个
list文件高级技巧01 copy-Info.plist
14930f20a90143580fe59f6c7262d72f
- 配置宏
707aecf0909e1fe30904f97835786db9
7ccdc2b8f990274ae7f732e3f76399b5
3.项目中使用,定义一个宏,将工程切换到高级技巧01 copy,打印
9b7174473b0438244a6eb720829f024b
这种修改适用于代码改动不大,只是改了一写接口,第三方申请key等都可以在一个地址集中修改,但是这样还是不够方便
方案二 configurations
- 配置
Configuration的目的是为了增加或删除编译环境对于不同编译环境下的参数需求可以到xcconfig中进行设置。 - 以下例子未使用xconfig。
- 增加一个配置Debug_pre
00f2cd15318e660c5475af4f832d12bc
- 在这里修改bundle ID根据项目开发需要
5d9c40eda024eb857eff768900b854ab
- 设置对应的域名
01e895326ebab6af2c389c213b6be38b
- info.plist文件设置key去build seting里面对应key所对应的值
408cbc0546678e8667d2ecb04efe8848
- 创建scheme打到多环境,每个scheme对应一个环境
28897bee7d6980da4fb8ab7a725db4ac
39f507094a2570be0d1fe816b9f02504
- 在
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命名规则,仅由大写字母,数字和下划线(_)组,原则上大写,也可以不。字符串可以是"也可以是'号。
变量有三种特殊情况:
- 在
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不起作用。
- 引用变量,
$()和${}两种写法都可以:
VALUE=Cat
TEACHER=$(VALUE)-${VALUE}
- 条件变量,根据
SDK、Arch和Configration对设置进行条件化,例如:
// 指定`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)
优先级(由高到低)
- 手动配置
Target Build Settings -
Target中配置的xcconfig文件 - 手动配置
Project Build Settings -
Project中配置的xcconfig文件












网友评论