3

iOS 4.3.5アプリがアドホック展開 (HTTP 経由でダウンロード) を介してインストールされているハンドセットで、このエラーが表示されます。

ダイルド エラー メッセージ:

  Symbol not found: _OBJC_CLASS_$_NSJSONSerialization
  Expected in: /System/Library/Frameworks/Foundation.framework/Foundation

iOS 5クラスが存在することが示されていない限り(つまり) 、アプリのコードはライブラリif(NSClassFromString(@"NSJSONSerialization")!=nilを呼び出さないため、問題はiOS 5iOS 4 デバイスでライブラリが呼び出されていることではありません。

アプリ自体には、私自身のコードである静的ライブラリが含まれており、そこにNSJSONSerialization参照が存在します。

iOS 4.3xcode から直接実行した場合 (つまり、USB ケーブルを介して開発マシンに接続された iPhone) 、アプリはデバイス上で完全に動作します。ただし、アドホック展開を介して同じデバイスで実行すると、クラッシュが発生します。

アドホック アーカイブは でビルドさProduct->Archivexcode 4、[配布] ボタンを使用してアドホック展開の .ipa ファイルを作成します。

アプリはほぼ瞬時にクラッシュし、コードがまったく呼び出されていない可能性があり、アーカイブのビルド設定が間違っている可能性があると思いますか?

お時間を割いてご協力いただき、誠にありがとうございました。

4

1 に答える 1

11

これは、この回答で遭遇したのとまったく同じ問題のように思えます。Xcode を介した直接インストールとビルドおよびアーカイブで静的ライブラリを処理する場合の弱いリンクの処理方法には、若干の違いがあります。後者は、クラスレベルおよび関数レベルの弱いリンクを適切に処理しているようです (Xcode 4.3 以降)。ただし、静的ライブラリを含むプロジェクトをアーカイブする場合、その弱いリンクは正しく使用されていません。

私の場合、アドホックまたは App Store 配布用にビルドするときに機能させるために、静的ライブラリを使用してアプリケーション内の問題のある iOS フレームワークを手動で弱いリンクにする必要がありました。これを行うには、プロジェクトのビルド設定に移動し、[ビルド フェーズ] タブに移動して、[ライブラリとバイナリをリンク] グループを展開します。問題のあるフレームワーク (私の場合は CoreVideo.framework でしたが、Foundation.framework ではこれを行う必要があるようです) を見つけて、それを Required から Optional に変更します。

これにより、弱いリンクの問題が解決されるはずです。不足しているビルド設定があるかどうか、またはこれがリンカーのバグであるかどうかを確認するために、これをさらに調査しています。

于 2012-04-23T16:37:03.480 に答える