2013年5月24日金曜日

dyld: Symbol not found: _OBJC_CLASS_$_NSJSONSerializationでハマった

どうも、俺@帰宅です。

iOSアプリ開発しててハマったのでφ(..)メモメモ

iOSv5.0以上だと問題なく動作するのに、
iOS4.3端末だとビルドは通りますが実行するとタイトルにもある
dyld: Symbol not found: _OBJC_CLASS_$_NSJSONSerialization
Expected in: /System/Library/Frameworks/Foundation.framework/Foundation
のエラーが出ちゃいました。

あ、先に解決方法から書いちゃいますが、
僕の場合はFacebook-SDKのv3.5.1を使っていた為、iOS4.xサポート外だったというオチです。。
チェンジログをちゃんと読め、ということですね。
なのでここから、iOSv4をサポートしているFacebook-SDKのv3.2.1を落としてきて対応しました。

で、本題の
dyld: Symbol not found: _OBJC_CLASS_$_NSJSONSerialization
ですが、これはそのまま
「NSJSONSerializationが見つからねぇよ!」というエラーです。
なぜiOSv4.3端末で見つからねぇかと言うと、NSJSONSerializatoinクラスはiOSv5以上で利用可能だからです。
参考:Apple開発者サイト

でも、deployment targetを4.3に指定してるとどうしてもiOSv4.3で動作させなければいけません。

もう一つ手がかりとなるのが、Xcode上に表示される
dyld`dyld_fatal_error:
0x2fe01080: trap 
0x2fe01084: mov r0, r0
のようなエラーです。
これはiOSv5.0以上に対応しているが、
それ未満には対応していないframeworkを呼び出したりしている場合に出やすいエラーです。
まさに今回の現象にズバリマッチしています。

そういう場合は読み込んだframeworkを "Optional" にするなどして対応出来るのですが、
今回の僕の場合はどのframeworkもOptionalに出来ませんでした。
で、組み込んだframeworkやSDKを1つずつチェックしてて、
Facebook-SDKのChangelogに気付いたという事でした。

もしFacebook-SDK(iOS)を利用してて同様のエラーに遭遇した人は確認してみてください。


以上でぇぇぇぇえす。

0 件のコメント: