iPhoneアプリケーションをビルドすると、次のエラーが発生します。
ld:警告:/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit、ファイルに必要なアーキテクチャi386がありません
私のアプリのすべてのフレームワークで同じです。これは以前に起こっていなかったので、それは非常に奇妙です。
iPhoneアプリケーションをビルドすると、次のエラーが発生します。
ld:警告:/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit、ファイルに必要なアーキテクチャi386がありません
私のアプリのすべてのフレームワークで同じです。これは以前に起こっていなかったので、それは非常に奇妙です。
回答:
これは、プロジェクトにフレームワークを追加し、そのフレームワークを誤ってプロジェクトディレクトリにコピーした場合に発生します。
修正方法は、プロジェクトディレクトリ(プロジェクトをディスクに保存する場所)でiphone SDK * .Frameworkファイルを確認し、それらを削除することです。
その後、プロジェクトは正常にビルドされます。
私にも同じ問題があり、解決策は簡単な修正であることがわかりました。バックアップしてから、projectMateまたはTextEditでproject.pbxproj(プロジェクトファイルバンドル内にあります)を開き、「/ * Begin XCBuildConfiguration section * /」というタイトルのセクションを検索します。FRAMEWORK_SEARCH_PATHSという名前のキーを探し、それとその内容を削除します(ビルド構成ごとに1回なので、2か所で削除しました)。これが私が削除したものの例です:
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",);
私のプロジェクトは、iPhoneデバイスとiPhoneSimulatorの両方でビルドできるようになりました。
ここで起こったことは、Xcodeが不思議なことに、特定のiPhoneデバイスSDKを指す「フレームワーク検索パス」エントリを追加したことです。たとえば、私は最近次のように設定されました:
$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks
これにより、コンパイラは誤ったアーキテクチャのフレームワークを見つけます。ターゲットのビルド設定の「フレームワーク検索パス」キーの下の値を削除すると、問題が解決します。
「プロジェクト設定の編集」に移動して「検索パス」を見つけた場合、XCodeでそれを言及したいと思います。「フレームワーク検索パス」のフィールドがあります。これを更新すると、プロジェクトファイルをハックする必要なく、問題が解決されます。
乾杯!
ジェシー
何かが削除される可能性はありますが、プロジェクトファイルで何かが台無しにされるのは私の経験です。その「何か」が何であるかを私はまだ突き止めていません。SDKのインストールに問題がなければ、同様の問題が発生しました。いくつかのオプションがあります。
まず、すべてのファイルを新しいプロジェクトに追加します。これは通常は機能するようです。でもちょっと苦痛。
次に、XCode / Get Info / Build / Library Search Pathsでプロジェクトを右クリックします。/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/libのような新しいパスを追加します。各文字列の適切なバージョン(2.2.1など)とプラットフォーム(シミュレーターまたはiPhoneOS)を追加します。フレームワークに問題がある場合は、フレームワーク検索パスに対して同様のアクションを実行します。
3つ目は、より手間がかかりますが信頼性が高く、MyProject.xcodeproj内からproject.pbxprojを開くことです(これにはTextmateが適しています)。「/ * Begin XCBuildConfiguration section * /」、「LIBRARY_SEARCH_PATHS」、「FRAMEWORK_SEARCH_PATHS」を探します。必要に応じてパスを追加または変更し、ファイルを保存します。
いずれにせよ、お尻の痛み、私はこれが数回起こったことがあるので、原因を正確に指摘したいと思います。プロジェクトは正常にビルドされ、その後、正常に動作し、ほとんど理由がないように見えるため、そうすることを拒否します。
ターミナルからフレームワークでfileコマンドを実行します。
file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit
UIKitバイナリがどのアーキテクチャと互換性があるかを知らせるメッセージが返されるはずです。「i386」がリストに表示されない場合は、なんとかしてi386バージョンのUIKitを削除できています。これは、シミュレーター用にビルドできないことを意味します。これを修正するには、再インストールする必要がありますSDK。
他のエラーが発生した場合、うまくいけば、実際の問題が何であるかを理解するのに役立ちます。
私は自分のライブラリ(WM_GSRecognizerLib)で作業しているため、少し違うことを経験しましたが、エラーは同じです。
何が起こったのか:一部の更新により、libをターゲットとするパス(.a)は、「Debug-iphoneos」フォルダー(生成された場所)からのものでした。Generic iOSデバイス向けのコンパイルはうまくいきましたが、シミュレーターではうまくいきませんでした。
この問題に対して私がしたことは、「Debug-iphonesimulator」フォルダからのバイナリも含めることです。
説明がここにあるため、このトピックに役立ちます。デバイスにはarm64 / armv7 / armv7sのバイナリが必要ですが、シミュレータにはi386が必要です。
私の解決策は、シミュレータのターゲットデバッグを設定することでした。はい。gitstatusを見て、.projectにのみアーキテクチャとして追加された新しい行を確認してください。これを設定しない場合、ビルドはすべてのアーキテクチャで実行され、i386などの不足しているアーキテクチャが表示されます。明らかに主要な問題は、特定の種類の特定のアーキテクチャを実装するフレームワークを使用することです。