我目前正在开发一个具有引用 Security.h 框架的类的项目。由于这是一个可重用的类,并且可能在多个项目中使用,我希望添加一个编译时检查来检查安全框架是否已添加到项目中。我添加到项目的意思是它是否已添加到当前目标的Link Binary With Libraries构建阶段。
现在,我知道类似标题的问题已被多次询问,而且这个特定问题似乎与我正在寻找的内容非常接近,但我也没有在那里找到答案。
我一直在使用:
#ifdef __SENTINEL_VALUE_
..conditional code here..
#endif
代码,但这仅在框架标头在主标头中声明哨兵值时才有效。让我提供两个例子来比较和对比:
SystemConfiguration.framework
有一个框架头SystemConfiguration.h
,其中包括所有子头,但也声明了自己的哨兵值,即_SYSTEMCONFIGURATION_H
因此,使用它进行检查#ifdef _SYSTEMCONFIGURATION_H
非常有效。但是,对于Security.framework
框架头文件,Security.h
并没有声明自己的标记值。它的每个子标头都声明了它们自己的标记值,但是由于它们是被导入的Security.h
,所以标记值被定义了。因此,即使Security.framework
不包含在项目中(未在构建阶段链接),#ifndef
其子标题之一的 an 也会返回 false 值,因为哨兵值是由于其在Security.h
文件中的导入而定义的(更不用说这检查框架标题的子标题的方法让我感到有点难过)。
所以,我的问题是:对于像这样的独特情况Security.framework
,什么是适当的编译时检查来检查框架是否已添加到Link Binary With Libraries阶段(如果存在这样的检查)。
此外,我知道NSClassFromString()
方法和NS_CLASS_AVAILABLE
宏,但我不是在寻找运行时解决方案。
提前谢谢大家!
干杯!