The fifth argument to wp_enqueue_script() decides whether the tag goes in the head, where it blocks parsing, or before </body>, where it does not. The default is the head.
wp_enqueue_script( 'shop-app', $url, array( 'jquery' ), '2.1.0', true );
// ^ footer
Almost everything belongs in the footer; the exceptions are a script that must run before first paint, such as a theme switcher avoiding a flash, and a polyfill something else depends on. Dependencies are resolved across both positions, so a footer script depending on a head script works — but a head script depending on a footer one is silently reordered into the head, which defeats the point.