Substitute midfielder Yakub Blaszczykowski scored in the 54th minute with an assist from Arkadiusz to help Poland bag three points that took their tally to seven points.
From the group, Northern Ireland, who have three points, still have hopes qualifying for the pre-quarterfinals as a third-best team, while Ukraine were knocked out with three successive defeats.
In the match at the Stade Velodrome, Poland looked the better side at the start, with the striker Robert Lewandoski and Milik - looking threatening very early, while the Polish took time to settle down.
Their first clear-cut chance came in the third minute when Bayern Munich ace Lewandoski grabbed a ball inside the box only to send it couple of feet over the bar.
In the 17th minute, Ukraine’s Andriy Yarmolenko’s peedy run on the right in a fast counter-attack caught Poland off-guard but the 26-year-old sent the ball wide on the far post.
In the 54th minute, a Milik corner helped Poland take the lead through Blaszczykowski, who danced his way past Rotan before chipping the ball into the far corner.
Poland could have doubled the lead couple minutes later but Bartosz Kapustka shot just wide of the near post after cutting in from the left, as the Ukranian back-line looked stunned. Rotan also tested goalkeeper Lukasz Fabianski who had to pick out both his hands across the floor to keep the shot away.
Poland sustained a tough late period but managed to hang on to the 1-0 lead in the end.