私はバックグラウンドでアプリケーションから電子メールを送信するためのフレームワーク、すなわちSKPSMTPMessage
フレームワークをインポートしました。以下のエラーが表示される理由を誰かが提案できますか
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_SKPSMTPMessage", referenced from:
objc-class-ref in ConfirmController.o
"_kSKPSMTPPartContentTransferEncodingKey", referenced from:
-[ConfirmController sendEmail] in ConfirmController.o
"_kSKPSMTPPartMessageKey", referenced from:
-[ConfirmController sendEmail] in ConfirmController.o
"_kSKPSMTPPartContentTypeKey", referenced from:
-[ConfirmController sendEmail] in ConfirmController.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
どのフレームワークが採用されているのか:
MFMailComposeViewControllerのフィールドをロックする
更新:
答え:プロジェクトの上にフォルダをドラッグ&ドロップしてコピーをクリックしてください。プロジェクトチェックボックスとターゲットチェックボックスもオンにします。
あなたのクラスの.mファイルがあなたのターゲットの "Build Phases"タブの "Compile Sources"ステップの下にリストされていないなら、このタイプのエラーを得ることができます。通常Xcodeはあなたのためにこれを行います、しかし時々それはプロットを失い、あなたは手動で.mファイルを追加する必要があります。
これをする:
TargetSettings - > Build Phases - > Compile Sources - >あなたの.mクラスを追加 - > Build and Run
私にとって、この問題はフレームワークが欠けていることがわかりました。私がemを追加すると、うまくいきました。
Valid Architectures&Build Active Architecture onlyプロパティを確認してください。
あなたのフレームワークはarmv(x)用にコンパイルされていますか?それはi386用にコンパイルされているように私には見えますが、そのコードはiOSデバイス上では動きません。それ以外の場合はarmv(x)用にコンパイルされていて、それをi386コードであるシミュレータ上で実行しようとしています。上記のAkshayのビルド設定を使用して、フレームワークが実行するチップ用に正しくコンパイルされていることを確認してください。
Xcodeで他のプロジェクトをインポートし、現在のプロジェクトとインポートするプロジェクトの両方がCompilerソースに同じファイルを持っている場合は、「ビルドフェーズ」設定で現在のプロジェクトの同じファイルを削除するだけです。
ええ、これはアレンが言ったことに関連しています...ソースファイルのUtilitiesセクションでTargetMembershipを探してください。そのファイルをプロジェクトに関連付けるチェックボックスがあります。これをチェックすることで私にとってもこの問題は解決しました。
これを最後に試してください。
だから私はこのページのすべての提案を試してみました..何もうまくいきませんでした..私の問題が始まった方法はスタティックライブラリをリンクする方法を教える this tutorialのステップに従うことでした。私のサンプルプロジェクトでは、指示はうまくいきました..それから私の実際のプロジェクトで、私は上記のエラーを得始めました。
だから私は言った tutorial の各ステップを経て、それぞれのステップの後に構築された.. 問題のある行は次のようになりました。ビルド設定に-all_loadを追加 - >他のリンカフラグ
カテゴリを静的ライブラリにリンクするときには、このフラグが recommended になっていたことがわかりました。しかしそれから 判明しました このフラグはもう必要ではないことXcode 4.2以降(同じことが-force_loadフラグにも当てはまります。これは他の posts でも推奨されていました)。
私がこれと同じ問題に遭遇したとき:
アーキテクチャi386のための未定義のシンボル:
_OBJC_CLASS _ $ _ SKPSMTPMessage、ConfirmController.oのobjc-class-refから参照
フレームワークを追加するのを忘れただけです。正確にはQuartzCore.frameworkでした。
また、バイナリライブラリにリンクしていないこと、ターゲットのビルドフェーズで必要なライブラリを追加していることを確認してから、[製品]> [製品のクリーンアップ]> [ビルド]を選択します。
それもうまくいくはずです!
私はこの問題にも遭遇し、コンパイルソースとライブラリとのリンクバイナリの両方が私が必要とするすべてのファイル/ライブラリ/フレームワークを含んでいるかどうかチェックすることによってそれを修正しました。
同じプロジェクトを2回開いたときにこの問題が発生しました。1つのプロジェクトのみがオリジナルで、もう1つはgitのURLから複製されたものです。
'Product'> 'Clean'が問題を解決しました。
他の人が同じ問題を抱えていてここで終わる場合に備えて私のために働いたものを追加してください。 CLANG_ENABLE_MODULES設定がNoに設定されている古いプロジェクトがありました。時間の経過したフラストレーションのプロジェクトと比較して、LLVMビルド設定の下でEnable Modules Setがnoに設定されていることがわかりました。これをYesに設定すると私の問題は解決し、アプリはうまく構築されます。
「プロジェクト設定」 - >「ビルド設定」 - >「モジュール」を検索し、有効化モジュール(CおよびObjective-C)をYESに更新します。
私が同じ問題に遭遇したとき、私は「ライブラリのコンパイル済みバージョン(拡張子.a)」を追加するのを忘れました。通常、インポートしたプロジェクトのライブラリをビルドフェーズのターゲット依存に追加しますが、リンクバイナリとビルドフェーズのライブラリに "コンパイル済みライブラリ"を追加することを忘れます。
ビルド設定で他のリンカフラグに "-all_load -lstdc ++"を追加していませんでしたが、エラーなくシムを起動することができましたが、起動時にMonkeyTalkログ出力が表示されず再生ボタンを無効にしました。 MT IDEの出力は「Connection set to iOS Simulator」と表示されていましたが、実行/再生ボタンを選択できませんでした。
元のプロジェクトはその他のリンカフラグに "ObjC -all_load"を持っていましたが、それと "-all_load -lstdc ++"を追加したときにこの投稿に関するエラーメッセージが表示されました。 "ObjC -all_load"を削除してプロジェクトが構築した "-all_load -lstdc ++"のみを追加したが、それでもモンキートークはコンソールに確認としてログアウトしない
REALハードウェア専用にコンパイルされたライブラリを使用している可能性があります。たとえば、Zephyr HxM SmartなどのBluetoothライブラリを使用している場合は、おそらくシミュレータ上でコンパイルされず、実際のデバイス上でのみ実行されることを意味します。
私はPSTCollectionviewcontrollerを追加したとき私は7エラーで同じ問題を抱えている。 postは将来ユーザーを助けるでしょう。
Product =>きれいにしてくれました
IOS 6で同様の問題に遭遇しました。ビルドフェーズの節の "ライブラリとバイナリをリンクする"にstorekit.frameworkを追加することで解決できました。
今、それは魅力のように働きます。
すべてのバンドルリソースがビルドフェーズでコピーされていることを確認してください。
新しいGoogle Analyticsライブラリにアップグレードしようとしているとき、私はこの非常に誤解を招くメッセージを発見しました。
私の場合、問題はライブラリに2つの矛盾するコピーがあることでした。それらは異なるフォルダにありましたが、どちらも私のアプリのライブラリビルドパス(ビルド設定の下)にリストされていました。
すべての廃止予定のライブラリファイルをフォルダから移動すると、トリックが行われ、不可解なエラーメッセージが表示されなくなりました。
私の言うところでは、私は拡張現実プロジェクトにCocoapodsを使用していましたが、cocoapodsを実装してプロジェクトの.workspaceを開くと、Xcode Projectターゲットと同じファイル内に実装したPodsターゲットになります。起こっていたのは、.mのいくつかが両方によって使用されていたということでした。 Build Phases >> Compile SourcesでXcodeターゲット用に重複したものを削除した後、それはうまくいきました。
プロジェクトに含まれていないネイティブフレームワークを必要とするサードパーティのライブラリをプロジェクトに追加すると、この種のエラーが発生する可能性があります。
新しく追加したライブラリの.hファイルと.mファイルを調べて必要なフレームワークを確認し、それらのフレームワークをプロジェクトに含める必要があります([ターゲット]> [ビルドフェーズ]> [ライブラリとバイナリをリンク])。
私の場合、それは少し違っていました
プレフィックスヘッダーに定義がありませんでした
#ifdef DEBUG
# define TWDLog(fmt, ...) NSLog((@"\n%s\n" fmt), __PRETTY_FUNCTION__, ##__VA_ARGS__)
#else
# define TWDLog(...)
#endif
それでPROJECTNAME-Prefix.pch
を検索して、両方のプロジェクトで足りないものがないか確認してください
他のプロジェクトからいくつかのソースファイルをドラッグアンドドロップしたときにこのメッセージが表示されました。それらを削除してからファイルメニューの "ファイルの追加..."を使って追加したところ、エラーなくビルドされました。
NSManagedObjectで同様のエラーが発生しました。他のユーザーが回答したように、Core Dataを使用していたがBuild Phases - Link Binary With LibrariesにCore Dataフレームワークがないためです。
フレームワークを削除し、プロジェクトをクリーンにしてから追加し直してコンパイルしてください。またはxcodeでコンパイルソースに追加されたクラスを削除し、プロジェクトをクリーンアップしてから追加し直してからビルドします。
私は同じ問題を抱えています。そして、私はフェーズ構築に必要な2つのフレームワークを追加します。この助けを願っています!
答えは、フォルダをプロジェクト上にドラッグアンドドロップして[コピー]をクリックするだけです。
すでに削除したファイルを呼び出しているビューコントローラにマクロを追加できることを忘れないでください。
アプリはあなたがアプリをビルドするまでエラーを表示しません、それは.oファイルのコンパイル段階でエラーをスローします。
すでに削除したファイルを呼び出しているすべてのMACROを必ず削除してください。
ありがとう:)
欠けているクラスを追加してAllanが行ったことに加えて、@ emdog4の解決法に従い、+をクリックして 'CoreData.framework'を選択してXcodeでBuild Phasesに移動し、Core Dataライブラリを追加しました。 。これは私のエラーを整理しました
私の場合、ポッドの更新でプロジェクトがどうにかして更新されませんでした。だから私は自分でそれをしなければならなかった、OtherLinkerFlagsにMBProgressHudを追加した。