Undefined symbols: “_objc_msgSendSuper2” に遭遇したら

iOSアプリ開発中、静的ライブラリのリンク・アンリンクを繰り返していたところ、

Undefined symbols:
"_objc_msgSendSuper2" , referenced from:...

というエラーで、アプリをビルドできなくなる現象に遭遇しました。
このエラーは、libobjc.dylibが見つからず、Objective-Cの内部関数が見つからないことで起きているということまではすぐわかったのですが、
なぜlibobjc.dylibが急に見つからなくなったのか気づくまで少し時間がかかりました。

どうやら、静的ライブラリのリンク・アンリンクを繰り返していると、
希に、Library Search Pathsから、SDK標準のフレームワークフォルダ
「$(SDKROOT)/Developer/Library/Frameworks」
が除外されてしまうことがあるようです。(Xcode 4.0.2のバグ?)

Target設定のBuild Settings設定のLibrary Search Pathsに、
「$(SDKROOT)/Developer/Library/Frameworks」
を再度追加してやることで、エラーは出なくなりました。

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

週刊Railsウォッチ

インフラ

Rubyスタイルガイドを読む

BigBinary記事より

ActiveSupport探訪シリーズ