iOS使用 xcconfig配置文件的若干坑

栏目: IOS · 发布时间: 6年前

内容简介:有一些文章介绍.xconfig文件的使用,如这篇,但是经过亲自实践,发现还是有一些坑,这里记录下。这一步在“project-info-configuration”位置进行,点击“+”构建“-”消除,没什么问题,这个很简单也不会出错。只是原来使用

有一些文章介绍.xconfig文件的使用,如这篇,但是经过亲自实践,发现还是有一些坑,这里记录下。

构建新的configuration

这一步在“project-info-configuration”位置进行,点击“+”构建“-”消除,没什么问题,这个很简单也不会出错。

iOS使用 xcconfig配置文件的若干坑

只是原来使用 xcodebuild 进行 自动打包 时的 -configuration 指的是就是这里啊。每个项目默认就有的 Debug和Release 配置。

这个 Configuration 是对于同一个项目的配置的一个完整的最高的总结了。

使用.xcconfig文件

新建这个文件很简单,xcode自带了这个模板。然后是在 Configuration 里配置,比如在 debug 时使用 First.xcconfigrelease 时使用 Second.xcconfig ,如图:

iOS使用 xcconfig配置文件的若干坑

这一步也简单。但是我开始使用的时候,思维就走错方向了:

根据各种文章的指示,配置文件(.xcconfig)里面的内容会覆盖当前的 Build Settings 里面的东西,所以我以为是我在配置文件里面写了一个配置,那么 Build Settings 里面的东西会跟着变。

比如我现在是 Debug 环境,然后对应的就是 First.xcconfig ,我在它里面写入:

//:configuration = Debug
OTHER_LDFLAGS = -Objcxxx

//:configuration = Release
OTHER_LDFLAGS = -Objcxxx

//:completeSettings = some
OTHER_LDFLAGS
复制代码

其实就是 Other Linker flags 的配置,可是外面 Build Settings 里的东西并没有变。

iOS使用 xcconfig配置文件的若干坑

我就晕了,这到底怎么回事。

这里有两个坑

  1. 项目的 Build Settings 里直接写的内容是会优先显示的,就是说Xcode有一个默认的配置文件(yourAppName.xcodeproj/project.pbxproj),如果你直接在 Build Settings 里编辑,是写到它里面去,比如只是修改了 other linker flag ,再看github的修改:
iOS使用 xcconfig配置文件的若干坑

这个文件里的配置会优先在 Configuration 里指定的 .xcconfig 文件里的配置,那要怎么使用 .xcconfig 文件里的配置?删掉 Build Settings 里的配置就好了。 Command+delete 搞定。

  1. 因为 .xcconfig 配置文件很难写,主要是各种配置名你记不住,所以就到实际的 Build Settings 里面去拷贝,就在对应的配置项 Command+C 就有了,所以内容就变成了上面那样,我以为3句话是在不同环境下起作用的,是互不干扰的,其实是 OTHER_LDFLAGS 设了3遍,左后一次生效,最后是啥?空的啊,所以即使删除了 Build Settings 里的内容也不出现,我还以为 .xcconfig 文件没起作用!

    所以改成: OTHER_LDFLAGS = -Objcxxx 然后就有了。

    iOS使用 xcconfig配置文件的若干坑

环境切换配置也跟着切换?

首先使用配置文件的作用就是,在环境切换后,配置可以跟着一整套的切换, .xcconfig 就相当于一个把相关的配置打包了。

这里就有了另一个坑,或者说理解失误:

我以为是你在 Build Configuration 里选择什么,那么 Build Settings 里的内容会跟着改变。

iOS使用 xcconfig配置文件的若干坑

实际上 Build Settings 还是原来那样,改变的是每一项里面的内容,比如First.xcconfig配置里写入 OTHER_LDFLAGS = -Objc_first ,而Second.xcconfig里写入 OTHER_LDFLAGS = -Objc_second ,在外面看到的是这样的:

iOS使用 xcconfig配置文件的若干坑

每一项配置里面会再分成Debug、Release等不同的Configuration,而不是 Build Settings 整体切换了。

或者说这是一个结构上的问题,让新接触者会改不清楚Xcode到底是什么做到不同情况使用不同配置的。

整个配置的结构

实际结构是这样:

  • 最上层就是 Project-info-Configuration 里的配置了
  • 然后每个配置里可以有不同配置文件(.xcconfig),每个 target 一个配置文件
  • 然后是每个配置文件里面有许多的配置项

但是在 Build Settings 的显示里,这个结构是倒过来的:

  • 配置文件
  • 配置项
  • 不同Configuration

另外,关于宏

在整个 Build Settings 里,可以在代码里直接使用的, Preprocess Mcros 就是其中之一。

在这里定义不同的宏,就可以在代码里由此做不同处理,比如默认的 DEBUG 宏就经常用来做条件编译。

Build Settings 里可以 $(xxx) 来引用其他配置里的东西,那么也就可以在这里定义宏并且跟随其他配置而改变。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Computer Age Statistical Inference

Computer Age Statistical Inference

Bradley Efron、Trevor Hastie / Cambridge University Press / 2016-7-21 / USD 74.99

The twenty-first century has seen a breathtaking expansion of statistical methodology, both in scope and in influence. 'Big data', 'data science', and 'machine learning' have become familiar terms in ......一起来看看 《Computer Age Statistical Inference》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具