我有使用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)。
答案 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