带有libxml的Swift框架

时间:2014-08-06 23:01:42

标签: ios frameworks swift libxml2 kissxml

我有使用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

我已经看到这个answer讨论了将相关的头文件公开化。我已经这样做了,但我不知道如何解决在DDXMLNode.h中导入的这个标题的情况,这不是我项目的明确部分:

#import <libxml/tree.h>

有关如何处理此事的任何建议吗?

注意:我在Objective-C项目中使用过KissXML,它运行良好(Xcode 5)。

2 个答案:

答案 0 :(得分: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 *
}

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

此文件 module.modulemap 可放置在任何位置。我在与Xcode的项目文件(.xcodeproj)相同的级别创建了一个名为 modules 的目录,并在那里放置了 module.modulemap 文件。

然后将包含此文件的目录添加到Xcode项目的构建设置下的标题搜索路径

在此示例中,您只需要将模块添加到标题搜索路径,因为模块目录位于与Xcode项目文件相同的级别。这将在内部更新Xcode项目变量 HEADER_SEARCH_PATHS 。就是这样。

答案 1 :(得分:2)

在xcode6,iphone8.3中,路径将是

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.3.sdk/usr/include/libxml2

*更新: 更简单的方法: $(SDKROOT)/ usr / include目录/ libxml2的
感谢: iPhone libxml2 not found during build