Xcode3.2.4のユニットテスト失敗に対処する

iOS4.1に対応したXcode3.2.4にバージョンアップしたのは良いものの、Xcode内蔵のユニットテスト(Logic Tests)が失敗するようになってしまった。正確に言うとテスト自体は成功するのだけど、エラーメッセージが出るようになってしまい嬉しい気分ではない。以前のバージョンのXcodeでは問題なかったのに、バージョンアップに伴い何かの問題が顕在化したのだろうか?

An internal error occurred when handling command output: -[XCBuildLogCommandInvocationSection setTestsPassedString:]: unrecognized selector sent to instance 0x202318200
An internal error occurred when handling command output: -[XCBuildLogCommandInvocationSectionRecorder endMarker]: unrecognized selector sent to instance 0x2015aa460

念のため、新規プロジェクトを作って再度ユニットテスト(Logit Tests)を作って実行してみた。手順はこちら。

その結果、やっぱり同じエラーが発生する。と言うことはXcode側に問題がありそうだ。

対応方法はAppleのDeveloper Forumsに載っていた。iPhone Development -> Developer Toolsに"Problem doing logic tests after XCode 3.2.4 upgrade"として、原因と回避策が出ている。一言で言えば、日付フォーマットのミスマッチが原因らしい。添付されているファイルをプロジェクトに追加したところ、エラーが発生することなくテストが無事に成功するようになった。

但し、同フォーラムのコメントで指摘されているように、下記の条件判断は#importの後に移動させる必要がある。

#if TARGET_OS_IPHONE && (__IPHONE_OS_VERSION_MAX_ALLOWED == __IPHONE_4_1)

テストの本質的な部分には影響しない問題だし、次バージョンのXcodeでは直ると思うけど、同様の症状で困っている方はお試しあれ。



2010/9/20追記
ソースコードがgithhubに登録されていました。