带有libxml的Swift框架

inf*_*oop 7 frameworks libxml2 ios kissxml swift

我有使用KissXML Objective-C库的Swift Framework项目.KissXML内部使用libxml.

当我构建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>

有关如何处理这个的任何建议?

注意:我在Objective-C only项目上使用过KissXML,它工作正常(Xcode 5).

inf*_*oop 10

诀窍是创建一个模块并将其包含在您的项目中.

要创建模块,您可以创建一个名为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 *
}
Run Code Online (Sandbox Code Playgroud)

请注意,您需要为模拟器和实际设备执行此操作 - 因此文件中有2个条目.

这个文件module.modulemap可以放在任何地方.我创建了一个名为modules的目录,与Xcode的项目文件(.xcodeproj)处于同一级别,并将module.modulemap文件放在那里.

然后将包含此文件的目录添加到Xcode项目的Build Settings下的Header Search Path.

在此示例中,您所要做的就是将单词模块添加到Header Search Path,因为modules目录与Xcode项目文件处于同一级别.这将在内部更新Xcode项目变量HEADER_SEARCH_PATHS.而已.