在编译时检查框架的存在吗?
我正在开发一个可以select使用闭源框架的开源项目。 如果项目中包含闭源框架,则会有附加function。 但是,如果框架不包括在项目中,项目仍然应该正确编译。
如何在编译时检查框架是否包含在项目中?
基本上,我想要做这样的事情:
#ifdef _MY_FRAMEWORK_EXISTS #import <MyFramework/MyFramework.h> #endif
我已经看到了两年前的老问题,但是没有回答,所以我现在可能会错过一些新的东西。
我不想在运行时通过NSClassFromString()
,因为这将在编译时失败,当我尝试导入MyFramework
,它不存在。
您可以使用__has_include语言扩展来检查头文件的存在。 http://clang.llvm.org/docs/LanguageExtensions.html#include-file-checking-macros
但是,这只会告诉你,如果头文件被安装。 它不能告诉你“链接二进制与图书馆”链接到其框架。
我build议阅读Mac开发者库:框架编程指南 (其中包括弱链接部分)。
-
“存在”或“包含在项目中”是什么意思? 你的意思是添加到“Link Binary With Libraries”构build阶段(如“ 包含框架”所述 )? 所做的只是影响链接,而不是编译,构build阶段。 要看到这一点,build立。 然后,在Xcode的Log Navigator的构build日志中search
-framework
。所以,是的,如果你想影响你提供的代码的编译 ,你可以手动定义macros
_MY_FRAMEWORK_EXISTS
。 -
我真的不明白你在做什么。 你能解释一下你想要的更高层次吗? 也许,还有更好的办法。
“最小的开销”是好的,但太多的魔法可能会让人困惑。 例如,Xcode的魔法隐藏了包含框架的真实情况。
我还build议查看Facebook SDK for iOS如何适用于高级和低级别的想法。 它可能会做你想做的事情。