iOS 7 SDK を使用している場合、libxml2の変更により、ライブラリの 1 行を変更して、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 に言及している新しいメソッドに対して「lazy symbol binding failed: Symbol not found」というエラーが表示されて驚くほどクラッシュしません。
ベース SDK iOS 7 でコンパイルし、iOS 5、6、および 7 で引き続き実行する方法で、条件付きでこの変更を行うにはどうすればよいですか?
注: 古い行はもはやコンパイルされないため、他の問題のように実行時に iOS バージョンをチェックする通常の方法では不十分です。
私は試み、検討してきました:
- チェック
xmlOutputBufferGetContent != NULL
中、常に真 - libxml2 の代わりに libxml2.2 を使用する
- チェック
LIBXML_DOTTED_VERSION
中、常に 2.9.0 LIBXML2_NEW_BUFFER
定義された新しいメソッドのチェック、常に true
これらはすべて、主に SDK に基づいて、コンパイルの前後に常に 1 行だけが選択されるという結果になります。iOS 以外のプロジェクト (グーグル) でこの変更を扱っている他の少数の人々は、常に libxml の 1 つのバージョンを対象としてコンパイルしているようです。