はじめに
BLE通信対応の機器との接続処理を追加する為に、
提供されたFrameworksを追加したら「1 duplicate symbol for architecture arm64」エラーが発生した。
ググってみた
「duplicate symbol for architecture」にヒットするサイトがいくつか出てきたが、
何となく違う感じがしたので自分で考える事に…
エラー内容をよく見てみる
エラー内容
duplicate symbol 'Framneworks名' in:
/XXXXXX/○○ViewController.o
/XXXXXX/□□ViewController.o
ld: 1 duplicate symbol for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
今回BLE機器と通信する為に手を入れたViewControllerで重複が発生しているので心当たりが…
エラー原因たぶんこれ
それぞれのViewControllerで追加したFrameworksの定義や初期化をしてるのが多分ダメ
対応方法
△△AppDelegateクラスにFrameworksの定義と初期化処理を移動して1つにまとめて、
それぞれのViewControllerで使えるようにしたら、
エラーも無く無事動作しました。
まとめ
今回は片方のViewControllerにはじめ追加して接続や値の取得などの事前調査をしてからもう片方に処理を追加したが、その時にそのまま追加したのがそもそもの間違いだった。
ちゃんと設計してレビューする環境ならこんなことは発生しないと思われるが、
これ追加しとけって丸投げされるだけで設計もレビューもやらないからダメダメなんだな…