This is the intended behavior. What you are seeing is actually not the same app launching twice but two different apps:
The first launch is the UITestRunner app. When starting a UITest, Xcode builds a UITestRunner app that interacts with your app. This runner app is needed because UITests work differently than Unit Tests.
Unit Tests work within the scope of your app. In other words they have access to all of your app's code, variables and state. Because of that when running a Unit Test only your app is launched.
UITests "use" your app like a user would. They do not have any access to your app's code. All they can do is use the user interface to interact with the app. UITests run in a different process than your app. That's the role of the UITestRunnerApp. It synthesizes events that your app can respond to. In other words: The UITestRunnerApp simulates a real user.
So when starting a UITest you indeed see two apps launching. First the UITestRunner app (which will immediately be send to the background) and then you app.