Yevhen Seleznyov's second-half penalty proved to be enough on a tough evening for the away side, and they are level on points with Slovakia, who lost 1-0 to Belarus.
Ukraine should have opened the scoring in the first half, but they wasted long spells of pressure, with Yevhen Seleznyov heading over from Ruslan Rotan's inviting cross.
Macedonia were clearly eager to frustrate the visiting attacking, and they almost snatched the lead against the run of play when Andriy Pyatov was forced into a save from Agim Ibraimi.
Ukraine dominated either side of the half-time interval and they were rewarded with a penalty when Leonard Zuta handled a dangerous cross in the box.
Seleznyov took on the responsibility from 12 yards and made no mistake as he fired Ukraine to a deserved lead.
Yarmolenko twice missed good chances with efforts that drifted wide of the post as Ukraine started to slice open the Macedonian defence on a regular basis.
However, the victory was wrapped up late on when substitute Artem Kravets combined with Rotan before firing in from a tight angle to clinch the win.