Technical Q&A QA1747

Debugging Deployed iOS Apps

Q:  How can I debug a deployed app without Xcode's debugger?

A: Once you have deployed your app, either through the App Store or as an Ad Hoc or Enterprise build, you won't be able to attach Xcode's debugger to it. To debug problems you'll need analyze Crash Logs and Console output from the device.

For more information on writing rich NSLog statements, see Improved logging in Objective-C.

Getting Crash Logs and Console Output

Getting Crash Logs Directly From a Device Without Xcode

You can have users locate a crash log on their devices.

1) Open Settings app

2) Go to Privacy, then Diagnostics & Usage

3) Select Diagnostics & Usage Data

4) Locate the log for the crashed app. The logs will be named in the format: <AppName>_<DateTime>_<DeviceName>

5) Select the desired log and using the text selection UI select the entire text of the log, then select Copy

6) Paste the copied text to Mail and send to an email address as desired

Getting Crash Logs and Console Output With Xcode

Even though you won't be able to run the app in Xcode's debugger, Xcode can still give you all the information you need to debug the problem.

Using Xcode 6

1) Plug in the device and open Xcode

2) Choose Window -> Devices from the Xcode menu

3) Under the DEVICES section in the left column, choose the device

4) To see crash logs, select the View Device Logs button under the Device Information section on the right hand panel

5) To see the device console, click the up-triangle at the bottom left of the right hand panel to show the device console, then click the down arrow on the bottom right to save the console as a file

6) Find your app in the Process column and select the Crash log to see the contents.

7) Xcode 6 will also list low memory logs here; these will be shown with a Process name "Unknown" and Type "Unknown. You can examine the contents of the log to determine whether any of these are caused by your app. For more information about low memory logs, see Understanding and Analyzing iOS Application Crash Reports.

Using Xcode 5

1) Plug in the device and open Xcode

2) Open the Organizer window and select the Devices tab

3) Under the DEVICES section in the left column, expand the listing for the device

4) Select Device Logs to see crash logs or select Console to see Console output

Enabling App Store Diagnostic Reporting

If an app is deployed in the App Store, then you will be able to see crash logs for it in iTunes Connect. But only if the effected customers have opted into sending diagnostic and usage information to Apple.

If someone is reporting a crash, and you do not see a corresponding report in iTunes Connect, you may want to direct them to the following knowledge base articles for Mac or for Windows so they can opt-in to sending you crash reports.

Understanding Crash Logs and Console Output

The first and most important step to understanding crash logs is to Symbolicate them. Symbolication replaces memory addresses with human-readable function names and line numbers.

If you get crash logs off a device through Xcode's Devices window, then they will be symbolicated for you automatically after a few seconds. Otherwise you will need to symbolicate the .crash file yourself by importing it to the Xcode. Open the Xcode Devices window, select the device in question, drag the crash file to the left hand column, control-click the file you just added and select “Re-Symbolicate Log” from the menu.

For more information on interpreting crash logs, see Understanding and Analyzing iOS Application Crash Reports technote and the Understanding Crash Reports on iPhone OS WWDC 2010 Session.



Document Revision History


DateNotes
2015-05-14

Added method to obtain crash logs directly from a device without using Xcode

2015-01-08

Updated links and removed sections no longer relevant.

2014-12-15

Updated instructions for obtaining device console and logs with Xcode 6

2012-03-28

Added notes about low memory logs.

2011-11-09

New document that describes how to debug apps that have been deployed, either through the App Store or as Ad Hoc builds