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