Tutorial: Calabash config

Naji Dmeiri edited this page Mar 13, 2016 · 11 revisions

This tutorial demonstrates how to add the calabash.framework to your existing production app by creating a new Calabash Xcode Build Configuration. Linking the calabash.framework will start the Calabash iOS server when the Calabash version of your app is launched.

This approach has the advantage that it is easy to setup and maintain. It also has the advantage of allowing you to set up Preprocessor Compiler Macros for the Calabash builds only. Preprocessor macros allow you to add #ifdef statements to conditionally include or exclude blocks of code.

Using a Calabash Build Configuration is a happy medium between a separate -cal target and simply linking Calabash in the Debug Build Configuration.

This configuration was initially suggested by Jian Fang and David Siegel in his Do you love Calabash iOS but hate that cal target? blog post. Thanks!

Why load calabash.framework only in the Calabash config?

The Calabash server contains symbols and methods that will cause any application that links to it to be rejected from the App Store. By default, applications are archived for the App Store (and for distribution to beta testers) using a Release configuration. By only linking the calabash.framework in the Debug configuration will ensure that you never accidently submit an application that has the Calabash server linked.

Starting Point Completed Video
master demo/calabash-config screencast.com ~5 minutes

Step 1. Create Calabash configuration

00-calabash-config

===

01-calabash-config

Step 2. Download calabash.framework

Create a Gemfile in the same directory as your .xcodeproj:

source "https://rubygems.org"

gem "calabash-cucumber", ">= 0.16", "< 2.0"

Then execute the following commands in that directory:

$ bundle
$ bundle exec calabash-ios download

----------Info----------
caution: excluded filename not matched:  __MACOSX/*
caution: excluded filename not matched:  calabash.framework/.DS_Store
---------------------------

3. Link calabash.framework

If your Debug configuration already links CFNetwork.framework, you can skip the "-framework" and "CFNetwork" linker flags.

02-calabash-link

These are the linker flags:

-ObjC -force_load "$(SOURCE_ROOT)/calabash.framework/calabash" -framework CFNetwork

If your app already links the CFNetwork.framework, don't add "-framework CFNetwork".

4. Create Calabash Scheme

03-manage-schemes

===

04-duplicate-scheme

===

05-set-scheme-build-config

===

06-share-scheme

===

5. Build and Run

Be sure that you have selected the Calabash configuration. You can target a simulator or physical device.

In your Xcode console you should see the following output - the exact content will differ by Calabash version:

DEBUG CalabashServer:222 | Creating the server: <LPHTTPServer: 0x7f80b3d066e0>
DEBUG CalabashServer:223 | Calabash iOS server version: CALABASH VERSION: 0.16.4
Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.