Manchester City’s Oleksandr Zinchenko fired an unstoppable shot in the 27th minute to put Ukraine ahead, but with two minutes left, Emil Forsberg equalized with a deflected shot from 25 yards – his fourth goal of the competition.
A captivating fight continued after the break with Forsberg hitting the woodwork twice but without more goals he moved on to an extra 30 minutes where Italian referee Daniel Orsata, with the help of VAR, sent off Swede Marcus Danielson in the 99th minute for a high tackle on Ukrainian substitute Artem Besedin.
The 10-man Swedes looked like they wanted to hold up on penalties, but as the game ended with three minutes of added time, Dovbyk managed a Zinchenko cross from close range.
Now, after a night of effort and drama in Glasgow, Ukraine will face Gareth Southgate’s side, who beat Germany 2-0 earlier today, in Rome on Saturday night.
Sweden marked the start of the race, but in the 10th minute goalkeeper Robin Olsen had to make a nice save on a well-executed strike from Roman Yaremchuk after captain Andriy Yarmolenko put him inside the area.
The Swedes came back and Alexander Isak finished a nice movement, curling a drive from inside the box just after the far post.
Ukraine, however, took advantage of the next opportunity they created.
Yarmolenko passed Zinchenko on the other side of the box and a powerful left-footed strike from the talented 24-year-old passed through Olsen.
However, Bushchan was unlucky when Forsberg took a pass from Isak and pushed from 25 yards, the ball taking a gash at Illya Zabarnyi before passing past the keeper and settling into the net.
Both teams did it again after the break and Larsson got closer with a shot from a distance before Ukraine’s Serhiy Sydorchuk and then Forsberg hit the outside of the post with effort from either side.
Right on time, Isak failed to connect properly with a long ball over it and missed the mark with only the keeper to beat, although he may have been offside.
Bushchan saved Dejan Kulusevski’s coiling shot from 16 yards and at the other end, Olsen recovered a shot from Yarmolenko, also inside the penalty area, before the influential Forsberg crushed a drive from the edge of the surface against the bar.
Kulusevski had a chance in the last minute when he passed the Ukrainian defense, but his shot was brilliantly blocked by defender Oleksandr Karavaev.
Then came extra time and the dismissal of Danielson, after receiving a yellow card at first, for his challenge against substitute Besedin who forced him to be replaced by Viktor Tsygankov.
Dovbyk, in place of Yarmolenko at halftime in extra time, offered himself an over the bar chance after 112 minutes – he could have been offside – but he caught up, then some when he stooped to win a spectacular winner.