small medium large xlarge

Test iOS Apps with UI Automation: Bug Hunting Made Easy


Cover image for Test iOS Apps with UI Automation

Test iOS Apps with UI Automation

Bug Hunting Made Easy


If you’re an iOS developer or QA professional tapping through an app to reproduce bugs or performance issues you thought were solved two releases ago, then this is your book. Learn how to script the user interface, assert correct behavior, stub external dependencies, reproduce performance problems, organize test code for the long haul, and automate the whole process so the machine does the work. You’ll walk through a comprehensive strategy with techniques using Apple’s tools that you can apply to your own apps.

Customer Reviews

Jonathan Penn is the perfect person to teach you how to test your iOS apps with
UI Automation. He is passionate about testing and has a lot of experience both
in iOS development and in the JavaScript required to make your tests sing. This
book is filled with techniques you’ll use immediately to make your iOS apps more

- Daniel Steinberg,

, Dim Sum Thinking

Automated testing is essential to delivering quality software. In this book Jonathan
lays out the details of how to use the UI Automation tools to build a test suite
that will keep your app in tip-top shape.

- Bill Dudney

Automated testing is a technique that every developer can benefit from. It’s a dry
topic, but Jonathan is able to bring clarity, comedy, and context to a very useful
though poorly documented tool.

- Josh Smith

Web-to-mobile converts often find it challenging to bring their automated-testing
habits with them, due in part to the fact that touch gestures and native UI widgets
are much harder to expose to automated testing than HTTP requests and HTML
output. Apple’s UI Automation is a big step in the right direction in this regard,
but it takes the guidance of a pioneer like Jonathan Penn to assemble a full
repertoire of developer tools to extend the reach of Apple’s tools and achieve a
high level of code confidence.

- Chris Adamson

My iOS development knowledge has been raised a notch by reading this book. It’s
great that I could take my existing JavaScript skills and learn how to apply them
to the field of iOS testing. I’ll definitely be using these techniques on the next app
I build!

- Stephen Orr,

Lead Developer,, Made Media

Being a big advocate of automated acceptance testing myself, in the past few years
UI Automation has become my weapon of choice for iOS applications. Jonathan
Penn is an absolute authority on the topic and his work has made my life easier
too many times to count. Now whenever people ask for advice on the topic, I can
just point them to this book, and it will answer all their questions and then some.

- Alexander Repty

Jonathan’s book is the best I’ve read about building great automated tests for
your iOS applications. The book has clear and comprehensive examples that help
you understand how to write great tests for your own projects. Not only does he
show you how to write solid tests; he shares best practices and techniques to
maintain a test suite as it grows. If you want to go beyond unit tests and automate
your app end-to-end, this book will get you started.

- Shiney Rossi,

Senior Mobile Engineer,, Nest Labs

Jonathan Penn succeeds at opening up the world of UI Automation testing to
everyone with his new book, Test iOS Apps with UI Automation. From acceptance
testing to performance testing, Test iOS Apps covers all the steps to go from zero
to a full suite of automated tests that will help make your apps better. Sit down
and enjoy this engaging book to learn how to automate everything!

- Conrad Stoll,

Software Engineer,, Mutual Mobile

See All Reviews

What You Need

You’ll need a Mac running at least Mac OS X Lion (10.7) and Xcode 4.6.

Contents & Extracts

  • Introduction
    • What Can We Do About It?
    • The Road Ahead
    • Expectations and Technical Requirements
    • Online Resources
  • UI Automation Overview
  • Testing Behavior With UI Automation
    • Talking The UI Through JavaScript
    • Reporting Errors
    • Verifying The Test Does What It Says
  • Building Up A Test Suite
    • Testing With A Modal Alert View
    • Importing Script Files At Runtime
    • Testing Results From A Live API
    • Grouping Test Steps And Their Output
  • Organizing Test Code
    • Starting A JavaScript Toolbox
    • Describing The App With Screen Objects
    • Reusing A Generic Screen Prototype
    • Converting Our Test Suite To Screen Objects
  • Maps, Gestures, and Alerts
  • Strategies For Testing Universal Apps
  • Automating Performance Tests
    • Setting Up Custom Instruments Templates
    • Capturing Steps To Reproduce A Memory Leak
    • Triggering Simulator Memory Warnings With AppleScript
    • Stress Testing
  • Setting Up Application Data
    • Seeding Data in Xcode With Application Data Packages
    • Seeding Data Dynamically With A Factory
    • Choose Your Own Adventure With Environment Variables
    • Hiding Test Setup Code From Release
  • Stubbing External Services
    • Choosing A Geographical Location
    • Faking A Network Service API
    • Wrapping Service APIs In A Facade
    • Stubbing A Facade With Data In The App Bundle
  • Command Line Workflow
    • Practicing With The Raw Commands
    • Automating The Build and Run Process With Rake
    • Reading Environment Variables From Script Files
    • Resetting The Simulator To Test Permissions
    • Running Tests On a Connected Device
  • Third Party Tools And Beyond
    • Enhancing UI Automation
    • Testing Outside The Box


Jonathan Penn is a software developer with a long history of quality work sprinkled with mischief. When not consulting with clients, he speaks at conferences, is the mad scientist behind the featured apps at, and is scribbler-in-chief at, a technical blog for exceptional iOS resources and commentary.