Ваша сборка остается на этом этапе, потому что выполняемая вами команда не прекратит работу, пока вы не запросите ее. Скорее всего, веб-сервер работает правильно, однако XCode ожидает его завершения, чего не произойдет, пока вы не нажмете кнопку «Стоп».
Трассировка стека, которую вы видите, нормальна, когда вы останавливаете встроенный веб-сервер в Python. Вы увидите подобное сообщение, если вы используете CTRL + C для выхода из него при использовании терминала.
Как правило, на этапах «Выполнение оболочки» в вашей сборке должны запускаться команды, которые выполняют задачу, а затем завершаются сами по себе, однако, если вы пытаетесь запустить веб-сервер на время сборки, вам потребуется использовать две фазы. Один этап в начале сборки для запуска веб-сервера и его разветвления, а другой этап в конце сборки для его завершения. Хотя по моему опыту переменные не сохраняются между фазами сборки, вы можете записать PID в файл и затем прочитать его на более позднем этапе.
Помимо этого решения, я бы предложил переосмыслить, нужно ли запускать сервер как часть вашей сборки. Если вы начнете использовать некоторые из Continuous Integration в будущем или просто захотите запустить несколько сборок одновременно, дополнительные сложности с выделением номеров портов вызовут проблему.