Swift框架与libxml
我有使用KissXML Objective-C库的Swift Framework项目。 KissXML内部使用libxml。
当我build立xcode项目(Xcode 6 – beta 5)时,我得到这个错误:
error: <unknown>:0: error: '/SwiftFramework/SwiftFramework/KissXML/DDXMLNode.h:2: include of non-modular header inside framework module SwiftFramework.DDXMLNode
我已经看到这个答案 ,公开相关的头文件。 我已经这样做了,但我不知道如何解决在DDXMLNode.h中导入的这个头文件的情况,这并不是我的项目的明确部分:
#import <libxml/tree.h>
有关如何处理这个问题的任何build议?
注意:我只在一个Objective-C项目上使用了KissXML,它工作正常(Xcode 5)。
诀窍是创build一个模块并将其包含在您的项目中。
要创build模块,您需要创build一个名为的文件,比方说, module.modulemap ,它将API导出到感兴趣的头文件中,如下所示:
module libxmlModuleDevice { header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/libxml2/libxml/tree.h" export * } module libxmlModuleSimulator { header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/libxml2/libxml/tree.h" export * }
请注意,您需要为模拟器和实际设备执行此操作 – 因此文件上有两个条目。
这个文件module.modulemap可以放在任何地方。 我在与Xcode的项目文件(.xcodeproj)相同的级别创build了一个名为modules的目录,并将module.modulemap文件放在那里。
然后将包含此文件的目录添加到Xcode项目的Build Settings下的Header Search Path中 。
在这个例子中,你所要做的就是将单词模块添加到标题searchpath中,因为模块目录与Xcode项目文件处于同一级别。 这将在内部更新Xcode项目variablesHEADER_SEARCH_PATHS 。 而已。
在xcode6中,iphone8.3的path将会是
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.3.sdk/usr/include/libxml2
*更新:更简单的方法:$(SDKROOT)/ usr / include / libxml2
感谢: 在编译期间找不到iPhone libxml2