Xcodeプロジェクトを実行しようとすると、シンボルが重複しているというエラーで失敗します。私はオンラインでこれらの重複を見つけましたが、運がありませんでした:
これを修正する方法はありますか?
エラーから、FacebookSDK.frameworkにはすでにBolts.frameworkクラスが含まれているように見えます。追加のBolts.frameworkをプロジェクトから削除してみてください。
私にとっては、「No Common Blocks」コンパイラー設定を「NO」に切り替えるのに役立ちました:これはかなり理にかなっているようです。設定はここで説明されています: GCC_NO_COMMON_BLOCKSの使用目的
Xcode 8を使用して、「プロジェクトを推奨設定に更新」オプションがプロジェクトの「共通ブロックなし」をオンにしました。
オフに戻すと、すべてが修正されました。
私にとっては、誤って.hではなく.mとしてファイルをインポートしたということでした
Xcode 8にアップグレードすると、推奨設定にアップグレードするメッセージが表示されました。私は受け入れ、すべてが更新されました。コンパイル時の問題が発生し始めました:
XXXXのシンボルを複製XXXXのシンボルを複製XXXXのシンボルを複製
合計143エラー。ターゲットに行った->ビルド設定->共通ブロックなし-> NOに設定します。これで問題は解決しました。問題は、統合プロジェクトに共通のコードブロックがあり、それをコンパイルできないことでした。説明があります こちら 。
Xcode 7または8に移行していて、本当に古いプロジェクトを開いている場合、この問題が発生しました。
SomeConstFile.h
NSString * const kAConstant;
SomeConstFile.m
NSString *const kAConstant = @"a constant";
コンパイラの以前のバージョンでは、ヘッダーファイルの定義が外部であると想定していたため、SomeConstFile.hをすべての場所に含めることは問題ありませんでした。
次に、これらのconstを明示的にexternとして宣言する必要があります。
SomeConstFile.h
extern NSString * const kAConstant;
このエラーは、リンカーがobjファイルをリンクしようとしたときに発生します。このエラーについて考えられるいくつかの理由は次のとおりです。
複製された関数/クラスは、プロジェクト内の2つの異なる場所/ファイルで定義され、そのうちの1つだけがビルドコマンドのさまざまなバリエーション用にコンパイルされることになっています。しかし、どういうわけかこれらのファイルは両方ともプロジェクトでコンパイルされました。したがって、コンパイルする必要があるファイルのリストにsrcファイルを追加するif-else条件またはその他の依存関係を確認し、特定のビルドコマンドに不要なファイルを削除する必要があります。
複製された関数/クラスは、プロジェクト内の2つの異なる場所/ファイルで誤って定義されています。間違った定義を削除してください。
再度ビルドする前にOBJディレクトリをクリーンアップします。以前のビルドの古いobjファイルがこの競合を引き起こしている可能性があります。
追伸:私は専門家ではありませんが、これは私が直面したときにこの問題を解決した方法です。 :)
以下のパッチは私のために働く.. :)
Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No
Step 2: Go to TARGETS -> Build Settings -> enable testability -> No
NOに戻すと問題は解決しました!
別の解決策は次のとおりです。
プロジェクト-> ターゲット-> ビルド段階-> ソースのコンパイル->言及されているファイルを検索3番目の最後のエラー行(あなたの場合BFAppLinkReturnToRefererView.o)。
その後、検索結果に1つまたは2つのファイルが表示されます。
削除それらの1つと再コンパイル。残りのファイルは1つだけで、ビルドの競合はもうないので、今すぐ再コンパイルする必要があります。
それでもうまくいかない場合は、ファイルにエラーが含まれている可能性があるため、すべて削除してから再コンパイルする必要があります。再び動作するはずです。
私の場合、理由はあまりにも愚かでした:
マクロを定義したConstant.hファイルがありました。そこでNSStringを実行することを考えました。そしてこれをやった:
NSString const *kGreenColor = @"#00C34E";
これにより、アーキテクチャの重複シンボルの問題が発生しましたarm64およびリンカーコマンドが終了コード1で失敗しました。const NSString行の削除が機能しました。
私にとって、この問題はconstの作成スタイルであり、このiOS8まではうまく機能しました。
int const kView_LayoutCount = 3;
私の.hファイルに。共通ブロックがNOに設定されると、6行のような6行のリンカーファイルが生成されました。 (YESの場合は14k +)。値宣言の.hを取り除いた後、行を.mに移動しました。コンパイルは問題ありませんでした。
これが他の人に役立つことを願っています!
FBなどのSDKやVuforiaやGoogleAnalyticsなどのライブラリを使用する場合、サンプルプロジェクトを追加すると、フレームワークなどが既に含まれているという問題が発生することがあるため、既に追加しているシンボルを手動で追加しないでくださいサンプルに含まれる
この問題を解決するには、ビルドフェーズに進み、(facebook SDK、ユニティ広告)などの重複ファイルを検索し、削除(拡張子file.o)してから再度ビルドします。
エラーから、クラスが複数回表示されるように見えます。動作するクラスを見つけて削除します。
AppDelegate.hおよび.mファイルを複数回作成しています。そのため、このエラーが発生します。最後に、正常に機能しているクラスを見つけて削除しました。
私にとっての問題は、フレームワークを手動で含めたが、CocoaPodsに同じフレームワークを含めたことを知らないことでした。どちらかを削除すると、問題はなくなりました
私にとっては、ViewController_AでsampleMethod
というメソッドを作成し、ViewController_Bでも同じメソッドを作成しました。このエラーが発生したため、ViewController_Bのメソッド名をsecondSampleMethod
に変更しました。エラーを修正しました。
コードを削減し、多くの場所で同じコードを複製しない優れた機能のようです。
No CommonブロックをYesからNoに変更してから、テスト容易性をYesからNoに変更しようとしました。うまくいきませんでした。ビルド段階でも重複ファイルをチェックしましたが、重複ファイルはありません。
インクルードファイルを確認してください。誤って「filename.h」の代わりに「filename.m」を#importし、自動修正(タブ)で「h」ではなく「m」を挿入したため、この問題が発生しました。
この問題は、メソッドの外部で.mの変数を遅延定義し、別の.mファイルでメソッドの外部で同じ名前の別の変数を定義していたために発生しました。これにより、グローバル変数名の重複問題が発生していました。