iOS: "Include of non-modular header"与 libxml

标签 ios swift frameworks header libxml2

我正在尝试构建自己的框架“VBL”,它使用 TouchXML这是基于 libxml.dylib

框架构建良好,但每当我尝试在任何项目中使用它时,我都会收到以下错误:

"Include of non-modular header inside framework module VBL.CXMLNode"

特别是因为在我的框架内的 header CXMLNode.h 中,我必须按如下方式包含 libxml:

#include <libxml/tree.h>

将 Build Settings 中的以下属性设置为 YES 是否安全?

allow non-modular included in framework modules

但这无论如何都不适用于 Swift,所以还有其他建议吗?

最佳答案

你可以尝试隐藏#include <libxml/tree.h>如果可以,在私有(private) header 或 .m 文件中。

您也可以尝试创建一个 module.modulemap文件中包含 libxml 根 header 以欺骗 swift 编译器:

module Libxml [system] {
    header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/libxml2/libxml/tree.h"
    export *
}

然后将文件放在一个文件夹中,例如 -module/module.modulemap-。

一旦你这样做了,你应该在 import paths 中链接它在 swift compiler search path 内目标部分build setting , 以及目标的 header search path :

$(SRCROOT)/module

然后在你的代码中,你可以使用@import libxml;

关于iOS: "Include of non-modular header"与 libxml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29865113/

相关文章:

ios - 使用 Parse.com APP ID 和 Client ID 安全问题

iphone - Obj-C 的 ZXing 无法编译

ios - performselector afterdelay 不起作用

ios - 缺少推送通知授权 iOS 应用程序提交(我不使用它)

PHP:从没有框架的 oop 迁移到 Zend php 框架

ios - 应用程序在 iOS 11 中启动时崩溃并出现 "dyld: Library not loaded"错误,但在 iOS 10.3.2 和 Xcode 8.3.3 中运行良好

ios - iOS 上的 OAuth.io 缓存

ios - 如何等待结果异步代码

swift - 我如何从 SafariExtensionHandler 向页面上的注入(inject)脚本发送消息

c++ - 使用 CFBundleCreate 在 Mac 上使用 C++ 加载动态共享库 (DLL)