Xcode 4.5命令行unit testing

在通过命令行运行我的unit testing时更新到Xcode 4.5时遇到问题。 以下是当我尝试运行testing时看到的输出

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' 

即使它说testing已经通过并完成了,我不认为它们已经被运行了。

我正在使用以下命令来运行testingxcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -sdk iphonesimulator -configurationdebugging干净构buildTEST_AFTER_BUILD = YES

有没有人遇到同样的问题,可以提供解决scheme?

只是觉得我也应该分享我为解决这个问题所做的。 我遵循https://stackoverflow.com/a/10823483/666943中概述的解决scheme,但将ruby脚本转换为shell。; 最后,我基本上通过自制软件安装了ios-sim ,并用我的testing目标的Build Phasesreplace了下面的Run 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 

现在开始testing,我传递参数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 

我在Xcode 4.5 / iOS 6的testing版中注意到了这个问题。我一直在研究一个独立的unit testing运行器来解决这个问题。 它通过编译你的unit testing包,然后编译你的应用程序的一个版本,在模拟器环境中自动运行unit testing。

这个工具并不完整,但是现在似乎有足够多的人正在解决这个问题。 请叉或评论,所以我可以改进工具。

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

同时关注这个问题http://openradar.appspot.com/12306879上的雷达;

xcodebuild -project ${PROJECT_PATH}/${PROJECT_NAME}.xcodeproj \ -scheme ${TEST_SCHEME} \ -configuration Debug \ -sdk iphonesimulator5.1 \ clean build \ TEST_AFTER_BUILD=YES

将iphonesimulator设置为5.1版似乎解决了这个问题。 在这个问题上有雷达错误。

本文还提到了一个很好的解决scheme:

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

此外,还有一点可以帮助在iOS6.0模拟器SDK上运行命令行testing

我使用雪松和这个调整帮助我:

首先,你需要稍微更新你的文件:

  // 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将运行良好,有一些运行时警告,但至less他们将能够运行:)