web-dev-qa-db-ja.com

アーキテクチャーi386の未定義シンボル:_OBJC_CLASS _ $ _ SKPSMTPMessage "、から参照:error

私はバックグラウンドでアプリケーションから電子メールを送信するためのフレームワーク、すなわち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のフィールドをロックする

更新

答え:プロジェクトの上にフォルダをドラッグ&ドロップしてコピーをクリックしてください。プロジェクトチェックボックスとターゲットチェックボックスもオンにします。

232
Mann

あなたのクラスの.mファイルがあなたのターゲットの "Build Phases"タブの "Compile Sources"ステップの下にリストされていないなら、このタイプのエラーを得ることができます。通常Xcodeはあなたのためにこれを行います、しかし時々それはプロットを失い、あなたは手動で.mファイルを追加する必要があります。

これをする:

TargetSettings - > Build Phases - > Compile Sources - >あなたの.mクラスを追加 - > Build and Run

566
Allen Pike

私にとって、この問題はフレームワークが欠けていることがわかりました。私がemを追加すると、うまくいきました。

37
verma

Valid Architectures&Build Active Architecture onlyプロパティを確認してください。

enter image description here

28
Akshay

cocoapodを使用している場合は、ターゲットのビルド設定に他のリンカフラグセクションに$(継承)が含まれていることを確認してください。

enter image description here

17
Tim

あなたのフレームワークはarmv(x)用にコンパイルされていますか?それはi386用にコンパイルされているように私には見えますが、そのコードはiOSデバイス上では動きません。それ以外の場合はarmv(x)用にコンパイルされていて、それをi386コードであるシミュレータ上で実行しようとしています。上記のAkshayのビルド設定を使用して、フレームワークが実行するチップ用に正しくコンパイルされていることを確認してください。

10
Owen Hartnett

Xcodeで他のプロジェクトをインポートし、現在のプロジェクトとインポートするプロジェクトの両方がCompilerソースに同じファイルを持っている場合は、「ビルドフェーズ」設定で現在のプロジェクトの同じファイルを削除するだけです。

7
star18bit

ええ、これはアレンが言ったことに関連しています...ソースファイルのUtilitiesセクションでTargetMembershipを探してください。そのファイルをプロジェクトに関連付けるチェックボックスがあります。これをチェックすることで私にとってもこの問題は解決しました。

4
yeahdixon

これを最後に試してください。

だから私はこのページのすべての提案を試してみました..何もうまくいきませんでした..私の問題が始まった方法はスタティックライブラリをリンクする方法を教える this tutorialのステップに従うことでした。私のサンプルプロジェクトでは、指示はうまくいきました..それから私の実際のプロジェクトで、私は上記のエラーを得始めました。

だから私は言った tutorial の各ステップを経て、それぞれのステップの後に構築された.. 問題のある行は次のようになりました。ビルド設定に-all_loadを追加 - >他のリンカフラグ

カテゴリを静的ライブラリにリンクするときには、このフラグが recommended になっていたことがわかりました。しかしそれから 判明しました このフラグはもう必要ではないことXcode 4.2以降(同じことが-force_loadフラグにも当てはまります。これは他の posts でも推奨されていました)。

4
abbood

私がこれと同じ問題に遭遇したとき:

アーキテクチャi386のための未定義のシンボル:

_OBJC_CLASS _ $ _ SKPSMTPMessage、ConfirmController.oのobjc-class-refから参照

フレームワークを追加するのを忘れただけです。正確にはQuartzCore.frameworkでした。

4
Mitch Viray

また、バイナリライブラリにリンクしていないこと、ターゲットのビルドフェーズで必要なライブラリを追加していることを確認してから、[製品]> [製品のクリーンアップ]> [ビルド]を選択します。

それもうまくいくはずです!

4
Gabriel Ramirez

私はこの問題にも遭遇し、コンパイルソースとライブラリとのリンクバイナリの両方が私が必要とするすべてのファイル/ライブラリ/フレームワークを含んでいるかどうかチェックすることによってそれを修正しました。

enter image description here

4
yujohnnyzhou

同じプロジェクトを2回開いたときにこの問題が発生しました。1つのプロジェクトのみがオリジナルで、もう1つはgitのURLから複製されたものです。

'Product'> 'Clean'が問題を解決しました。

4
kraftydevil

他の人が同じ問題を抱えていてここで終わる場合に備えて私のために働いたものを追加してください。 CLANG_ENABLE_MODULES設定がNoに設定されている古いプロジェクトがありました。時間の経過したフラストレーションのプロジェクトと比較して、LLVMビルド設定の下でEnable Modules Setがnoに設定されていることがわかりました。これをYesに設定すると私の問題は解決し、アプリはうまく構築されます。

「プロジェクト設定」 - >「ビルド設定」 - >「モジュール」を検索し、有効化モジュール(CおよびObjective-C)をYESに更新します。

3
jlichti

私が同じ問題に遭遇したとき、私は「ライブラリのコンパイル済みバージョン(拡張子.a)」を追加するのを忘れました。通常、インポートしたプロジェクトのライブラリをビルドフェーズのターゲット依存に追加しますが、リンクバイナリとビルドフェーズのライブラリに "コンパイル済みライブラリ"を追加することを忘れます。

3
Balamurugan

ビルド設定で他のリンカフラグに "-all_load -lstdc ++"を追加していませんでしたが、エラーなくシムを起動することができましたが、起動時にMonkeyTalkログ出力が表示されず再生ボタンを無効にしました。 MT IDEの出力は「Connection set to iOS Simulator」と表示されていましたが、実行/再生ボタンを選択できませんでした。

