是否可以从父项目继承自定义配置?不,不要求继承某些目标设置。
Xcode中的每个项目都使用名为Debug
和Release
的两个标准配置进行初始化。在目标的构建设置中使用显示名称DEBUG
下的设置设置Preprocessor Macros
标记是一种非常常见的模式(在.pbxproj
中称为GCC_PREPROCESSOR_DEFINITIONS
),这可以从像这样的Objective-C代码中读取。
#ifdef DEBUG
print("DEBUG flag set")
#else
print("No debug flag!")
#endif
这也适用于Swift,但我们必须使用OTHER_SWIFT_FLAGS
并声明如下:
-D DEBUG
并且像我们在上面的Objective C代码中那样读取变量值。
我的应用程序包含一个带有主项目的xcworkspace和几个依赖项目。让我们的应用程序调用依赖于 frameworks 的项目。由于我有几个框架,我不想多次设置构建设置。
因此我使用的是xcconfig
个文件。我有一个主配置,即主项目的配置文件,我们称之为Main.xcconfig
。我有另一个名为Framework.xcconfig
的配置文件,它以行#include "Main.xcconfig"
开头,因此继承了Main
的设置。当然,我设置每个框架以使用所述Framework.xcconfig
文件。
当我们有这些配置文件时,声明DEBUG
标志非常方便,我们在Main.xcconfig
添加:
OTHER_SWIFT_FLAGS[config=Debug] = -D DEBUG
GCC_PREPROCESSOR_DEFINITIONS[config=Debug] = DEBUG
因此为主项目和框架项目声明配置 DEBUG
的{{1}}标志(因为Debug
继承自Framework.xcconfig
...)。
如果我们希望能够对应用进行概要分析但设置了Main.xcconfig
标志,该怎么办?应使用与DEBUG
相同的优化标志进行性能分析。但我们绝对不希望为Release
版本设置DEBUG
标记。
为什么不创建新的配置,让我们称之为Release
。 问题出现了!当然我们应该为主项目创建这个新的配置。然后我们编辑我们的方案和 Profile 以及
构建配置我们选择了新的配置 Profiling
。
现在,我们可以在Profiling
文件中为DEBUG
设置Profiling
标记。
Main.xcconfig
我们尝试运行模拟器,我们看到"没有调试标志!" ,这是预期的,因为运行时我们使用的是OTHER_SWIFT_FLAGS[config=Debug] = -D DEBUG // we keep this
GCC_PREPROCESSOR_DEFINITIONS[config=Debug] = DEBUG // we keep this
OTHER_SWIFT_FLAGS[config=Profiling] = -D DEBUG
GCC_PREPROCESSOR_DEFINITIONS[config=Profiling] = DEBUG
配置,因此没有声明Debug
标志。
因此,我们尝试分析并启动一些仪器测量和open the console。在那里,我们看到消息" DEBUG标志设置"
很有效!
我们刚刚检查了Main项目中的DEBUG
标志。如果我们在一些框架中想要检查我们的标志会发生什么。所以我们在某个框架中尝试DEBUG
。这是有效的,因为所有框架都具有配置 #ifdef DEBUG
,因为它是所有项目的默认设置(与Debug
一起)。
然后我们在我们的一个框架项目中尝试Release
并再次使用Instruments开始分析。现在我们看到消息"没有调试标志!"
哦不!
它不工作!为什么不?!我不知道,但唯一合理的结论必须是我们的项目作为依赖项添加 - 我们的框架 - 不继承 #ifdef DEBUG
配置< / em>来自主项目。
对我而言,这是令人难以置信的......这感觉就像是Xcode中的一个缺陷。
除了向所有框架项目添加相同的配置 Profiling
之外,我不知道任何其他解决方案(至少对于我知道我要检查该标志的框架) )。 但这感觉就像是一个丑陋的解决方案!。我有至少10个框架,并且为每个框架添加某个配置感觉非常难看。
是的,当然另一种解决方案是使用Profiling
配置进行性能分析,并在Release
中声明DEBUG
这样的标志:
Main.xcconfig
但是,由于我们希望能够在框架中检查OTHER_SWIFT_FLAGS[config=Release] = -D DEBUG
GCC_PREPROCESSOR_DEFINITIONS[config=Release] = DEBUG
标志,我们需要将上面的两行添加到DEBUG
,并将其标记为Frameworks.xcconfig
。
当然,使用Release
配置进行分析,作为方案的构建配置。
然后我们可以将一个名为AppStore
的新配置添加到我们的Main项目中,并且只添加Main项目并将其用于存档应用程序。到目前为止还不错?
不,这不是个好主意!因为我刚才说项目和父项目之间的配置是不。因此,我们的框架不会继承这个新的AppStore
配置,因此当构建/存档框架时,我已经看到了它们&#34; fallback&#34;到Release
配置(不确定你是否可以在某处选择&#34;默认&#34; /&#34;后备&#34; 配置?它将回退到您用作新配置的基础的那个?)。
但是,因为我们刚为Main项目和所有框架添加了配置 DEBUG
的{{1}}标志声明,它是Release
我们归档app =&gt;时用于所有框架的配置 我们的制作应用程序将包含调试代码!。这是非常不受欢迎的,也可能是危险的。
我一无所知......你呢?如果从父项目继承配置,那会不会很好?那会解决一切! Apple ...好吗?
答案 0 :(得分:0)
解决方法:为每个项目和全局文件创建xconfig文件。在项目中,xconfig文件通过以下路径包含全局文件:
#include“路径/至/File.xcconfig”
希望获得帮助