Skip to content

Hot Topics

Joshua Moody edited this page Mar 11, 2016 · 50 revisions

The topics on this page change regularly.

Beware of linking directly to topic headers.

Contents

  1. iOS 7.1 Simulators not supported
  2. NSLog output can cause apps to become unresponsive during testing.
  3. Errno::EINTR: Interrupted system call AKA RunLoop::Fifo::NoReaderConfiguredError

1. instruments and Instruments.app cannot launch apps on iOS 7.1 Simulators on Yosemite with Xcode 6

iOS 7.0.3 Simulators have never been supported on Yosemite. At some point, iOS 7.1 Simulators stopped working as well. From the stack trace, it looks like Apple has broken support for launching apps on iOS Simulators.

iOS 7 Simulators are not supported on El Cap.

2. NSLog output can cause apps to become unresponsive during testing.

If your app becomes unresponsive during testing, check your device or simulator logs for an unusual or a high volume of NSLog output.

It has been demonstrated that a spike in NSLog output can cause the UIAutomation API to become unresponsive. This has been reproduced using the Instruments.app with applications that are not linked with the calabash.framework. This is an Apple bug.

Viewing Simulator Logs

# Shell A
$ xcrun instruments -s devices
<snip>
iPhone 5s (8.1 Simulator) [08B232DB-82B9-43F0-85EA-D769D5697306]
<snip>
$ tail -f ~/Library/Logs/CoreSimulator/08B232DB-82B9-43F0-85EA-D769D5697306/system.log

# Shell B
$ be DEVICE_TARGET="iPhone 5s (8.1 Simulator)" cucumber

Viewing Device Logs

You can view device logs from Xcode.

  1. Open Xcode and use Command + Shift + 2 to show the Devices window.

====

2015-02-04_20-43-56

====

You can also tail device logs with idevicesyslog. NOTE: We do not maintain the ideviceinstaller, libimobiledevice, or homebrew tools. This is third-party software. If you have issues with these tools, you are on your own. Please do not report problems with these tools on the Calabash channels.

# Install with homebrew.
$ brew install ideviceinstaller
$ xcrun instruments -s devices
<snip>
denis (8.1) [19xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0d]
<snip>

# Shell A
$ idevicesyslog -u 19xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0d

$ Shell B
$ be DEVICE_TARGET=https://denis.local:37265 DEVICE_TARGET="19xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0d" cucumber

3. Errno::EINTR: Interrupted system call

See the discussion here: https://github.com/calabash/run_loop/issues/35

This is an active issue; no comprehensive solution exists yet.

You can see this error if:

  1. The bundle identifier is incorrect.
  2. The app was not signed with a developer certificate.
  3. The device is not enabled for UIAutomation. Starting in iOS 8, you must enable UIAutomation on the device using the switch in Settings.app > Developer > Enable UIAutomation.
  4. The device is not enabled for development. We have observed that devices can change from enabled to disabled for development when migrating from iOS 7 to iOS 8 and between iOS 8 betas. The best practice is to restart the device after migrating. See instructions below for verifying that your device is enabled using the Instruments.app.
  5. The device should appear in Xcode's Devices window (Shift + Command + 2) without a yellow warning.
  6. The device must appear in Xcode's Scheme > Target device list as eligible. See below for a screenshot.

To work around issue 2, either rebuild the app using a developer provisioning profile via Xcode, or resign the app using a developer certificate / provisioning profile. See Apple Developer for more information.

To work-around 4, 5, and 6, you can try plugging the problem device into another Mac that is running Yosemite and the latest (non-beta) version of Xcode.

Requesting Feedback

There is a simple, definitive test to determine if the Xcode toolchain or Calabash is blame. [1] Please report results in the run-loop GitHub issue. [2]

Testing if the Device is Enabled for Development
  1. Connect the device via USB.
  2. Open Instruments.app for your current version of Xcode.
  3. Select the Automation template
  4. In the top left corner of the window, select your device and the a target application.

If your device is not enabled for development, Instruments.app will tell you to open Xcode to enable the device for development.

image


Example of an Ineligible Device

image

Clone this wiki locally