2012-09-24 10 views
36

ユニットテストをコマンドラインで実行しているときにXcode 4.5にアップデートしてから問題が発生しました。 以下は、私は私のテストXcode 4.5コマンドラインユニットテスト

Unknown Device Type. Using UIUserInterfaceIdiomPad based on screen size 
Terminating since there is no workspace. 
/Applications/Xcode.app/Contents/Developer/Tools/RunPlatformUnitTests.include:334: note: Passed tests for architecture 'i386' (GC OFF) 

/Applications/Xcode.app/Contents/Developer/Tools/RunPlatformUnitTests.include:345: note: Completed tests for architectures 'i386' 

を実行しようとすると、私は見ている出力され、それがテストに合格し、完了したと言うんが、私は、彼らが実際に実行されていているとは思いません。私がテストを実行するには、次のコマンドを使用してい

xcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -sdk iphonesimulator -configurationデバッグクリーンビルドTEST_AFTER_BUILD = YES

は誰もが同じ問題に遭遇したため、提供できる 解決策?

+0

私は同じ問題を抱えています。他の人も同様です:https://github.com/gabriel/gh-unit/issues/96。今のところ解決策はありません。 –

+1

私は同じ問題を確認することができます。それは最初のベータ版以来存在しているが、Appleがサポートしていない「サポートされていない機能」なので、私の解決策は、WaxSimを使用して起動した別のOCUnit/SenTestテストランナーを作成することです。これは部分的に書かれていますが、これまでに働いていて、完了したら共有します – Stew

+0

同じ問題。私が見つけた最高の(これはまだ働いていない) - http://www.gerardcondon.com/blog/2012/09/20/further-jenkins-setup-code-signing/ –

答えて

29

はちょうど私はまた、私は、この問題の解決のために何をしたかを共有すべきであると思いました。私はhttps://stackoverflow.com/a/10823483/666943で概説された解決策に従ったが、ルビースクリプトをシェルに変換した。終わりに、私は基本的に自作経由ios-simをインストールして、次のと私のテスト対象のBuild PhasesRun Scriptを置き換える:

if [ "$RUN_UNIT_TEST_WITH_IOS_SIM" = "YES" ]; then 
    test_bundle_path="$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION" 
    ios-sim launch "$(dirname "$TEST_HOST")" --setenv DYLD_INSERT_LIBRARIES=/../../Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection --setenv XCInjectBundle="$test_bundle_path" --setenv XCInjectBundleInto="$TEST_HOST" --args -SenTest All "$test_bundle_path" 
    echo "Finished running tests with ios-sim" 
else 
    "${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests" 
fi 

は今、私はRUN_UNIT_TEST_WITH_IOS_SIM=YES例えば引数に渡すテストを開始するには

xcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -sdk iphonesimulator -configuration Debug clean build RUN_UNIT_TEST_WITH_IOS_SIM=YES 
+3

私はいつも次のエラーを受け取ります: '[デバッグ]セッションを開始できませんでした:エラードメイン= DTiPhoneSimulatorErrorDomainコード= 2"シミュレータセッションがタイムアウトしました。 UserInfo = 0x7fd323c2a4a0 {NSLocalizedDescription =シミュレータセッションがタイムアウトしました。} ' – fabb

+0

もし私があなたの他の質問がそれに関連していたのを見ると、これはジェンキンのためのものです。ビルドサーバーにJenkinsをインストールするときに、/ Library/LaunchDaemonsにlaunchd plistが作成されました。 ios-simを起動しようとすると、記述したのと同じエラーが発生しました.Jenkinsはログインしたユーザーとして実行されていないようです。 launchd plistを/ Library/LaunchAgentsに移動することで、ログインしたユーザーとして実行されるようになり、これで問題は解決しました。 –

+1

Nono、今私はJenkinsなしでこれを試しました。私はTest Schemeを実行してXcodeから実行しました(私はコマンドラインから試してみます、おそらくエラーの原因です)。そして、私は別のJenkins ServerとBuild Nodeを持っています。ほとんどの場合、ビルドノードの 'jenkins'ユーザはログインしていません。サーバはSSH経由で接続します。これは、このハックを使ってXcode 4.4.1で正常に動作していました。http://www.raingrove.com/2012/03/28/running-ocunit-and-specta-tests-from-command-line.html – fabb

9

私はこの問題をXcode 4.5/iOS 6のベータ版で確認しました。この問題を回避するためにスタンドアロンユニットテストランナーに取り組んでいます。ユニットテストバンドルをコンパイルしてから、シミュレータ環境でユニットテストを自動的に実行するアプリケーションのバージョンをコンパイルすることで動作します。

ツールは決して完全ではありませんが、十分な人がこの問題を抱えているように見えますが、今のところツールをリリースしています。私はツールを改善できるように、フォークまたはコメントしてください。

xcodetest:https://github.com/sgleadow/xcodetest

また、バージョン5.1にiphonesimulatorを設定http://openradar.appspot.com/12306879

+0

私は、Stewの答えが単体テストの実行に役立ったことを確認できます。 – Jessedc

+0

それは動作します!しかし、スクリプト内の2つの 'xcodebuild'オカレンスに' -arch i386'を追加しなければなりませんでした。 – fabb

+0

同じスキーム内のライブラリサブプロジェクトから他のテストを実行していないのは何ですか? – fabb

6

問題にこのレーダーに目を離さない問題を解決しているようです。この問題にはレーダーバグがあります。

また、この記事では、従うための良い解決策に言及:

http://baolei.tumblr.com/post/32428168156/ios-unit-test-from-command-line-ios6-xcode4-5

+1

答えに基づいて提供されたリンクに似た解決策が終了しました。http://stackoverflow.com/a/10823483/666943 –

+0

ここで説明したように 'RunPlatformUnitTests'にパッチを当てる必要があると思いますか? http://www.raingrove.com/2012/03/28/running-ocunit-and-specta-tests-from-command-line.html – fabb

+0

うまくいけば、RunPlatformUnitTestsにパッチを当てることも必要です。私はここにサンプルを持っています:https://github.com/victorlima/AutoBuild/blob/master/scripts/RunPlatformUnitTests.patched。それが動作するかどうか私に教えてください。 –

2

また、iOS6でコマンドラインテストを実行するのに役立つハックはほとんどありません。0シミュレータSDK

私は杉を使用していますし、この微調整は、私を助け:

はまず、あなたがあなたのメインファイル少し更新する必要があります。

// Faking up that workspace port 
    CFMessagePortCreateLocal(NULL, (CFStringRef) @"PurpleWorkspacePort", NULL, NULL,NULL); 
    return UIApplicationMain(argc, argv, nil, @"CedarApplicationDelegate"); 

第二に、あなたは、カテゴリを追加する必要がありますUIWindowに:

@implementation UIWindow (Private) 
- (void)_createContext { 
    // Doing nothing here. Just for crash avoidance 
} 
@end 

シーダーunittestのいくつかのランタイムと、正常に動作します警告は表示されますが、少なくとも実行できるようになります:)

関連する問題