TweetなうのソースコードがSDK4.0でビルド出来ない問題に対処しました
GitHubに公開しているTweetなうのソースコードがSDK4.0でビルド出来なくなっていましたので対処しました。
Xcode3.2.3でベースSDKを4.0にしてビルドすると以下のようなエラーが発生します。
Undefined symbols: "_OBJC_CLASS_$_OAConsumer", referenced from: objc-class-ref-to-OAConsumer in XAuthTwitterEngine.o "_OBJC_CLASS_$_OARequestParameter", referenced from: objc-class-ref-to-OARequestParameter in ExchangeCredentialsOperation.o "_OBJC_CLASS_$_OAToken", referenced from: objc-class-ref-to-OAToken in XAuthTwitterEngine.o "_OBJC_CLASS_$_OAMutableURLRequest", referenced from: objc-class-ref-to-OAMutableURLRequest in ExchangeCredentialsOperation.o objc-class-ref-to-OAMutableURLRequest in XAuthTwitterEngine.o "_OBJC_CLASS_$_OADataFetcher", referenced from: objc-class-ref-to-OADataFetcher in ExchangeCredentialsOperation.o
XAuthTwitterEngineが使っているMGTwitterEngine のバージョンを上げたところ解決できました。調べてみるとMGTwitterEngineで変わったところは MGTwitterXMLParser.h と libOAuth.a のみでした。たぶん libOAuth.a に問題があるのだと思います。
そこで、 libOAuth.a の未定義になっているシンボルを nm で調べてみると
古いもの
00000000 A .objc_class_name_OAConsumer U _OBJC_CLASS_$_NSObject 000015f8 D _OBJC_CLASS_$_OAConsumer 000015f0 D _OBJC_IVAR_$_OAConsumer.key 000015f4 D _OBJC_IVAR_$_OAConsumer.secret U _OBJC_METACLASS_$_NSObject
最新のもの
00000000 A .objc_class_name_OAConsumer U _OBJC_CLASS_$_NSObject 00001364 S _OBJC_CLASS_$_OAConsumer 00001464 S _OBJC_IVAR_$_OAConsumer.key 00001460 S _OBJC_IVAR_$_OAConsumer.secret U _OBJC_METACLASS_$_NSObject
未定義に成ってしまったシンボルのClassが D(データセクション) から S(bbs) に変わっています。bbsは初期化してない(プログラム起動時に0に初期化される)広域変数の入るセクションですので、データセクションみたいなものだと思うのですが、なぜ未定義になってしまうのでしょうか?