iOS: How to debug "freshly launching" an app from a URL iOS: How to debug "freshly launching" an app from a URL ios ios

iOS: How to debug "freshly launching" an app from a URL


These steps can be followed on the device. Founded at this link.

  1. Run the app from Xcode to install it on your device and then stop itfrom Xcode.
  2. Force quit the app from the app switcher UI on the device.
  3. Navigate to the scheme for the project in Xcode. Under the Runsection's Info tab, there is a radio button for "Wait for executableto be launched". Make sure this is checked instead of the"Automatically" option.
  4. Run the app from Xcode. It will not openon the device, but the debugger will wait for it to open and then itwill attach to it.

On the simulator as suggested by Marc-Alexandre Bérubé.

  1. Run your app on the simulator.
  2. Force quit the app on the simulator. Press cmd+shift+(hit h twice). Swipe the app up.
  3. Open your terminal and enter this xcrun simctl openurl booted http://yourdomain/path.


You need to configure your Xcode app scheme to wait for the app to be launched manually. Here is how you do it: http://blogmobile.itude.com/2013/09/03/how-to-debug-deep-linking-in-ios/.

You then need to copy the launch URL and paste it to Mobile Safari. This will launch your app, and make Xcode get attached to the running app process.


While the answers that mention activating "Wait for executable to be launched" are good in theory, for various reasons these didn't work for me. On the simulator, though Xcode claimed it had "attached", no logs or breakpoints were ever shown. On-device I was running iOS 13, building from Xcode 10, and using Xcode 11 to load, so I didn't have any debugging symbols. That was more of a personal problem, I suspect on device debugging may have worked.

What worked best for me was just opening up Console.app on my mac, and using the OSLog APIs to get a solid stream of caveman debugging from the simulator.

  1. Run the app from Xcode on the simulator.
  2. Then immediately quit it on the simulator via the app launched (Cmd-Shift-H * 2)
  3. Launch the app by tapping a deep link I sent to myself via the Messages app
  4. Observe my logs in Console.app

It's not pretty, but it is highly reliable.

It's also worth mentioning, that you can protect this useful feature by testing cold start deep-linking via XCUITest. You can call app.terminate in your XCUITests, then open a deep link (typically via a static web page you've setup, I use public GitHub wikis for this) and write tests and assert behaviors just like normal.