Saj*_*jon 8 xcode objective-c xcconfig ios swift
是否可以从父项目继承自定义配置?不,不要求继承一些目标设置.
在Xcode每个项目都被初始化为两种标准配置叫Debug和Release.DEBUG使用Preprocessor Macros目标的构建设置中的显示名称下的设置(在.pbxproj此称为GCC_PREPROCESSOR_DEFINITIONS)中设置标志是一种非常常见的模式,可以从这样的Objective-C代码中读取.
#ifdef DEBUG
print("DEBUG flag set")
#else
print("No debug flag!")
#endif
Run Code Online (Sandbox Code Playgroud)
这也适用于Swift,但是我们必须使用OTHER_SWIFT_FLAGS并声明它:
-D DEBUG
并且像我们在上面的Objective C代码中那样读取变量值.
我的应用程序包含一个带有主项目的xcworkspace和几个依赖项目.让我们调用我的应用依赖于框架的项目.由于我有几个框架,我不想多次设置构建设置.
因此我正在使用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
Run Code Online (Sandbox Code Playgroud)
因此声明主项目和框架项目DEBUG的配置 标志Debug(因为Framework.xcconfig继承自Main.xcconfig...).
如果我们想要能够分析应用程序但是DEBUG设置了标志会怎样?分析应该使用相同的优化标志来完成Release.但我们绝对不想DEBUG为Release构建设置标志.
为什么不创建一个新配置,让我们称之为Profiling.问题来了!当然,我们应该为主项目创建这个新配置.然后我们编辑我们的方案和Profile,在
Build Configuration下我们选择了新的配置 Profiling.
现在我们可以在文件中设置DEBUG标志.ProfilingMain.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
Run Code Online (Sandbox Code Playgroud)
我们尝试运行模拟器,我们看到"没有调试标志!" ,因为运行我们正在使用Debug配置,因此不会声明DEBUG标志.
因此,我们尝试分析并启动一些仪器测量并打开控制台.在那里我们看到消息"DEBUG flag set"
它很棒!
我们刚刚检查DEBUG了Main项目中的标志.如果我们在一些框架中想要检查我们的标志会发生什么.所以我们#ifdef DEBUG在一些框架中尝试.这是有效的,因为所有框架都具有配置 Debug,因为它是所有项目的默认设置(与之一起Release).
然后我们尝试#ifdef DEBUG一个框架项目并再次使用Instruments开始分析.现在我们看到消息"没有调试标志!"
不好了!
它不工作!为什么不?!我不知道,但唯一合理的结论必须是我们的项目作为依赖项添加 - 我们的框架 - 不 从Main项目继承Profiling 配置.
对我来说,这是令人难以置信的......这感觉就像是Xcode中的一个缺陷.
除了向所有框架项目添加相同的配置 之外,我不知道任何其他解决方案Profiling(至少对于我知道我想要检查该标志的框架).但这感觉就像是一个丑陋的解决方案!.我有至少10个框架,并且必须为每个框架添加某个配置感觉非常难看.
是的,当然另一种解决方案是使用Release 配置进行性能分析,并像这样声明DEBUG标志Main.xcconfig:
OTHER_SWIFT_FLAGS[config=Release] = -D DEBUG
GCC_PREPROCESSOR_DEFINITIONS[config=Release] = DEBUG
Run Code Online (Sandbox Code Playgroud)
但由于我们希望能够DEBUG在框架中检查标志,我们需要在上面添加两行,同时声明标志Frameworks.xcconfig.
当然,使用Release 配置分析作为方案的构建配置.
然后我们可以添加一个名为Main项目的新配置AppStore,只添加Main项目并将其用于存档应用程序.到现在为止还挺好?
不,这不是一个好主意!因为我刚才说的配置都没有继承项目和父项目之间.因此我们的框架不会继承这个新的AppStore 配置,所以当框架被构建/存档时,我已经看到它们"回退"到Release 配置(不确定你是否可以在某处选择"默认"/"后备" 配置?也许它会回退到你用作新配置基础的那个?).
但是因为我们刚刚为Main项目和所有框架添加DEBUG了配置 标志的声明Release,并且当我们归档app时,它是用于我们所有框架的Release 配置 => 我们的生产应用程序将包含调试代码!.这是非常不受欢迎的,也可能是危险
我不知道......你呢?如果配置将从父项目继承,那不是很好吗?那会解决一切!Apple ...好吗?
| 归档时间: |
|
| 查看次数: |
1633 次 |
| 最近记录: |