Xamarin Test Cloud is now part of Visual Studio App Center! Get Started.

Calabash 0.10.0

0.10.0 changelog

Possible Breaking Changes

The minitest gem version 5.4 was recently released and it changed its base class from Minitest::Test to MiniTest::Unit::TestCase. [1] This change is incompatible with the way calabash provided access to the Test::Unit::Assertions API. We have decided not to include Test::Unit::Assertions in calabash because nothing in calabash depends on them. Users who want access to assertions in their tests should follow the instructions on the minitest homepage. [2] More details can be found in the pull-request for this change. [3]

Thanks to @crishoj for helping test the 'minitest' fixes. [4]

  • [1] http://stackoverflow.com/questions/24209097
  • [2] https://github.com/seattlerb/minitest
  • [3] https://github.com/calabash/calabash-ios/pull/483
  • [4] https://github.com/calabash/calabash-ios/pull/395

Xcode 6 beta 7 and iOS 8 beta 5 Support

Thank you to everyone who filed bug reports with Apple. Several issues have been resolved with Xcode 6 beta 7. The good news is that Calabash 0.10.0 can be used to test against the new Xcode 6 simulators. With that said, be prepared to adjust your tests for the iOS 8 environment. The bad news is that we have not been able to reliably run tests on iOS 8 beta 5 devices with Xcode 6 beta 7. On the bright side, Xcode beta 7 can be used to test against iOS 6 and iOS 7 devices. As stated above, be prepared to adjust your tests.

The libraries that ship with the gem will be compiled with Xcode 5.1.1 until Xcode 6 is officially released. We have not seen any difference in behavior when we compile the libraries with Xcode 6 beta 7.

We need to stress that the next release of Xcode 6 might change everything we stated above. It is, after all, a beta.


Experimental dylib Support

Currently Calabash iOS requires statically linking in the calabash.framework. Static linking requires a re-build of the project and typically involves maintaining a separate target. This release provides experimental support for dynamically loading the Calabash server at runtime. Dynamic linking has many benefits.

  1. Any .app or .ipa can load the Calabash server at runtime; there is no need to link the calabash.framework to the test target.
  2. The Calabash server and client are never out of sync.
  3. Using Calabash requires no setup or changes to Xcode, Xamarin Studio, or Visual Studio projects.

This is a link to a demonstration video: http://www.screencast.com/t/YDN15tZ8El

We want to stress that this feature is experimental. We are in the early phases of testing. There might be significant stability issues that force us to drop this approach.

We hope that you'll give this a try. We recommend testing against a simulator first; on-device testing has known issues. Start with a "vanilla" app-bundle that is not linked with the calabash.framework.

# From the Console
$ calabash-ios console
> start_test_server_in_background({:inject_dylib => true})

# 01_launch.rb - Before launch hook
Before do |scenario|
  calabash_launcher = Calabash::Cucumber::Launcher.new
  calabash_launcher.relaunch({:inject_dylib => true})

Calabash Plug-In for Frank

This release provides alpha-level support for running Calabash iOS as a Frank plug-in. Frank users can now take advantage of the Calabash iOS API and features like:

  • the Calabash query syntax,
  • interacting with UIWebViews, and
  • on-device testing.

To see the plug-in in action, check out this screencast.

Detailed instruction on how to integrate Calabash and Frank can be found in the README_FRANK.md document.

  • [1] http://developer.xamarin.com/guides/testcloud/calabash/calabash-query-syntax/
  • [2] http://developer.xamarin.com/guides/testcloud/calabash/calabash-query-syntax/#DOM_WebView Support
  • [3] https://github.com/calabash/calabash-ios/wiki/07-Testing-on-physical-iDevices


The public API has been 100% documented. [1]

See README_YARD.md [2] for details about how to document and how to generate docs locally.

Thank you @joelmartinez!

  • [1] http://calabashapi.xamarin.com/ios/
  • [2] README_YARD.md http://git.io/UzumZA

Travis CI

The Calabash iOS toolchain: calabash-ios, run-loop, and calabash-ios-server are now running in Travis CI. [1][2][3]

  • [1] https://travis-ci.org/calabash/calabash-ios
  • [2] https://travis-ci.org/calabash/run_loop
  • [3] https://travis-ci.org/calabash/calabash-ios-server


Validate and log UIAChannel communication

A stability improvement which logs UIA actions via the UIAChannel in Calabash server. Should be transparent to most users.


Improved Visibility Heuristic

Fixes visibility in cases where a transparent view completely overlaps a non-control (e.g. UILabel). Previously, calabash would consider this view invisible. [1]

  • [1] https://github.com/calabash/calabash-ios-server/pull/50

Resetting App and Simulator Content & Settings

Fixed a bug in reset_app_jail; only the sandbox of the most recent SDK was reset.

  • In addition, reset_app_jail has been deprecated. It has been replaced by reset_app_sandbox.
  • Added Calabash::Cucumber::Launcher.reset_simulator for simulating touching the iOS Simulator > Reset Simulator Content and Settings... Menu Item.

Thanks to @nemesis for reporting issue 376.


  • commit 4d95fc0 bad edn dependency
  • pull 419 Readme: Link to Guide for Setup with Custom Build Configuration; thanks @fabb
  • pull 428 Then I touch right and down from "..."; thanks @crishoj
  • pull 441 README.md should show the CI/License badges; thanks @staxmanade
  • pull 384 - call to strings in gem/server compatibility should work on paths with spaces; thanks @Sqeaky


See https://github.com/calabash/calabash-ios/wiki/Deprecated

  • since 0.10.0 Calabash::Cucumber::Device.udid - no replacement
  • since 0.10.0 tap - replaced with tap_mark
  • since 0.10.0 in Calabash::Cucumber::Launcher reset_app_jail has been replaced with reset_app_sandbox. This method has been deprecated, but does not issue a warning.
  • since 0.10.0 done - replaced with tap_keyboard_action_key. This method has been deprecated, but does not issue a warning.
  • since 0.10.0 xcode_bin_dir - not replaced.
Upcoming Deprecations

The following classes/modules have been moved to the run-loop gem. They will be deprecated and replaced with their run-loop equivalents in future releases.

  • Calabash::Cucumber::Version
  • Calabash::Cucumber::SimulatorAccessibility
  • Calabash::Cucumber::XcodeTools
  • Calabash::Cucumber::PlistBuddy

Special Thanks

Thank you to everyone who waited patiently for the ruby-zip update.

Xamarin Workbook

If it's not already installed, install the Xamarin Workbooks app first. The workbook file should download automatically, but if it doesn't, just click to start the workbook download manually.