2009/11/05

iPhone JSON Framework使用時に実機でのコンパイルエラーの対処

iPhoneでJSON Frameworkを使って開発しているとき。シュミレータではエラーが出なかったのが、実機でのデバッグではコンパイルエラーになる場合の対処法。
Xcode3.1.4 + iPhone SDK 3.1.2 + iPhone 3G(OS 3.1.2[7D11]) + JSON Framework (2.2.2)で遭遇しました。
エラーメッセージ
Codesign error: 〜“object file format invalid or unsuitable”
Codesignのエラーということ、ググるとこれはJSON Frameworkが悪さしているということが分かった。

コンパイルエラーの対処方法
プロジェクト > プロジェクト設置の編集 > ビルド > コード署名リソース・ルールパス を編集
デフォルトでは空欄なので以下を追加
$(SDKROOT)/ResourceRules.plist

これでコンパイルは通るようになります。しかし実機での実行時に[NSObject JSONValue]メソッドが呼び出せないエラーが起こり例外エラーになってしまいます。この対処法がわからない。

JSON Frameworkの導入はここを参考に
http://www.syuhari.jp/blog/archives/1146


コンパイルエラーの対処法はここを参考にしました。
http://iphone.galloway.me.uk/2009/04/json-framework-codesign-object-file-format-invalid-or-unsuitable/

解決
JSON Frameworkを使うときに[NSSring JSONValue]が呼べない問題は
//ここでJSONValueを使うのはだめ,実機で落ちる
//NSDictionary* jsonItem = [jsonStr JSONValue];

//こっちを使う エラーはセットしておく方が大人の対応。
NSError *error;
SBJSON *json = [[SBJSON new] autorelease];
NSDictionary *jsonItem = [json objectWithString:jsonStr error:&error];
if (!jsonItem) {
 NSLog(@"%@", error);
}

JSON Framework - Google Codeのフォーラムで議論されてました。
http://code.google.com/p/json-framework/issues/detail?id=22