A small Ruby wrapper for running OCUnit tests with xcodebuilder
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



ocrunner is a little Ruby wrapper for running OCUnit tests in Xcode from the command line. Its main purpose is to parse the huge output from xcodebuild and display a pretty summary to the user.

To use this, you'll need to be set up with a test target. See developer.apple.com/mac/articles/tools/unittestingwithxcode3.html


cd path/to/xcode/project/directory

To run tests as files are changed (autotest-style), use:

ocrunner --auto


Control-c: kill ocrunner Control-: toggle verbosity and rerun tests. This is nice for when the pretty filtered output doesn't show quite enough information to you.

Pretty debug logging with OCLog() and OCOLog()

This is a little crazy, but ocrunner has support for displaying debug log messaged from your Objective-C code through the use of two custom logging macros. The messages are colored purple in order to make them easier to see in the verbose output. To use this feature, add the following macro to a header or prefix file in your Xcode project:

#define OCLog(format, ...) NSLog([NSString stringWithFormat: @"%s:%d:%s:\033[35m%@\033[0m", __PRETTY_FUNCTION__, __LINE__, __FILE__, format], ## __VA_ARGS__)
#define OCOLog(object) OCLog(@"%@", object)

OCLog is a drop in replacement for NSLog(). OCOLog is for logging a single values without having to specify the format string.

ocrunner will display the latest version of this macro when run with –oclog-help.

I don't like your defaults

Don't worry, you can specify the target/configuration/sdk options passed to xcodebuild. You can see all the available options by running ocrunner -h:

         --sdk, -s <s>:   SDK to build against (default: iphonesimulator3.1.3)
      --target, -t <s>:   Target to build (default: Test)
      --config, -c <s>:   Configuration to use (default: Debug)
        --parallel, -p:   Use multiple processors to build multiple targets (parallelizeTargets) (default: true)
            --auto, -a:   Watch filesystem for changes and run tests when they occur
           --growl, -g:   Report results using Growl
   --debug-command, -d:   Print xcodebuild command and exit
         --verbose, -v:   Display all xcodebuild output after summary
--loud-compilation, -l:   Always show verbose output when a compilation or linking error occurs (default: true)
          --oclog, -r:    Display OCLog log messages (default: true)
     --oclog-help, -o:    Print OCLog code example and exit
         --version, -e:   Print version and exit
            --help, -h:   Show this message

Note on Patches/Pull Requests

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don't break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)

  • Send me a pull request. Bonus points for topic branches.


Copyright © 2010 Jim Benton. See LICENSE for details.