7

我有使用 KissXML Objective-C 库的 Swift 框架项目。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 的项目上使用了 KissXML,它运行良好(Xcode 5)。

4

2 回答 2

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 项目的Build Settings下的Header Search Path中。

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

于 2014-08-15T19:42:53.353 回答
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

于 2015-06-05T03:35:38.787 回答