元のプロジェクトはその他のリンカフラグに "ObjC -all_load"を持っていましたが、それと "-all_load -lstdc ++"を追加したときにこの投稿に関するエラーメッセージが表示されました。 "ObjC -all_load"を削除してプロジェクトが構築した "-all_load -lstdc ++"のみを追加したが、それでもモンキートークはコンソールに確認としてログアウトしない

2
JJacquet

REALハードウェア専用にコンパイルされたライブラリを使用している可能性があります。たとえば、Zephyr HxM SmartなどのBluetoothライブラリを使用している場合は、おそらくシミュレータ上でコンパイルされず、実際のデバイス上でのみ実行されることを意味します。

2
DiscDev

私はPSTCollectionviewcontrollerを追加したとき私は7エラーで同じ問題を抱えている。 postは将来ユーザーを助けるでしょう。

1
Naveen

Product =>きれいにしてくれました

1
YogevSitton

IOS 6で同様の問題に遭遇しました。ビルドフェーズの節の "ライブラリとバイナリをリンクする"にstorekit.frameworkを追加することで解決できました。

今、それは魅力のように働きます。

1
Troy

すべてのバンドルリソースがビルドフェーズでコピーされていることを確認してください。

1
Arpan Dixit

新しいGoogle Analyticsライブラリにアップグレードしようとしているとき、私はこの非常に誤解を招くメッセージを発見しました。

私の場合、問題はライブラリに2つの矛盾するコピーがあることでした。それらは異なるフォルダにありましたが、どちらも私のアプリのライブラリビルドパス(ビルド設定の下)にリストされていました。

すべての廃止予定のライブラリファイルをフォルダから移動すると、トリックが行われ、不可解なエラーメッセージが表示されなくなりました。

1
bkbeachlabs

私の言うところでは、私は拡張現実プロジェクトにCocoapodsを使用していましたが、cocoapodsを実装してプロジェクトの.workspaceを開くと、Xcode Projectターゲットと同じファイル内に実装したPodsターゲットになります。起こっていたのは、.mのいくつかが両方によって使用されていたということでした。 Build Phases >> Compile SourcesでXcodeターゲット用に重複したものを削除した後、それはうまくいきました。

1
Joao Paulo

アクティブなアーキテクチャの変更は私のために働いた、私のライブラリの1つはi386を使用していた。

Inbuild settings>> changeBuild Active Architecture Onlytoはいからいいえ

それは私のために働いた。他の人にも役立つことを願っています。

enter image description here

1
Satish Mavani

プロジェクトに含まれていないネイティブフレームワークを必要とするサードパーティのライブラリをプロジェクトに追加すると、この種のエラーが発生する可能性があります。

新しく追加したライブラリの.hファイルと.mファイルを調べて必要なフレームワークを確認し、それらのフレームワークをプロジェクトに含める必要があります([ターゲット]> [ビルドフェーズ]> [ライブラリとバイナリをリンク])。

0
Cosmin

私の場合、それは少し違っていました

プレフィックスヘッダーに定義がありませんでした

#ifdef DEBUG
#   define TWDLog(fmt, ...) NSLog((@"\n%s\n" fmt), __PRETTY_FUNCTION__, ##__VA_ARGS__)
#else
#   define TWDLog(...)
#endif

それでPROJECTNAME-Prefix.pchを検索して、両方のプロジェクトで足りないものがないか確認してください

0
Shereef Marzouk

他のプロジェクトからいくつかのソースファイルをドラッグアンドドロップしたときにこのメッセージが表示されました。それらを削除してからファイルメニューの "ファイルの追加..."を使って追加したところ、エラーなくビルドされました。

0
RyeMAC3

NSManagedObjectで同様のエラーが発生しました。他のユーザーが回答したように、Core Dataを使用していたがBuild Phases - Link Binary With LibrariesにCore Dataフレームワークがないためです。

0
Sam

フレームワークを削除し、プロジェクトをクリーンにしてから追加し直してコンパイルしてください。またはxcodeでコンパイルソースに追加されたクラスを削除し、プロジェクトをクリーンアップしてから追加し直してからビルドします。

0
Saif

私は同じ問題を抱えています。そして、私はフェーズ構築に必要な2つのフレームワークを追加します。この助けを願っています! symbol(s) not found for architecture i386

0
777Q

答えは、フォルダをプロジェクト上にドラッグアンドドロップして[コピー]をクリックするだけです。

0
Mann

すでに削除したファイルを呼び出しているビューコントローラにマクロを追加できることを忘れないでください。

アプリはあなたがアプリをビルドするまでエラーを表示しません、それは.oファイルのコンパイル段階でエラーをスローします。

すでに削除したファイルを呼び出しているすべてのMACROを必ず削除してください。

ありがとう:)

0
Abo3atef

欠けているクラスを追加してAllanが行ったことに加えて、@ emdog4の解決法に従い、+をクリックして 'CoreData.framework'を選択してXcodeでBuild Phasesに移動し、Core Dataライブラリを追加しました。 。これは私のエラーを整理しました

0
malkoty

私の場合、ポッドの更新でプロジェクトがどうにかして更新されませんでした。だから私は自分でそれをしなければならなかった、OtherLinkerFlagsにMBProgressHudを追加した。

enter image description here

0
Naloiko Eugene

上記の答えのどれも私の問題を解決しませんでした。 Xcodeを8にアップグレードした後、ターゲット - >ビルドフェーズ - >に移動したときにも同じエラーが発生しました。 Link Binary With Librariesを使用して問題の原因となったフレームワークを削除し、再度追加してください。すべてのエラーが消えました。これが他の人に役立つことを願っています。 enter image description here

0
Aviva