使用 iOS 7 SDK 时,由于libxml2中的更改,我不得不更改库的单行以对 xmloutput 缓冲区使用新的输出缓冲区访问器方法。
NSData * result = [[[NSData alloc] initWithBytes:outputBuffer->buffer->content
length:outputBuffer->buffer->use] autorelease];
导致编译错误“struct_xmlBuf 类型的定义不完整”。使用新的访问器方法,这变成了:
NSData * result = [[NSData alloc] initWithBytes:xmlOutputBufferGetContent(outputBuffer)
length:xmlOutputBufferGetSize(outputBuffer)];
这工作正常,但是当在 iOS 6 上运行时,对于提到 libxml2.2.dylib 的新方法,它会因“惰性符号绑定失败:未找到符号”而崩溃,这并不奇怪。
您如何有条件地进行此更改,以使用基本 SDK iOS 7 编译并仍可在 iOS 5、6 和 7 上运行?
注意:通常在运行时检查 iOS 版本和其他问题一样是不够的,因为旧行不再编译。
我一直在尝试和考虑:
- 检查
xmlOutputBufferGetContent != NULL
,总是正确的 - 使用 libxml2.2 而不是 libxml2
- 检查
LIBXML_DOTTED_VERSION
,总是 2.9.0 - 检查
LIBXML2_NEW_BUFFER
定义的新方法,始终为真
所有这些导致在编译之前或之后总是只选择一行,主要基于 SDK。在非 iOS 项目(谷歌搜索)中处理这种变化的其他少数人似乎总是针对一个版本的 libxml 进行编译。